Name: series-workflow6lbz5 Phase: Running StartedAt: 2026-09-10 18:09:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lbz5[0] Phase: Running StartedAt: 2026-09-10 18:09:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lbz5[0].run-triage Phase: Running StartedAt: 2026-09-10 18:09:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lbz5[0].run-triage(0) Phase: Running StartedAt: 2026-09-10 18:09:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "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": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "33a8da5a-c76c-4fa7-a5d4-42c44e7b237e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "sync_linked_regs", "check_alu_op", "check_mem_access", "adjust_reg_min_max_vals", "check_stack_read_fixed_off", "check_stack_write_fixed_off", "coerce_reg_to_size_sx", "tnum_sext", "regsafe", "bpf_is_state_visited", "bpf_clear_singular_ids" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3N5bmNfbGlua2VkX3JlZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfYWx1X29wJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NvZXJjZV9yZWdfdG9fc2l6ZV9zeCYjMzQ7LAogICAgJiMzNDt0bnVtX3NleHQmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDticGZfY2xlYXJfc2luZ3VsYXJfaWRzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBhbmQgZW5oYW5jZXMgcmVnaXN0ZXIgcmVsYXRpb25zaGlwIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKHNwZWNpZmljYWxseSBoYW5kbGluZyBzY2FsYXIgc3VicmVnaXN0ZXIgcmVsYXRpb25zIGxpa2UgMzItYml0IHplcm8tIGFuZCBzaWduLWV4dGVuc2lvbnMsIG5hcnJvdyBzdGFjayBzcGlsbHMvZmlsbHMsIGFuZCBtb3ZpbmcgYWRkLWNvbnN0IGZsYWdzIGZyb20gcmVnaXN0ZXIgSURzIGludG8gZGVkaWNhdGVkIHN0cnVjdCBmaWVsZHMpLlxuXG4tIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZSAoc3RydWN0IGJwZl9yZWdfc3RhdGUpIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBCUEYgdmVyaWZpZXIgZHVyaW5nIHByb2dyYW0gdmVyaWZpY2F0aW9uIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuLSBSZWdpc3RlciBzdGF0ZSBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCAodmlhIG1lbXNldCBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Ugb3IgZXhwbGljaXQgYXNzaWdubWVudCBpbiBfX21hcmtfcmVnX2tub3duIGFuZCBjbGVhcl9zY2FsYXJfaWQpLCBzbyBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC5cbi0gUHVyZSBhcml0aG1ldGljIGhlbHBlcnMgbGlrZSB0bnVtX3NleHQgb3BlcmF0ZSBlbnRpcmVseSBvbiBwYXNzLWJ5LXZhbHVlIHN0cnVjdHMgd2l0aCBpbml0aWFsaXplZCBhcmd1bWVudHMuXG4tIEFueSBwb3RlbnRpYWwgYnVncyBpbiB2ZXJpZmllciByYW5nZSB0cmFja2luZyBvciByZWdpc3RlciBzeW5jaHJvbml6YXRpb24gY291bGQgbGVhZCB0byB1bnNvdW5kIHZlcmlmaWVyIGxvZ2ljIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBleGVjdXRpb24sIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgYW5kIEtBU0FOLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2sgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZm9yIHNjYWxhciByZWdpc3RlciBsaW5rYWdlLCBpbnRyb2R1Y2luZyBzdWJyZWcgdHJhY2tpbmcgKFNVQlJFR19aRVhULCBTVUJSRUdfU0VYVCkgZm9yIDMyLWJpdCBuYXJyb3dpbmcgb3BlcmF0aW9ucywgc2lnbi1leHRlbnNpb24gdG51bSBoZWxwZXJzICh0bnVtX3NleHQpLCBzdGFjayBzcGlsbC9maWxsIHNjYWxhciB0cmFja2luZywgYW5kIHVwZGF0aW5nIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcyAocmVnc2FmZSkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIGFuZCBib3VuZHMgdHJhY2tpbmcgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZmOTVhMTNmNTZkODYyZmRiNTc4ZWZhMTBkMGMyOGZjM2YxNmZlZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxODozMDowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggOTcyN2RmNWFmODNhYi4uOTIwYzk0OTBlY2M4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0zNSw2ICYjNDM7MzUsMjcgQEAgZW51bSBicGZfaXRlcl9zdGF0ZSB7XG4gXHRCUEZfSVRFUl9TVEFURV9EUkFJTkVELFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlY29yZHMgdGhhdCBhIHJlZ2lzdGVyIGlzIChiYXNlICYjNDM7IC1cdTAwM2VkZWx0YSkgd2l0aGluIGl0cyAtXHUwMDNlaWQgc2V0OlxuJiM0MzsgKiByMSAmIzQzOz0gMTA7ICAgcjEgZ2V0cyBBRERfQ09OU1RfNjQgZGVsdGFcbiYjNDM7ICogdzMgJiM0Mzs9IDEwOyAgIHIzIGdldHMgQUREX0NPTlNUXzMyIGRlbHRhXG4mIzQzOyAqL1xuJiM0MztlbnVtIGJwZl9hZGRfY29uc3Qge1xuJiM0MztcdEFERF9DT05TVF9OT05FID0gMCxcbiYjNDM7XHRBRERfQ09OU1RfMzIsXHRcdC8qIGRlbHRhIHdhcyBhZGRlZCB3aXRoIGEgMzItYml0IEFMVSBvcCAqL1xuJiM0MztcdEFERF9DT05TVF82NCxcdFx0LyogLi4uIHdpdGggYSA2NC1iaXQgQUxVIG9wICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWNvcmRzIHRoYXQgYSByZWdpc3RlciBzaGFyZXMgb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2Ugb2YgaXRzXG4mIzQzOyAqIC1cdTAwM2VpZCBzZXQsIGFuZCBob3cgaXRzIGhpZ2ggYml0cyBmb2xsb3cgZnJvbSB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBicGZfc3VicmVnIHtcbiYjNDM7XHRTVUJSRUdfTk9ORSA9IDAsXG4mIzQzO1x0U1VCUkVHX1pFWFQsXHRcdC8qIGhpZ2ggYml0cyBhcmUgemVybyAoMzItYml0IHplcm8tZXh0ZW5kaW5nIG1vdikgKi9cbiYjNDM7XHRTVUJSRUdfU0VYVCxcdFx0LyogaGlnaCBiaXRzIHJlcGVhdCBiaXQgMzEgKDMyLWJpdCBzaWduLWV4dGVuZGluZyBtb3YpICovXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXG4gXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xuQEAgLTEzNiwxNiAmIzQzOzE1Nyw5IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXG4gXHQgKi9cbiBcdC8qXG4tXHQgKiBVcHBlciBiaXQgb2YgSUQgaXMgdXNlZCB0byByZW1lbWJlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBcJiMzNDtsaW5rZWRcJiMzNDtcbi1cdCAqIHJlZ2lzdGVycy4gRXhhbXBsZTpcbiYjNDM7XHQgKiBSZWdpc3RlcnMgc2hhcmluZyBhbiAtXHUwMDNlaWQgYXJlIFwmIzM0O2xpbmtlZFwmIzM0OzpcbiBcdCAqIHIxID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIxLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbi1cdCAqIHIxICYjNDM7PSAxMDsgICByMS1cdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVCBhbmQgcjEtXHUwMDNlZGVsdGEgPT0gMTBcbi1cdCAqIHIzID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIzLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbi1cdCAqIHczICYjNDM7PSAxMDsgICByMy1cdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cdTAwM2VkZWx0YSA9PSAxMFxuIFx0ICovXG4tI2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVIFx1MDAzY1x1MDAzYyAzMSlcbi0jZGVmaW5lIEJQRl9BRERfQ09OU1QzMiAoMVUgXHUwMDNjXHUwMDNjIDMwKVxuLSNkZWZpbmUgQlBGX0FERF9DT05TVCAoQlBGX0FERF9DT05TVDY0IHwgQlBGX0FERF9DT05TVDMyKVxuIFx0dTMyIGlkO1xuIFx0LypcbiBcdCAqIFRyYWNrcyB0aGUgcGFyZW50IG9iamVjdCB0aGlzIHJlZ2lzdGVyIHdhcyBkZXJpdmVkIGZyb20uXG5AQCAtMTY0LDYgJiM0MzsxNzgsMTIgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUge1xuIFx0dTMyIGZyYW1lbm87XG4gXHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIb3cgdGhpcyByZWdpc3RlciByZWxhdGVzIHRvIHRoZSBvdGhlcnMgc2hhcmluZyBpdHMgLVx1MDAzZWlkLlxuJiM0MztcdCAqIE5vbi16ZXJvIG9ubHkgaWYgLVx1MDAzZWlkIGlzLlxuJiM0MztcdCAqL1xuJiM0MztcdGVudW0gYnBmX2FkZF9jb25zdCBhZGRfY29uc3Q6MjtcbiYjNDM7XHRlbnVtIGJwZl9zdWJyZWcgc3VicmVnOjI7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHM2NCByZWdfc21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG51bS5oIGIvaW5jbHVkZS9saW51eC90bnVtLmhcbmluZGV4IGNhMmNmZWM4ZGUwOGEuLjg2NjgwM2RlNTg0MTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3RudW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC90bnVtLmhcbkBAIC02Myw2ICYjNDM7NjMsOSBAQCBzdHJ1Y3QgdG51bSB0bnVtX3VuaW9uKHN0cnVjdCB0bnVtIHQxLCBzdHJ1Y3QgdG51bSB0Mik7XG4gLyogUmV0dXJuIEBhIHdpdGggYWxsIGJ1dCB0aGUgbG93ZXN0IEBzaXplIGJ5dGVzIGNsZWFyZWQgKi9cbiBzdHJ1Y3QgdG51bSB0bnVtX2Nhc3Qoc3RydWN0IHRudW0gYSwgdTggc2l6ZSk7XG4gXG4mIzQzOy8qIFJldHVybiB0aGUgbG93ZXN0IEBzaXplIGJ5dGVzIG9mIEBhIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyAqL1xuJiM0MztzdHJ1Y3QgdG51bSB0bnVtX3NleHQoc3RydWN0IHRudW0gYSwgdTggc2l6ZSk7XG4mIzQzO1xuIC8qIFN3YXAgdGhlIGJ5dGVzIG9mIGEgdG51bSAqL1xuIHN0cnVjdCB0bnVtIHRudW1fYnN3YXAxNihzdHJ1Y3QgdG51bSBhKTtcbiBzdHJ1Y3QgdG51bSB0bnVtX2Jzd2FwMzIoc3RydWN0IHRudW0gYSk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9sb2cuYyBiL2tlcm5lbC9icGYvbG9nLmNcbmluZGV4IGZiMDMyZGZkYzBkZWUuLmI2N2JiZDRkNTdmNDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2xvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2xvZy5jXG5AQCAtNjUxLDkgJiM0Mzs2NTEsMTMgQEAgc3RhdGljIHZvaWQgcHJpbnRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDslc1wmIzM0OywgYnRmX3R5cGVfbmFtZShyZWctXHUwMDNlYnRmLCByZWctXHUwMDNlYnRmX2lkKSk7XG4gXHR2ZXJib3NlKGVudiwgXCYjMzQ7KFwmIzM0Oyk7XG4gXHRpZiAocmVnLVx1MDAzZWlkKVxuLVx0XHR2ZXJib3NlX2EoXCYjMzQ7aWQ9JWRcJiMzNDssIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpO1xuLVx0aWYgKHJlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbiYjNDM7XHRcdHZlcmJvc2VfYShcJiMzNDtpZD0lZFwmIzM0OywgcmVnLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAocmVnLVx1MDAzZWFkZF9jb25zdClcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUmIzQzO2RcJiMzNDssIHJlZy1cdTAwM2VkZWx0YSk7XG4mIzQzO1x0aWYgKHJlZy1cdTAwM2VzdWJyZWcgPT0gU1VCUkVHX1pFWFQpXG4mIzQzO1x0XHR2ZXJib3NlKGVudiwgXCYjMzQ7LmxvMzJcJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKHJlZy1cdTAwM2VzdWJyZWcgPT0gU1VCUkVHX1NFWFQpXG4mIzQzO1x0XHR2ZXJib3NlKGVudiwgXCYjMzQ7LmxvMzJzeFwmIzM0Oyk7XG4gXHRpZiAocmVnLVx1MDAzZXBhcmVudF9pZClcbiBcdFx0dmVyYm9zZV9hKFwmIzM0O3BhcmVudF9pZD0lZFwmIzM0OywgcmVnLVx1MDAzZXBhcmVudF9pZCk7XG4gXHRpZiAodHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjE2MThjNzcxMDVhYjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzY5LDEzICYjNDM7MzY5LDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuICAqIGFuZCByNy5pZD0wIChib3RoIGluZGVwZW5kZW50KSwgd2l0aG91dCB0ZW1wIElEcyBib3RoIHdvdWxkIG1hcCBvbGRfaWQ9WFxuICAqIHRvIGN1cl9pZD0wIGFuZCBwYXNzLiBXaXRoIHRlbXAgSURzOiByNiBtYXBzIFgtXHUwMDNldGVtcDEsIHI3IHRyaWVzIHRvIG1hcFxuICAqIFgtXHUwMDNldGVtcDIsIGJ1dCBYIGlzIGFscmVhZHkgbWFwcGVkIHRvIHRlbXAxLCBzbyB0aGUgY2hlY2sgZmFpbHMgY29ycmVjdGx5LlxuLSAqXG4tICogV2hlbiBvbGRfaWQgaGFzIEJQRl9BRERfQ09OU1Qgc2V0LCB0aGUgY29tcG91bmQgaWQgKGJhc2UgfCBmbGFnKSBhbmQgdGhlXG4tICogYmFzZSBpZCAoZmxhZyBzdHJpcHBlZCkgbXVzdCBib3RoIG1hcCBjb25zaXN0ZW50bHkuIEV4YW1wbGU6IG9sZCBoYXNcbi0gKiByMi5pZD1BLCByMy5pZD1BfGZsYWcgKHIzID0gcjIgJiM0MzsgZGVsdGEpLCBjdXIgaGFzIHIyLmlkPUIsIHIzLmlkPUN8ZmxhZ1xuLSAqIChyMyBkZXJpdmVkIGZyb20gdW5yZWxhdGVkIHI0KS4gV2l0aG91dCB0aGUgYmFzZSBjaGVjaywgaWRtYXAgZ2V0cyB0d29cbi0gKiBpbmRlcGVuZGVudCBlbnRyaWVzIEEtXHUwMDNlQiBhbmQgQXxmbGFnLVx1MDAzZUN8ZmxhZywgbWlzc2luZyB0aGF0IEEtXHUwMDNlQyBjb25mbGljdHNcbi0gKiB3aXRoIEEtXHUwMDNlQi4gVGhlIGJhc2UgSUQgY3Jvc3MtY2hlY2sgY2F0Y2hlcyB0aGlzLlxuICAqL1xuIHN0YXRpYyBib29sIGNoZWNrX3NjYWxhcl9pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4ge1xuQEAgLTM4NCwxNSAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3NjYWxhcl9pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXG4gXHRjdXJfaWQgPSBjdXJfaWQgPyBjdXJfaWQgOiAmIzQzOyYjNDM7aWRtYXAtXHUwMDNldG1wX2lkX2dlbjtcbiBcbi1cdGlmICghY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChvbGRfaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIHtcbi1cdFx0b2xkX2lkIFx1MDAyNj0gfkJQRl9BRERfQ09OU1Q7XG4tXHRcdGN1cl9pZCBcdTAwMjY9IH5CUEZfQUREX0NPTlNUO1xuLVx0XHRpZiAoIWNoZWNrX2lkcyhvbGRfaWQsIGN1cl9pZCwgaWRtYXApKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiBjaGVja19pZHMob2xkX2lkLCBjdXJfaWQsIGlkbWFwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19jbGVhbl9mdW5jX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5AQCAtNDkwLDYgJiM0Mzs0NzUsOCBAQCBzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4ge1xuIFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICByb2xkLVx1MDAzZWFkZF9jb25zdCA9PSByY3VyLVx1MDAzZWFkZF9jb25zdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgcm9sZC1cdTAwM2VzdWJyZWcgPT0gcmN1ci1cdTAwM2VzdWJyZWcgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCk7XG4gfVxuQEAgLTU0Miw4ICYjNDM7NTI5LDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0XHQvKiBleHBsb3JlX2FsdV9saW1pdHMgZGlzYWJsZXMgdG51bV9pbigpIGFuZCByYW5nZV93aXRoaW4oKVxuIFx0XHRcdCAqIGxvZ2ljIGFuZCByZXF1aXJlcyBldmVyeXRoaW5nIHRvIGJlIHN0cmljdFxuIFx0XHRcdCAqL1xuLVx0XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgICAgY2hlY2tfc2NhbGFyX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCk7XG4mIzQzO1x0XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbiBcdFx0fVxuIFx0XHRpZiAoIXJvbGQtXHUwMDNlcHJlY2lzZSBcdTAwMjZcdTAwMjYgZXhhY3QgPT0gTk9UX0VYQUNUKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTU1MSw3ICYjNDM7NTM3LDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0ICogTGlua2VkIHJlZ2lzdGVyIHRyYWNraW5nIHVzZXMgcm9sZC1cdTAwM2VpZCB0byBkZXRlY3QgcmVsYXRpb25zaGlwcy5cbiBcdFx0ICogV2hlbiByb2xkLVx1MDAzZWlkID09IDAsIHRoZSByZWdpc3RlciBpcyBpbmRlcGVuZGVudCBhbmQgYW55IGxpbmtpbmdcbiBcdFx0ICogaW4gcmN1ciBvbmx5IGFkZHMgY29uc3RyYWludHMuIFdoZW4gcm9sZC1cdTAwM2VpZCAhPSAwLCB3ZSBtdXN0IHZlcmlmeVxuLVx0XHQgKiBpZCBtYXBwaW5nIGFuZCAoZm9yIEJQRl9BRERfQ09OU1QpIG9mZnNldCBjb25zaXN0ZW5jeS5cbiYjNDM7XHRcdCAqIGlkIG1hcHBpbmcgYW5kIHRoYXQgdGhlIGxpbmsga2luZHMgYWdyZWUsIGFsb25nIHdpdGggYW55IGRlbHRhXG4mIzQzO1x0XHQgKiB0aGV5IGNhcnJ5LlxuIFx0XHQgKlxuIFx0XHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MztcbiBcdFx0ICogfCAgICAgICAgICAgICAgICAgIHwgcm9sZC1cdTAwM2VpZCAgfCByb2xkICYjNDM7IEFERF9DT05TVCB8IHJvbGQtXHUwMDNlaWQgPT0gMCB8XG5AQCAtNTg3LDE3ICYjNDM7NTc0LDE2IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gXHRcdCAqL1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBBRERfQ09OU1QgZmxhZ3MgbXVzdCBtYXRjaCBleGFjdGx5OiBCUEZfQUREX0NPTlNUMzIgYW5kXG4tXHRcdCAqIEJQRl9BRERfQ09OU1Q2NCBoYXZlIGRpZmZlcmVudCBsaW5raW5nIHNlbWFudGljcyBpblxuLVx0XHQgKiBzeW5jX2xpbmtlZF9yZWdzKCkgKGFsdTMyIHplcm8tZXh0ZW5kcywgYWx1NjQgZG9lcyBub3QpLFxuLVx0XHQgKiBzbyBwcnVuaW5nIGFjcm9zcyBkaWZmZXJlbnQgZmxhZyB0eXBlcyBpcyB1bnNhZmUuXG4mIzQzO1x0XHQgKiBUaGUgbGluayBraW5kcyBtdXN0IG1hdGNoOiBhbHUzMiBhbmQgYWx1NjQgYWRkcyBoYXZlIGRpZmZlcmVudFxuJiM0MztcdFx0ICogbGlua2luZyBzZW1hbnRpY3MgaW4gc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsXG4mIzQzO1x0XHQgKiBhbHU2NCBkb2VzIG5vdCksIHNvIHBydW5pbmcgYWNyb3NzIHRoZW0gaXMgdW5zYWZlLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHJvbGQtXHUwMDNlaWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAocm9sZC1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkgIT0gKHJjdXItXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKVxuJiM0MztcdFx0aWYgKHJvbGQtXHUwMDNlaWQgXHUwMDI2XHUwMDI2IChyb2xkLVx1MDAzZWFkZF9jb25zdCAhPSByY3VyLVx1MDAzZWFkZF9jb25zdCB8fFxuJiM0MztcdFx0XHRcdCByb2xkLVx1MDAzZXN1YnJlZyAhPSByY3VyLVx1MDAzZXN1YnJlZykpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHQvKiBCb3RoIGhhdmUgb2Zmc2V0IGxpbmthZ2U6IG9mZnNldHMgbXVzdCBtYXRjaCAqL1xuLVx0XHRpZiAoKHJvbGQtXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWRlbHRhICE9IHJjdXItXHUwMDNlZGVsdGEpXG4mIzQzO1x0XHRpZiAocm9sZC1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2IHJvbGQtXHUwMDNlZGVsdGEgIT0gcmN1ci1cdTAwM2VkZWx0YSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdGlmICghY2hlY2tfc2NhbGFyX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90bnVtLmMgYi9rZXJuZWwvYnBmL3RudW0uY1xuaW5kZXggZWM5YzMxMGNmNWQ3Zi4uZTFkYzU3YWZkM2QzMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdG51bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RudW0uY1xuQEAgLTIwMCw2ICYjNDM7MjAwLDIxIEBAIHN0cnVjdCB0bnVtIHRudW1fY2FzdChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKVxuIFx0cmV0dXJuIGE7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgdG51bSB0bnVtX3NleHQoc3RydWN0IHRudW0gYSwgdTggc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU4IHNoaWZ0ID0gNjQgLSBzaXplICogODtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTaGlmdGluZyB0aGUgZmllbGQgdXAgdG8gdGhlIHRvcCBhbmQgYmFjayBkb3duIGFyaXRobWV0aWNhbGx5XG4mIzQzO1x0ICogcmVwbGljYXRlcyBpdHMgc2lnbiBiaXQgdGhyb3VnaCB0aGUgaGlnaCBoYWxmLiBBcHBseWluZyB0aGF0IHRvIHRoZVxuJiM0MztcdCAqIG1hc2sgYXMgd2VsbCBjYXJyaWVzIG92ZXIgd2hldGhlciB0aGUgc2lnbiB3YXMga25vd246IGFuIHVua25vd25cbiYjNDM7XHQgKiBzaWduIGJpdCBsZWF2ZXMgZXZlcnkgaGlnaCBiaXQgdW5rbm93bi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhID0gdG51bV9jYXN0KGEsIHNpemUpO1xuJiM0MztcdHJldHVybiBUTlVNKChzNjQpKGEudmFsdWUgXHUwMDNjXHUwMDNjIHNoaWZ0KSBcdTAwM2VcdTAwM2Ugc2hpZnQsXG4mIzQzO1x0XHQgICAgKHM2NCkoYS5tYXNrIFx1MDAzY1x1MDAzYyBzaGlmdCkgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcbiYjNDM7fVxuJiM0MztcbiBib29sIHRudW1faXNfYWxpZ25lZChzdHJ1Y3QgdG51bSBhLCB1NjQgc2l6ZSlcbiB7XG4gXHRpZiAoIXNpemUpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA5ZTc5NzUwZTI0ODA4Li45ZTYzZWRkYjkwMjNiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xOTA3LDYgJiM0MzsxOTA3LDggQEAgc3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxuIFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCB2YXJfb2ZmKSAtIHNpemVvZihyZWctXHUwMDNldHlwZSkpO1xuIFx0cmVnLVx1MDAzZWlkID0gMDtcbiBcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSAwO1xuJiM0MztcdHJlZy1cdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfTk9ORTtcbiYjNDM7XHRyZWctXHUwMDNlc3VicmVnID0gU1VCUkVHX05PTkU7XG4gXHRfX19tYXJrX3JlZ19rbm93bihyZWcsIGltbSk7XG4gfVxuIFxuQEAgLTM0ODAsNiAmIzQzOzM0ODIsOCBAQCBzdGF0aWMgdm9pZCBjbGVhcl9zY2FsYXJfaWQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4gXHRyZWctXHUwMDNlaWQgPSAwO1xuIFx0cmVnLVx1MDAzZWRlbHRhID0gMDtcbiYjNDM7XHRyZWctXHUwMDNlYWRkX2NvbnN0ID0gQUREX0NPTlNUX05PTkU7XG4mIzQzO1x0cmVnLVx1MDAzZXN1YnJlZyA9IFNVQlJFR19OT05FO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbkBAIC0zNDkxLDggJiM0MzszNDk1LDEwIEBAIHN0YXRpYyB2b2lkIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogVGhlIHZlcmlmaWVyIGlzIHByb2Nlc3NpbmcgclggPSByWSBpbnNuIGFuZFxuIFx0ICogclktXHUwMDNlaWQgaGFzIHNwZWNpYWwgbGlua2VkIHJlZ2lzdGVyIGFscmVhZHkuXG4gXHQgKiBDbGVhcmVkIGl0LCBzaW5jZSBtdWx0aXBsZSByWCAmIzQzOz0gY29uc3QgYXJlIG5vdCBzdXBwb3J0ZWQuXG4mIzQzO1x0ICogQSAtXHUwMDNlc3VicmVnIGxpbmsgY2FuIGJlIHNoYXJlZDogaXQgZGVzY3JpYmVzIHNyYyYjMzk7cyBvd24gcmVsYXRpb25zaGlwXG4mIzQzO1x0ICogdG8gdGhlIHNldCwgbm90IGEgZGVsdGEgdG8gdW53aW5kLlxuIFx0ICovXG4tXHRpZiAoc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbiYjNDM7XHRpZiAoc3JjX3JlZy1cdTAwM2VhZGRfY29uc3QpXG4gXHRcdGNsZWFyX3NjYWxhcl9pZChzcmNfcmVnKTtcbiBcdC8qXG4gXHQgKiBFbnN1cmUgdGhhdCBzcmNfcmVnIGhhcyBhIHZhbGlkIElEIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG9cbkBAIC0zNTAzLDYgJiM0MzszNTA5LDMxIEBAIHN0YXRpYyB2b2lkIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzcmNfcmVnLVx1MDAzZWlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBjb2VyY2VfcmVnX3RvX3NpemUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWFzaztcbiYjNDM7XG4mIzQzO1x0LyogY2xlYXIgaGlnaCBiaXRzIGluIGJpdCByZXByZXNlbnRhdGlvbiAqL1xuJiM0MztcdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy1cdTAwM2V2YXJfb2ZmLCBzaXplKTtcbiYjNDM7XG4mIzQzO1x0LyogZml4IGFyaXRobWV0aWMgYm91bmRzICovXG4mIzQzO1x0bWFzayA9ICgodTY0KTEgXHUwMDNjXHUwMDNjIChzaXplICogOCkpIC0gMTtcbiYjNDM7XHRpZiAoKHJlZ191bWluKHJlZykgXHUwMDI2IH5tYXNrKSA9PSAocmVnX3VtYXgocmVnKSBcdTAwMjYgfm1hc2spKVxuJiM0MztcdFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIHJlZ191bWluKHJlZykgXHUwMDI2IG1hc2ssIHJlZ191bWF4KHJlZykgXHUwMDI2IG1hc2spO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCAwLCBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBzaXplIGlzIHNtYWxsZXIgdGhhbiAzMmJpdCByZWdpc3RlciB0aGUgMzJiaXQgcmVnaXN0ZXJcbiYjNDM7XHQgKiB2YWx1ZXMgYXJlIGFsc28gdHJ1bmNhdGVkIHNvIHdlIHB1c2ggNjQtYml0IGJvdW5kcyBpbnRvXG4mIzQzO1x0ICogMzItYml0IGJvdW5kcy4gQWJvdmUgd2VyZSB0cnVuY2F0ZWQgXHUwMDNjIDMyLWJpdHMgYWxyZWFkeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2l6ZSBcdTAwM2MgNClcbiYjNDM7XHRcdF9fbWFya19yZWczMl91bmJvdW5kZWQocmVnKTtcbiYjNDM7XG4mIzQzO1x0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc2F2ZV9yZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSxcbiBcdFx0XHRcdGludCBzcGksIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5AQCAtMzYzNCwxNSAmIzQzOzM2NjUsMzggQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkpO1xuIFx0aWYgKHJlZyBcdTAwMjZcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFx1MDAyNlx1MDAyNiByZWctXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXHUwMDI2XHUwMDI2IGVudi1cdTAwM2VicGZfY2FwYWJsZSkge1xuIFx0XHRib29sIHJlZ192YWx1ZV9maXRzO1xuJiM0MztcdFx0Ym9vbCBzdWJyZWdfbGluaztcbiBcbiBcdFx0cmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIG5hcnJvd2luZyBzcGlsbCBzdG9yZXMgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBzb3VyY2UsIHNvXG4mIzQzO1x0XHQgKiB0aGUgc2xvdCBpcyB0aGVpciB6ZXJvLWV4dGVuc2lvbjogcmVjb3JkIGEgbG93LTMyIGxpbmtcbiYjNDM7XHRcdCAqIHJhdGhlciB0aGFuIGRyb3BwaW5nIHRoZSByZWxhdGlvbiwgYXMgYSAzMi1iaXQgbW92IGRvZXMuXG4mIzQzO1x0XHQgKiBBIHN0b3JlIG5ldmVyIHNpZ24tZXh0ZW5kcywgc28gdGhlcmUgaXMgb25seSBvbmUga2luZCBoZXJlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdWJyZWdfbGluayA9ICFyZWdfdmFsdWVfZml0cyBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0O1xuJiM0MztcbiBcdFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xuLVx0XHRpZiAocmVnX3ZhbHVlX2ZpdHMpXG4mIzQzO1x0XHRpZiAocmVnX3ZhbHVlX2ZpdHMgfHwgc3VicmVnX2xpbmspXG4gXHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4tXHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbi1cdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcbiYjNDM7XHRcdGlmICghcmVnX3ZhbHVlX2ZpdHMpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogT25seSB0aGUgbG93IEBzaXplIGJ5dGVzIHJlYWNoIG1lbW9yeSwgc28gcmVjb3JkXG4mIzQzO1x0XHRcdCAqIHdoYXQgdGhlIHNsb3QgaG9sZHMgcmF0aGVyIHRoYW4gdGhlIHdpZGVyIHNvdXJjZVxuJiM0MztcdFx0XHQgKiBpdCBjYW1lIGZyb20uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemUoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgc2l6ZSk7XG4mIzQzO1x0XHRcdGlmIChzdWJyZWdfbGluayBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuc3VicmVnID0gU1VCUkVHX1pFWFQ7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIE5vdGhpbmcgdG8gcmVsYXRlOiBlaXRoZXIgdGhlIHNvdXJjZSBoYXMgbm9cbiYjNDM7XHRcdFx0XHQgKiBpZCB0byBzaGFyZSwgb3IgdGhlIHN0b3JlIGlzIG5hcnJvd2VyIHRoYW5cbiYjNDM7XHRcdFx0XHQgKiB0aGUgMzIgYml0cyBhIGxpbmsgY2FuIGRlc2NyaWJlLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAoIXJlZyBcdTAwMjZcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFx1MDAyNlx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbiBcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcdTAwMjZlbnYtXHUwMDNlZmFrZV9yZWdbMF07XG5AQCAtMzkyMSw3ICYjNDM7Mzk3NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGluXG4gc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgLyogZnVuYyB3aGVyZSBzcmMgcmVnaXN0ZXIgcG9pbnRzIHRvICovXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnJlZ19zdGF0ZSxcbi1cdFx0XHRcdCAgICAgIGludCBvZmYsIGludCBzaXplLCBpbnQgZHN0X3JlZ25vKVxuJiM0MztcdFx0XHRcdCAgICAgIGludCBvZmYsIGludCBzaXplLCBpbnQgZHN0X3JlZ25vLFxuJiM0MztcdFx0XHRcdCAgICAgIGJvb2wgaXNfbGRzeClcbiB7XG4gXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuIFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IHZzdGF0ZS1cdTAwM2VmcmFtZVt2c3RhdGUtXHUwMDNlY3VyZnJhbWVdO1xuQEAgLTM5NjIsMTggJiM0Mzs0MDE3LDM0IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2M9IHNwaWxsX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbi1cdFx0XHRcdGlmIChlbnYtXHUwMDNlYnBmX2NhcGFibGUgXHUwMDI2XHUwMDI2IHNpemUgPT0gNCBcdTAwMjZcdTAwMjYgc3BpbGxfc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ICAgIGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2M9IDMyKVxuJiM0MztcdFx0XHRcdGJvb2wgbmFycm93aW5nID0gZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzZSBzaXplICogQklUU19QRVJfQllURTtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIEEgbmFycm93aW5nIGZpbGwga2VlcHMgb25seSB0aGUgc2xvdCYjMzk7cyBsb3cgMzIgYml0cyxcbiYjNDM7XHRcdFx0XHQgKiBzbyByZWNvcmQgYSBsb3ctMzIgbGluayByYXRoZXIgdGhhbiBkcm9wcGluZyB0aGVcbiYjNDM7XHRcdFx0XHQgKiByZWxhdGlvbiwgYXMgYSAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSBkb2VzLlxuJiM0MztcdFx0XHRcdCAqIFdoaWNoIGtpbmQgZGVwZW5kcyBvbiBob3cgdGhlIGxvYWQgZmlsbHMgdGhlIGhpZ2hcbiYjNDM7XHRcdFx0XHQgKiBoYWxmLCBoZW5jZSBpc19sZHN4LlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGJvb2wgc3VicmVnX2xpbmsgPSBuYXJyb3dpbmcgXHUwMDI2XHUwMDI2IHNpemUgPT0gNDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKGVudi1cdTAwM2VicGZfY2FwYWJsZSBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAoc3VicmVnX2xpbmsgfHwgKHNwaWxsX3NpemUgPT0gNCBcdTAwMjZcdTAwMjYgIW5hcnJvd2luZykpKVxuIFx0XHRcdFx0XHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxuIFx0XHRcdFx0XHQgKiB3aXRoIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvbiBmaWxsLlxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0XHRcdHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSA9ICpyZWc7XG4gXG4tXHRcdFx0XHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgZmlsbC5cbi1cdFx0XHRcdCAqIGNvZXJjZV9yZWdfdG9fc2l6ZSB3aWxsIGFkanVzdCB0aGUgYm91bmRhcmllcy5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aWYgKGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2Ugc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG4mIzQzO1x0XHRcdFx0aWYgKHN1YnJlZ19saW5rIFx1MDAyNlx1MDAyNiByZWctXHUwMDNlaWQpXG4mIzQzO1x0XHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnID1cbiYjNDM7XHRcdFx0XHRcdFx0aXNfbGRzeCA/IFNVQlJFR19TRVhUIDogU1VCUkVHX1pFWFQ7XG4mIzQzO1x0XHRcdFx0ZWxzZSBpZiAobmFycm93aW5nKVxuJiM0MztcdFx0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHRcdCAqIE5vdGhpbmcgdG8gcmVsYXRlOiBlaXRoZXIgdGhlIHNsb3QgaGFzXG4mIzQzO1x0XHRcdFx0XHQgKiBubyBpZCB0byBzaGFyZSwgb3IgdGhlIGZpbGwgaXMgbmFycm93ZXJcbiYjNDM7XHRcdFx0XHRcdCAqIHRoYW4gdGhlIDMyIGJpdHMgYSBsaW5rIGNhbiBkZXNjcmliZS5cbiYjNDM7XHRcdFx0XHRcdCAqIGNvZXJjZV9yZWdfdG9fc2l6ZSBhZGp1c3RzIHRoZSBib3VuZHMuXG4mIzQzO1x0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGludCBzcGlsbF9jbnQgPSAwLCB6ZXJvX2NudCA9IDA7XG5AQCAtNDEzOCw3ICYjNDM7NDIwOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnXG4gICovXG4gc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgcHRyX2FyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSxcbi1cdFx0XHQgICAgaW50IGRzdF9yZWdubylcbiYjNDM7XHRcdFx0ICAgIGludCBkc3RfcmVnbm8sIGJvb2wgaXNfbGRzeClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xuIFx0aW50IGVycjtcbkBAIC00MTc3LDcgJiM0Mzs0MjQ4LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoIXZhcl9vZmYpIHtcbiBcdFx0b2ZmICYjNDM7PSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiBcdFx0ZXJyID0gY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxuLVx0XHRcdFx0XHRcdCBkc3RfcmVnbm8pO1xuJiM0MztcdFx0XHRcdFx0XHQgZHN0X3JlZ25vLCBpc19sZHN4KTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIFZhcmlhYmxlIG9mZnNldCBzdGFjayByZWFkcyBuZWVkIG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nXG4gXHRcdCAqIHRoYW4gZml4ZWQgb2Zmc2V0IG9uZXMuIE5vdGUgdGhhdCBkc3RfcmVnbm8gXHUwMDNlPSAwIG9uIHRoaXNcbkBAIC01NzAyLDMzICYjNDM7NTc3MywxOSBAQCBzdGF0aWMgdm9pZCB6ZXh0XzMyX3RvXzY0KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gXHRyZWdfc2V0X3VyYW5nZTY0KHJlZywgcmVnX3UzMl9taW4ocmVnKSwgcmVnX3UzMl9tYXgocmVnKSk7XG4gfVxuIFxuLS8qIHRydW5jYXRlIHJlZ2lzdGVyIHRvIHNtYWxsZXIgc2l6ZSAoaW4gYnl0ZXMpXG4tICogbXVzdCBiZSBjYWxsZWQgd2l0aCBzaXplIFx1MDAzYyBCUEZfUkVHX1NJWkVcbiYjNDM7LypcbiYjNDM7ICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0LiBTaWduZWQgYm91bmRzIGNhcnJ5IG92ZXIgZGlyZWN0bHkgYmVjYXVzZVxuJiM0MzsgKiBzaWduIGV4dGVuc2lvbiBpcyBtb25vdG9uaWMgb3ZlciB0aGUgc2lnbmVkIDMyLWJpdCByYW5nZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBjb2VyY2VfcmVnX3RvX3NpemUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpXG4mIzQzO3N0YXRpYyB2b2lkIHNleHRfMzJfdG9fNjQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4tXHR1NjQgbWFzaztcbi1cbi1cdC8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi9cbi1cdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy1cdTAwM2V2YXJfb2ZmLCBzaXplKTtcbi1cbi1cdC8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqL1xuLVx0bWFzayA9ICgodTY0KTEgXHUwMDNjXHUwMDNjIChzaXplICogOCkpIC0gMTtcbi1cdGlmICgocmVnX3VtaW4ocmVnKSBcdTAwMjYgfm1hc2spID09IChyZWdfdW1heChyZWcpIFx1MDAyNiB+bWFzaykpXG4tXHRcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCByZWdfdW1pbihyZWcpIFx1MDAyNiBtYXNrLCByZWdfdW1heChyZWcpIFx1MDAyNiBtYXNrKTtcbi1cdGVsc2Vcbi1cdFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spO1xuLVxuLVx0LyogSWYgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMzJiaXQgcmVnaXN0ZXIgdGhlIDMyYml0IHJlZ2lzdGVyXG4tXHQgKiB2YWx1ZXMgYXJlIGFsc28gdHJ1bmNhdGVkIHNvIHdlIHB1c2ggNjQtYml0IGJvdW5kcyBpbnRvXG4tXHQgKiAzMi1iaXQgYm91bmRzLiBBYm92ZSB3ZXJlIHRydW5jYXRlZCBcdTAwM2MgMzItYml0cyBhbHJlYWR5LlxuLVx0ICovXG4tXHRpZiAoc2l6ZSBcdTAwM2MgNClcbi1cdFx0X19tYXJrX3JlZzMyX3VuYm91bmRlZChyZWcpO1xuLVxuLVx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4mIzQzO1x0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3NleHQocmVnLVx1MDAzZXZhcl9vZmYsIDQpO1xuJiM0MztcdHJlZ19zZXRfc3JhbmdlNjQocmVnLCByZWdfczMyX21pbihyZWcpLCByZWdfczMyX21heChyZWcpKTtcbiB9XG4gXG4mIzQzOy8qIHRydW5jYXRlIHJlZ2lzdGVyIHRvIHNtYWxsZXIgc2l6ZSAoaW4gYnl0ZXMpXG4mIzQzOyAqIG11c3QgYmUgY2FsbGVkIHdpdGggc2l6ZSBcdTAwM2MgQlBGX1JFR19TSVpFXG4mIzQzOyAqL1xuIHN0YXRpYyB2b2lkIHNldF9zZXh0NjRfZGVmYXVsdF92YWwoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpXG4ge1xuIFx0aWYgKHNpemUgPT0gMSkge1xuQEAgLTU3NDgsNiAmIzQzOzU4MDUsNyBAQCBzdGF0aWMgdm9pZCBzZXRfc2V4dDY0X2RlZmF1bHRfdmFsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcbiB7XG4gXHRzNjQgaW5pdF9zNjRfbWF4LCBpbml0X3M2NF9taW4sIHM2NF9tYXgsIHM2NF9taW4sIHU2NF9jdmFsO1xuJiM0MztcdHM2NCBmaWVsZF9zbWluLCBmaWVsZF9zbWF4O1xuIFx0dTY0IHRvcF9zbWF4X3ZhbHVlLCB0b3Bfc21pbl92YWx1ZTtcbiBcdHU2NCBudW1fYml0cyA9IHNpemUgKiA4O1xuIFxuQEAgLTU3NjcsNiAmIzQzOzU4MjUsMjcgQEAgc3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplX3N4KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHNpemUgPT0gMSkge1xuJiM0MztcdFx0ZmllbGRfc21pbiA9IFM4X01JTjtcbiYjNDM7XHRcdGZpZWxkX3NtYXggPSBTOF9NQVg7XG4mIzQzO1x0fSBlbHNlIGlmIChzaXplID09IDIpIHtcbiYjNDM7XHRcdGZpZWxkX3NtaW4gPSBTMTZfTUlOO1xuJiM0MztcdFx0ZmllbGRfc21heCA9IFMxNl9NQVg7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIHNpemUgPT0gNCAqL1xuJiM0MztcdFx0ZmllbGRfc21pbiA9IFMzMl9NSU47XG4mIzQzO1x0XHRmaWVsZF9zbWF4ID0gUzMyX01BWDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJhbmdlIGFscmVhZHkgZml0cyB0aGUgZmllbGQsIHNvIChzTil2ID09IHYgZm9yIGV2ZXJ5IHZhbHVlIHRoZVxuJiM0MztcdCAqIHJlZ2lzdGVyIGNhbiBob2xkIGFuZCB0aGUgc2lnbiBleHRlbnNpb24gY2hhbmdlcyBub3RoaW5nLiBUaGUgdGVzdHNcbiYjNDM7XHQgKiBiZWxvdyBjYW5ub3QgcmVhY2ggdGhpcyBjYXNlIG9uY2Ugc21pbiBpcyBuZWdhdGl2ZTogYSBuZWdhdGl2ZSBzbWluXG4mIzQzO1x0ICogYW5kIGEgbm9uLW5lZ2F0aXZlIHNtYXggbmV2ZXIgc2hhcmUgdGhlaXIgaGlnaCBiaXRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWdfc21pbihyZWcpIFx1MDAzZT0gZmllbGRfc21pbiBcdTAwMjZcdTAwMjYgcmVnX3NtYXgocmVnKSBcdTAwM2M9IGZpZWxkX3NtYXgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0dG9wX3NtYXhfdmFsdWUgPSAoKHU2NClyZWdfc21heChyZWcpIFx1MDAzZVx1MDAzZSBudW1fYml0cykgXHUwMDNjXHUwMDNjIG51bV9iaXRzO1xuIFx0dG9wX3NtaW5fdmFsdWUgPSAoKHU2NClyZWdfc21pbihyZWcpIFx1MDAzZVx1MDAzZSBudW1fYml0cykgXHUwMDNjXHUwMDNjIG51bV9iaXRzO1xuIFxuQEAgLTY2MDEsNyAmIzQzOzY2ODAsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFxuIFx0XHRpZiAodCA9PSBCUEZfUkVBRClcbiBcdFx0XHRlcnIgPSBjaGVja19zdGFja19yZWFkKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLFxuLVx0XHRcdFx0XHQgICAgICAgdmFsdWVfcmVnbm8pO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIHZhbHVlX3JlZ25vLCBpc19sZHN4KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IGNoZWNrX3N0YWNrX3dyaXRlKGVudiwgcmVnLCBvZmYsIHNpemUsXG4gXHRcdFx0XHRcdFx0dmFsdWVfcmVnbm8sIGluc25faWR4KTtcbkBAIC02Njk4LDEzICYjNDM7Njc3NywxNSBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRcdCAqIFNpZ24tZXh0ZW5zaW9uIGNhbiBjaGFuZ2UgdGhlIHJlZ2lzdGVyIHZhbHVlIHJlbGF0aXZlXG4gXHRcdFx0ICogdG8gYSBzY2FsYXIgaXQgaXMgbGlua2VkIHdpdGggYnkgaWQgKGUuZy4gYSB6ZXJvLVxuIFx0XHRcdCAqIGV4dGVuZGluZyBmaWxsIG9mIHRoZSBzYW1lIHNwaWxsZWQgc3RhY2sgc2xvdCksIHRodXNcbi1cdFx0XHQgKiBkcm9wIHRoZSBzaGFyZWQgaWQgaW4gdGhhdCBjYXNlLlxuJiM0MztcdFx0XHQgKiBkcm9wIHRoZSBzaGFyZWQgaWQgaW4gdGhhdCBjYXNlLiBBIC1cdTAwM2VzdWJyZWcgbGluayBpc1xuJiM0MztcdFx0XHQgKiB0aGUgZXhjZXB0aW9uOiBpdCBhbHJlYWR5IHJlY29yZHMgdGhhdCBvbmx5IHRoZSBsb3dcbiYjNDM7XHRcdFx0ICogMzIgYml0cyBhcmUgc2hhcmVkLCBhbmQgaG93IHRoZSBoaWdoIGhhbGYgZm9sbG93cy5cbiBcdFx0XHQgKi9cbiBcdFx0XHRib29sIG5vX3NleHQgPSByZWdfdW1heChcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSkgXHUwMDNjXG4gXHRcdFx0XHRcdCgxVUxMIFx1MDAzY1x1MDAzYyAoc2l6ZSAqIEJJVFNfUEVSX0JZVEUgLSAxKSk7XG4gXG4gXHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBzaXplKTtcbi1cdFx0XHRpZiAoIW5vX3NleHQpXG4mIzQzO1x0XHRcdGlmICghbm9fc2V4dCBcdTAwMjZcdTAwMjYgIXJlZ3NbdmFsdWVfcmVnbm9dLnN1YnJlZylcbiBcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNjExNyw3ICYjNDM7MTYxOTgsNyBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0b2ZmID0gLW9mZjtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoZHN0X3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkge1xuJiM0MztcdFx0aWYgKGRzdF9yZWctXHUwMDNlYWRkX2NvbnN0KSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgcmVnaXN0ZXIgYWxyZWFkeSB3ZW50IHRocm91Z2ggclggJiM0Mzs9IHZhbFxuIFx0XHRcdCAqIHdlIGNhbm5vdCBhY2N1bXVsYXRlIGFub3RoZXIgdmFsIGludG8gcngtXHUwMDNlb2ZmLlxuQEAgLTE2MTI2LDkgJiM0MzsxNjIwNyw5IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKGFsdTMyKVxuLVx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VpZCB8PSBCUEZfQUREX0NPTlNUMzI7XG4mIzQzO1x0XHRcdFx0ZHN0X3JlZy1cdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfMzI7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VpZCB8PSBCUEZfQUREX0NPTlNUNjQ7XG4mIzQzO1x0XHRcdFx0ZHN0X3JlZy1cdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfNjQ7XG4gXHRcdFx0ZHN0X3JlZy1cdTAwM2VkZWx0YSA9IG9mZjtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbkBAIC0xNjIyMCwxMiAmIzQzOzE2MzAxLDIzIEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0XHRcdFx0fSBlbHNlIGlmIChzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XG4gXHRcdFx0XHRcdFx0Ym9vbCBub19zZXh0O1xuJiM0MztcdFx0XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdFx0XHQgKiBBIDMyLWJpdCBzaWduIGV4dGVuc2lvbiBrZWVwcyB0aGUgbG93IDMyXG4mIzQzO1x0XHRcdFx0XHRcdCAqIGJpdHMsIHNvIHJlY29yZCBhIGxvdy0zMiBsaW5rIGFzIHRoZVxuJiM0MztcdFx0XHRcdFx0XHQgKiB6ZXJvLWV4dGVuZGluZyBtb3YgZG9lcy4gQSBzZWxmLW1vdlxuJiM0MztcdFx0XHRcdFx0XHQgKiBxdWFsaWZpZXMgb25seSBpZiBzcmMgaXMgYWxyZWFkeSBsaW5rZWQuXG4mIzQzO1x0XHRcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFx0XHRib29sIHN1YnJlZ19saW5rID0gKGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKSA9PSA0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgKHNyY19yZWcgIT0gZHN0X3JlZyB8fFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIHNyY19yZWctXHUwMDNlaWQpO1xuIFxuIFx0XHRcdFx0XHRcdG5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSBcdTAwM2MgKDFVTEwgXHUwMDNjXHUwMDNjIChpbnNuLVx1MDAzZW9mZiAtIDEpKTtcbi1cdFx0XHRcdFx0XHRpZiAobm9fc2V4dClcbiYjNDM7XHRcdFx0XHRcdFx0aWYgKG5vX3NleHQgfHwgc3VicmVnX2xpbmspXG4gXHRcdFx0XHRcdFx0XHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcbiBcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuLVx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiYjNDM7XHRcdFx0XHRcdFx0aWYgKCFub19zZXh0IFx1MDAyNlx1MDAyNiBzdWJyZWdfbGluayBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbiYjNDM7XHRcdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZyA9IFNVQlJFR19TRVhUO1xuJiM0MztcdFx0XHRcdFx0XHRlbHNlIGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuIFx0XHRcdFx0XHR9IGVsc2Uge1xuQEAgLTE2MjQyLDE1ICYjNDM7MTYzMzQsMjIgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0fSBlbHNlIGlmIChzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XG4gXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZW9mZiA9PSAwKSB7XG4gXHRcdFx0XHRcdFx0Ym9vbCBpc19zcmNfcmVnX3UzMiA9IGdldF9yZWdfd2lkdGgoc3JjX3JlZykgXHUwMDNjPSAzMjtcbiYjNDM7XHRcdFx0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHRcdFx0ICogQSB3aWRlIHNyYyBzaGFyZXMgb25seSBpdHMgbG93IDMyIGJpdHMuIEFcbiYjNDM7XHRcdFx0XHRcdFx0ICogZnVsbCBsaW5rIHdvdWxkIGxldCBkc3QmIzM5O3MgWzAsIFUzMl9NQVhdXG4mIzQzO1x0XHRcdFx0XHRcdCAqIHByb3BhZ2F0ZSBvbnRvIHNyYyYjMzk7cyB1bmtub3duIGhpZ2ggYml0cywgc29cbiYjNDM7XHRcdFx0XHRcdFx0ICogcmVjb3JkIGEgbG93LTMyLW9ubHkgbGluayBpbnN0ZWFkLiBBXG4mIzQzO1x0XHRcdFx0XHRcdCAqIHNlbGYtbW92IGhhcyBub3RoaW5nIHRvIGxpbmsuXG4mIzQzO1x0XHRcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFx0XHRib29sIHN1YnJlZ19saW5rID0gIWlzX3NyY19yZWdfdTMyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgc3JjX3JlZyAhPSBkc3RfcmVnO1xuIFxuLVx0XHRcdFx0XHRcdGlmIChpc19zcmNfcmVnX3UzMilcbiYjNDM7XHRcdFx0XHRcdFx0aWYgKGlzX3NyY19yZWdfdTMyIHx8IHN1YnJlZ19saW5rKVxuIFx0XHRcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbi1cdFx0XHRcdFx0XHQvKiBNYWtlIHN1cmUgSUQgaXMgY2xlYXJlZCBpZiBzcmNfcmVnIGlzIG5vdCBpbiB1MzJcbi1cdFx0XHRcdFx0XHQgKiByYW5nZSBvdGhlcndpc2UgZHN0X3JlZyBtaW4vbWF4IGNvdWxkIGJlIGluY29ycmVjdGx5XG4tXHRcdFx0XHRcdFx0ICogcHJvcGFnYXRlZCBpbnRvIHNyY19yZWcgYnkgc3luY19saW5rZWRfcmVncygpXG4tXHRcdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdFx0aWYgKCFpc19zcmNfcmVnX3UzMilcbiYjNDM7XHRcdFx0XHRcdFx0aWYgKHN1YnJlZ19saW5rIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnID0gU1VCUkVHX1pFWFQ7XG4mIzQzO1x0XHRcdFx0XHRcdGVsc2UgaWYgKCFpc19zcmNfcmVnX3UzMilcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0XHQvKiBjYXNlOiBXMSA9IChzOCwgczE2KVcyICovXG5AQCAtMTcwNjcsNyAmIzQzOzE3MTY2LDcgQEAgc3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3RcbiB7XG4gXHRzdHJ1Y3QgbGlua2VkX3JlZyAqZTtcbiBcbi1cdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgKHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpICE9IGlkKVxuJiM0MztcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnLVx1MDAzZWlkICE9IGlkKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRlID0gbGlua2VkX3JlZ3NfcHVzaChyZWdfc2V0KTtcbkBAIC0xNzA5NSw3ICYjNDM7MTcxOTQsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR1MTYgbGl2ZV9yZWdzO1xuIFx0aW50IGksIGo7XG4gXG4tXHRpZCA9IGlkIFx1MDAyNiB+QlBGX0FERF9DT05TVDtcbiBcdGZvciAoaSA9IHZzdGF0ZS1cdTAwM2VjdXJmcmFtZTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIFx0XHRsaXZlX3JlZ3MgPSBhdXhbYnBmX2ZyYW1lX2luc25faWR4KHZzdGF0ZSwgaSldLmxpdmVfcmVnc19iZWZvcmU7XG4gXHRcdGZ1bmMgPSB2c3RhdGUtXHUwMDNlZnJhbWVbaV07XG5AQCAtMTcxMTQsNiAmIzQzOzE3MjEyLDQwIEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdH1cbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFNldCBAcmVnIHRvIHRoZSB6ZXJvLWV4dGVuc2lvbiBvZiBAa25vd25fcmVnJiMzOTtzIGxvdyAzMiBiaXRzOiBpdCBzaGFyZXMgdGhvc2VcbiYjNDM7ICogYml0cyBhbmQgaXRzIGhpZ2ggaGFsZiBpcyB6ZXJvLiBDb3B5IHRoZSBiYXNlIHRvIGtlZXAgaXRzIHByZWNpc2UgbG93LTMyXG4mIzQzOyAqIHRudW0sIHRoZW4gcmUtYXBwbHkgdGhlIHpleHRfMzJfdG9fNjQoKSB0aGUgMzItYml0IG1vdiBpdHNlbGYgdXNlZC5cbiYjNDM7ICogQHJlZy1cdTAwM2VpZCBhbmQgLVx1MDAzZWRlbHRhIGFscmVhZHkgZXF1YWwgQGtub3duX3JlZyYjMzk7czsgb25seSAtXHUwMDNlc3VicmVnIGlzIGl0cyBvd24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByZWNvbnN0cnVjdF96ZXh0MzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICprbm93bl9yZWcpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGJwZl9zdWJyZWcgc3VicmVnID0gcmVnLVx1MDAzZXN1YnJlZztcbiYjNDM7XG4mIzQzO1x0KnJlZyA9ICprbm93bl9yZWc7XG4mIzQzO1x0cmVnLVx1MDAzZXN1YnJlZyA9IHN1YnJlZztcbiYjNDM7XHR6ZXh0XzMyX3RvXzY0KHJlZyk7XG4mIzQzO1x0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBzaWduLWV4dGVuZGluZyBjb3VudGVycGFydC4gTm90ZSB0aGlzIGRyaXZlcyBvZmYgdGhlIGJhc2UmIzM5O3MgMzItYml0XG4mIzQzOyAqIHJhbmdlLCBub3QgY29lcmNlX3JlZ190b19zaXplX3N4KCk6IGFmdGVyIGEgMzItYml0IGNvbXBhcmUgaXQgaXMgdGhlIGxvd1xuJiM0MzsgKiBoYWxmIHRoYXQgaGFzIGJlZW4gbmFycm93ZWQsIGFuZCB0aGUgNjQtYml0IGJvdW5kcyBzdGlsbCBkZXNjcmliZSB0aGVcbiYjNDM7ICogYmFzZSYjMzk7cyBoaWdoIGJpdHMsIHdoaWNoIGFyZSBub3Qgb3Vycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJlY29uc3RydWN0X3NleHQzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZylcbiYjNDM7e1xuJiM0MztcdGVudW0gYnBmX3N1YnJlZyBzdWJyZWcgPSByZWctXHUwMDNlc3VicmVnO1xuJiM0MztcbiYjNDM7XHQqcmVnID0gKmtub3duX3JlZztcbiYjNDM7XHRyZWctXHUwMDNlc3VicmVnID0gc3VicmVnO1xuJiM0MztcdHNleHRfMzJfdG9fNjQocmVnKTtcbiYjNDM7XHRyZWdfYm91bmRzX3N5bmMocmVnKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBGb3IgYWxsIFIgaW4gbGlua2VkX3JlZ3MsIGNvcHkga25vd25fcmVnIHJhbmdlIGludG8gUlxuICAqIGlmIFItXHUwMDNlaWQgPT0ga25vd25fcmVnLVx1MDAzZWlkLlxuICAqL1xuQEAgLTE3MTMxLDE4ICYjNDM7MTcyNjMsNDQgQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3NcbiBcdFx0XHRcdDogXHUwMDI2dnN0YXRlLVx1MDAzZWZyYW1lW2UtXHUwMDNlZnJhbWVub10tXHUwMDNlc3RhY2tbZS1cdTAwM2VzcGldLnNwaWxsZWRfcHRyO1xuIFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZyA9PSBrbm93bl9yZWcpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICgocmVnLVx1MDAzZWlkIFx1MDAyNiB+QlBGX0FERF9DT05TVCkgIT0gKGtub3duX3JlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpKVxuJiM0MztcdFx0aWYgKHJlZy1cdTAwM2VpZCAhPSBrbm93bl9yZWctXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgLVx1MDAzZXN1YnJlZyByZWdpc3RlciBzaGFyZXMgb25seSB0aGUgYmFzZSYjMzk7cyBsb3cgMzIgYml0cywgc28gaXRcbiYjNDM7XHRcdCAqIGlzIHJlYnVpbHQgcmF0aGVyIHRoYW4gY29waWVkLiBOb3QgbW9kZWxsZWQgdG9nZXRoZXIgd2l0aCBhXG4mIzQzO1x0XHQgKiBkZWx0YSwgc28gc2tpcCBpZiBlaXRoZXIgc2lkZSBoYXMgb25lIChzb3VuZCwgbGVzcyBwcmVjaXNlKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJlZy1cdTAwM2VzdWJyZWcpIHtcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2VhZGRfY29uc3QgfHwga25vd25fcmVnLVx1MDAzZWFkZF9jb25zdClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2VzdWJyZWcgPT0gU1VCUkVHX1pFWFQpXG4mIzQzO1x0XHRcdFx0cmVjb25zdHJ1Y3RfemV4dDMyKHJlZywga25vd25fcmVnKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdHJlY29uc3RydWN0X3NleHQzMihyZWcsIGtub3duX3JlZyk7XG4mIzQzO1x0XHRcdGlmIChlLVx1MDAzZWlzX3JlZylcbiYjNDM7XHRcdFx0XHRtYXJrX3JlZ19zY3JhdGNoZWQoZW52LCBlLVx1MDAzZXJlZ25vKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBlLVx1MDAzZXNwaSk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSByZXZlcnNlOiBrbm93bl9yZWcga25vd3Mgb25seSBpdHMgbG93IDMyIGJpdHMsIHdoaWNoIHNheVxuJiM0MztcdFx0ICogbm90aGluZyBhYm91dCByZWcmIzM5O3MgaGlnaCBoYWxmLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoa25vd25fcmVnLVx1MDAzZXN1YnJlZylcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0LypcbiBcdFx0ICogU2tpcCBtaXhlZCAzMi82NC1iaXQgbGlua3M6IHRoZSBkZWx0YSByZWxhdGlvbnNoaXAgZG9lc24mIzM5O3RcbiBcdFx0ICogaG9sZCBhY3Jvc3MgZGlmZmVyZW50IEFMVSB3aWR0aHMuXG4gXHRcdCAqL1xuLVx0XHRpZiAoKChyZWctXHUwMDNlaWQgXiBrbm93bl9yZWctXHUwMDNlaWQpIFx1MDAyNiBCUEZfQUREX0NPTlNUKSA9PSBCUEZfQUREX0NPTlNUKVxuJiM0MztcdFx0aWYgKHJlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2IGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmVnLVx1MDAzZWFkZF9jb25zdCAhPSBrbm93bl9yZWctXHUwMDNlYWRkX2NvbnN0KVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoKCEocmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcdTAwMjZcdTAwMjYgIShrbm93bl9yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxuJiM0MztcdFx0aWYgKCghcmVnLVx1MDAzZWFkZF9jb25zdCBcdTAwMjZcdTAwMjYgIWtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QpIHx8XG4gXHRcdCAgICByZWctXHUwMDNlZGVsdGEgPT0ga25vd25fcmVnLVx1MDAzZWRlbHRhKSB7XG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4gXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGVudW0gYnBmX2FkZF9jb25zdCBzYXZlZF9hZGRfY29uc3QgPSByZWctXHUwMDNlYWRkX2NvbnN0O1xuIFx0XHRcdHMzMiBzYXZlZF9vZmYgPSByZWctXHUwMDNlZGVsdGE7XG4gXHRcdFx0dTMyIHNhdmVkX2lkID0gcmVnLVx1MDAzZWlkO1xuIFxuQEAgLTE3MTUyLDE2ICYjNDM7MTczMTAsMTggQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3NcbiBcdFx0XHQvKiByZWcgPSBrbm93bl9yZWc7IHJlZyAmIzQzOz0gZGVsdGEgKi9cbiBcdFx0XHQqcmVnID0gKmtub3duX3JlZztcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmIGFuZCBpZCwgb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpXG4tXHRcdFx0ICogd2lsbCBiZSBpbmNvcnJlY3QuXG4mIzQzO1x0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgYWRkX2NvbnN0LCBvdGhlcndpc2UgYW5vdGhlclxuJiM0MztcdFx0XHQgKiBzeW5jX2xpbmtlZF9yZWdzKCkgd2lsbCBiZSBpbmNvcnJlY3QuXG4gXHRcdFx0ICovXG4gXHRcdFx0cmVnLVx1MDAzZWRlbHRhID0gc2F2ZWRfb2ZmO1xuIFx0XHRcdHJlZy1cdTAwM2VpZCA9IHNhdmVkX2lkO1xuJiM0MztcdFx0XHRyZWctXHUwMDNlYWRkX2NvbnN0ID0gc2F2ZWRfYWRkX2NvbnN0O1xuIFxuIFx0XHRcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xuIFx0XHRcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbiBcdFx0XHRyZWctXHUwMDNldmFyX29mZiA9IHRudW1fYWRkKHJlZy1cdTAwM2V2YXJfb2ZmLCBmYWtlX3JlZy52YXJfb2ZmKTtcbi1cdFx0XHRpZiAoKHJlZy1cdTAwM2VpZCB8IGtub3duX3JlZy1cdTAwM2VpZCkgXHUwMDI2IEJQRl9BRERfQ09OU1QzMilcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2VhZGRfY29uc3QgPT0gQUREX0NPTlNUXzMyIHx8XG4mIzQzO1x0XHRcdCAgICBrbm93bl9yZWctXHUwMDNlYWRkX2NvbnN0ID09IEFERF9DT05TVF8zMilcbiBcdFx0XHRcdHpleHRfMzJfdG9fNjQocmVnKTtcbiBcdFx0XHRyZWdfYm91bmRzX3N5bmMocmVnKTtcbiBcdFx0fVxuQEAgLTE4MjU1LDcgJiM0MzsxODQxNSw3IEBAIHZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXJlZy1cdTAwM2VpZClcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWRzZXRfY250X2luYyhpZHNldCwgcmVnLVx1MDAzZWlkIFx1MDAyNiB+QlBGX0FERF9DT05TVCk7XG4mIzQzO1x0XHRpZHNldF9jbnRfaW5jKGlkc2V0LCByZWctXHUwMDNlaWQpO1xuIFx0fSkpO1xuIFxuIFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoc3QsIGZ1bmMsIHJlZywgKHtcbkBAIC0xODI2Myw3ICYjNDM7MTg0MjMsNyBAQCB2b2lkIGJwZl9jbGVhcl9zaW5ndWxhcl9pZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFyZWctXHUwMDNlaWQpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChpZHNldF9jbnRfZ2V0KGlkc2V0LCByZWctXHUwMDNlaWQgXHUwMDI2IH5CUEZfQUREX0NPTlNUKSA9PSAxKVxuJiM0MztcdFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cdTAwM2VpZCkgPT0gMSlcbiBcdFx0XHRjbGVhcl9zY2FsYXJfaWQocmVnKTtcbiBcdH0pKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuaW5kZXggZWI4OGQ5Y2U2YzM0OC4uNDViZmEwMmE1MzM4MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuQEAgLTI2OSw2ICYjNDM7MjY5LDE0IEBAXG4gI2RlZmluZSBDQU5fVVNFX0JQRl9TVFxuICNlbmRpZlxuIFxuJiM0MzsjaWYgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHxcdFxcXG4mIzQzOyAgICAgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHxcdFx0XFxcbiYjNDM7ICAgICBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtKSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkgfHxcdFxcXG4mIzQzOyAgICAgZGVmaW5lZChfX1RBUkdFVF9BUkNIX2xvb25nYXJjaCkpIFx1MDAyNlx1MDAyNlx0XHRcdFx0XFxcbiYjNDM7XHQoX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMTggfHwgZGVmaW5lZChfX0JQRl9GRUFUVVJFX01PVlNYKSlcbiYjNDM7I2RlZmluZSBDQU5fVVNFX01PVlNYXG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWYgX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMTggXHUwMDI2XHUwMDI2IGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHRcXFxuIFx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHxcdFx0XHRcdFxcXG4gXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHxcdFx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbmluZGV4IGRmOGQ1MzA5NjU3ZTEuLmI0ZWFkYmQ4ODM1N2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xuQEAgLTE1MTYsNyAmIzQzOzE1MTYsNyBAQCBfX25ha2VkIHZvaWQgc3ViMzJfZnVsbF9vdmVyZmxvdyh2b2lkKVxuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDszMi1iaXQgc3VidHJhY3Rpb24sIHBhcnRpYWwgb3ZlcmZsb3csIHJlc3VsdCBpbiB1bmJvdW5kZWQgdTMyIGJvdW5kc1wmIzM0OylcbiBfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbi1fX21zZyhcJiMzNDszOiAoMWMpIHczIC09IHcyIHt7Lip9fSBSMz1zY2FsYXIoc21pbj0wLHNtYXg9dW1heD0weGZmZmZmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmZmZmZikpXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDszOiAoMWMpIHczIC09IHcyIHt7Lip9fSBSMz1zY2FsYXIoaWQ9e3tbMC05XSYjNDM7fX0tMS5sbzMyLHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKVwmIzM0OylcbiBfX3JldHZhbCgwKVxuIF9fbmFrZWQgdm9pZCBzdWIzMl9wYXJ0aWFsX292ZXJmbG93KHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xpbmtlZF9zY2FsYXJzLmNcbmluZGV4IGQ1NzFmYmZjODZhM2EuLmNhNzQ3MWYwMjkzZGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xpbmtlZF9zY2FsYXJzLmNcbkBAIC0zNDksOCAmIzQzOzM0OSw4IEBAIGwwXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiB9XG4gXG4gLypcbi0gKiBUZXN0IHRoYXQgc3luY19saW5rZWRfcmVncygpIGNoZWNrcyByZWctXHUwMDNlaWQgKHRoZSBsaW5rZWQgdGFyZ2V0IHJlZ2lzdGVyKVxuLSAqIGZvciBCUEZfQUREX0NPTlNUMzIgcmF0aGVyIHRoYW4ga25vd25fcmVnLVx1MDAzZWlkICh0aGUgYnJhbmNoIHJlZ2lzdGVyKS5cbiYjNDM7ICogVGVzdCB0aGF0IHN5bmNfbGlua2VkX3JlZ3MoKSBjaGVja3MgdGhlIGxpbmtlZCB0YXJnZXQgcmVnaXN0ZXIgKHJlZykgZm9yXG4mIzQzOyAqIEFERF9DT05TVF8zMiByYXRoZXIgdGhhbiB0aGUgYnJhbmNoIHJlZ2lzdGVyIChrbm93bl9yZWcpLlxuICAqL1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19zdWNjZXNzXG5AQCAtMzYwLDcgJiM0MzszNjAsNyBAQCBfX25ha2VkIHZvaWQgc2NhbGFyc19hbHUzMl96ZXh0X2xpbmtlZF9yZWcodm9pZClcbiBcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4gXHR3NiA9IHcwO1x0XHQvKiByNiBpbiBbMCwgMHhGRkZGRkZGRl0gKi9cdFxcXG4gXHRyNyA9IHI2O1x0XHQvKiBsaW5rZWQ6IHNhbWUgaWQgYXMgcjYgKi9cdFxcXG4tXHR3NyAmIzQzOz0gMTtcdFx0LyogYWx1MzI6IHI3LmlkIHw9IEJQRl9BRERfQ09OU1QzMiAqLyBcXFxuJiM0MztcdHc3ICYjNDM7PSAxO1x0XHQvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi8gXFxcbiBcdHI4ID0gMHhGRkZGZmZmZiBsbDtcdFx0XHRcdFx0XFxcbiBcdGlmIHI2IFx1MDAzYyByOCBnb3RvIGwwXyU9O1x0XHRcdFx0XHRcXFxuIFx0LyogcjYgaW4gWzB4RkZGRkZGRkYsIDB4RkZGRkZGRkZdICovXHRcdFx0XFxcbkBAIC0zODEsNyAmIzQzOzM4MSw3IEBAIGwwXyU9Olx0XHRcdFx0XHRcdFx0XHRcXFxuIFxuIC8qXG4gICogVGVzdCB0aGF0IHN5bmNfbGlua2VkX3JlZ3MoKSBza2lwcyBwcm9wYWdhdGlvbiB3aGVuIG9uZSByZWdpc3RlciB1c2VkXG4tICogYWx1MzIgKEJQRl9BRERfQ09OU1QzMikgYW5kIHRoZSBvdGhlciB1c2VkIGFsdTY0IChCUEZfQUREX0NPTlNUNjQpLlxuJiM0MzsgKiBhbHUzMiAoQUREX0NPTlNUXzMyKSBhbmQgdGhlIG90aGVyIHVzZWQgYWx1NjQgKEFERF9DT05TVF82NCkuXG4gICogVGhlIGRlbHRhIHJlbGF0aW9uc2hpcCBkb2VzbiYjMzk7dCBob2xkIGFjcm9zcyBkaWZmZXJlbnQgQUxVIHdpZHRocy5cbiAgKi9cbiBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuQEAgLTM5MiwxMyAmIzQzOzM5MiwxMyBAQCBfX25ha2VkIHZvaWQgc2NhbGFyc19hbHUzMl9hbHU2NF9jcm9zc190eXBlKHZvaWQpXG4gXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuIFx0dzYgPSB3MDtcdFx0LyogcjYgaW4gWzAsIDB4RkZGRkZGRkZdICovXHRcXFxuIFx0cjcgPSByNjtcdFx0LyogbGlua2VkOiBzYW1lIGlkIGFzIHI2ICovXHRcXFxuLVx0dzcgJiM0Mzs9IDE7XHRcdC8qIGFsdTMyOiBCUEZfQUREX0NPTlNUMzIsIGRlbHRhID0gMSAqLyBcXFxuJiM0MztcdHc3ICYjNDM7PSAxO1x0XHQvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi8gXFxcbiBcdHI4ID0gcjY7XHRcdC8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqL1x0XFxcbi1cdHI4ICYjNDM7PSAyO1x0XHQvKiBhbHU2NDogQlBGX0FERF9DT05TVDY0LCBkZWx0YSA9IDIgKi8gXFxcbiYjNDM7XHRyOCAmIzQzOz0gMjtcdFx0LyogQUREX0NPTlNUXzY0IGRlbHRhICovIFxcXG4gXHRyOSA9IDB4RkZGRmZmZmYgbGw7XHRcdFx0XHRcdFxcXG4gXHRpZiByNyBcdTAwM2MgcjkgZ290byBsMF8lPTtcdFx0XHRcdFx0XFxcbiBcdC8qIHI3ID0gMHhGRkZGRkZGRiAqL1x0XHRcdFx0XHRcXFxuLVx0Lyogc3luYzoga25vd25fcmVnPXI3IChBRERfQ09OU1QzMiksIHJlZz1yOCAoQUREX0NPTlNUNjQpICovIFxcXG4mIzQzO1x0Lyogc3luYzoga25vd25fcmVnPXI3IChBRERfQ09OU1RfMzIpLCByZWc9cjggKEFERF9DT05TVF82NCkgKi8gXFxcbiBcdC8qIFdpdGhvdXQgZml4OiByOCA9IHpleHQoMHhGRkZGRkZGRiAmIzQzOyAxKSA9IDAgKi9cdFxcXG4gXHQvKiBXaXRoIGZpeDogcjggc3RheXMgWzIsIDB4MTAwMDAwMDAxXSAocjggXHUwMDNlPSAyKSAqL1x0XFxcbiBcdGlmIHI4IFx1MDAzZSAwIGdvdG8gbDFfJT07XHRcdFx0XHRcdFxcXG5AQCAtNDE2LDcgJiM0Mzs0MTYsNyBAQCBsMF8lPTpcdFx0XHRcdFx0XHRcdFx0XFxcbiAvKlxuICAqIFRlc3QgdGhhdCByZWdzYWZlKCkgcHJldmVudHMgcHJ1bmluZyB3aGVuIHR3byBwYXRocyByZWFjaCB0aGUgc2FtZSBwcm9ncmFtXG4gICogcG9pbnQgd2l0aCBsaW5rZWQgcmVnaXN0ZXJzIGNhcnJ5aW5nIGRpZmZlcmVudCBBRERfQ09OU1QgZmxhZ3MgKG9uZVxuLSAqIEJQRl9BRERfQ09OU1QzMiBmcm9tIGFsdTMyLCBhbm90aGVyIEJQRl9BRERfQ09OU1Q2NCBmcm9tIGFsdTY0KS5cbiYjNDM7ICogQUREX0NPTlNUXzMyIGZyb20gYWx1MzIsIGFub3RoZXIgQUREX0NPTlNUXzY0IGZyb20gYWx1NjQpLlxuICAqL1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2RpdiBieSB6ZXJvXCYjMzQ7KVxuQEAgLTQzMSwxMSAmIzQzOzQzMSwxMSBAQCBfX25ha2VkIHZvaWQgc2NhbGFyc19hbHUzMl9hbHU2NF9yZWdzYWZlX3BydW5pbmcodm9pZClcbiBcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4gXHRpZiByMCBcdTAwM2UgMCBnb3RvIGxfcGF0aGJfJT07XHRcdFx0XHRcXFxuIFx0LyogUGF0aCBBOiBhbHUzMiAqL1x0XHRcdFx0XHRcXFxuLVx0dzcgJiM0Mzs9IDE7XHRcdC8qIEJQRl9BRERfQ09OU1QzMiwgZGVsdGEgPSAxICovXFxcbiYjNDM7XHR3NyAmIzQzOz0gMTtcdFx0LyogQUREX0NPTlNUXzMyIGRlbHRhICovXFxcbiBcdGdvdG8gbF9tZXJnZV8lPTtcdFx0XHRcdFx0XFxcbiBsX3BhdGhiXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiBcdC8qIFBhdGggQjogYWx1NjQgKi9cdFx0XHRcdFx0XFxcbi1cdHI3ICYjNDM7PSAxO1x0XHQvKiBCUEZfQUREX0NPTlNUNjQsIGRlbHRhID0gMSAqL1xcXG4mIzQzO1x0cjcgJiM0Mzs9IDE7XHRcdC8qIEFERF9DT05TVF82NCBkZWx0YSAqL1xcXG4gbF9tZXJnZV8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gXHQvKiBNZXJnZSBwb2ludDogcmVnc2FmZSgpIGNvbXBhcmVzIHBhdGggQiBhZ2FpbnN0IGNhY2hlZCBwYXRoIEEuICovIFxcXG4gXHQvKiBOYXJyb3cgcjYgdG8gdHJpZ2dlciBzeW5jX2xpbmtlZF9yZWdzIGZvciByNyAqL1x0XFxcbkBAIC01OTMsNyAmIzQzOzU5Myw3IEBAIGxfZXhpdF8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gfVxuIFxuIC8qXG4tICogVGVzdCB0aGF0IHN0YWxlIGRlbHRhIGZyb20gYSBjbGVhcmVkIEJQRl9BRERfQ09OU1QgZG9lcyBub3QgbGVha1xuJiM0MzsgKiBUZXN0IHRoYXQgc3RhbGUgZGVsdGEgZnJvbSBhIGNsZWFyZWQgQUREX0NPTlNUXyogZG9lcyBub3QgbGVha1xuICAqIHRocm91Z2ggYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KCkgaW50byBhIG5ldyBpZCwgY2F1c2luZ1xuICAqIHN5bmNfbGlua2VkX3JlZ3MoKSB0byBjb21wdXRlIGFuIGluY29ycmVjdCBvZmZzZXQuXG4gICovXG5AQCAtNjA1LDEwICYjNDM7NjA1LDEwIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX3N0YWxlX2RlbHRhX2Zyb21fY2xlYXJlZF9pZCh2b2lkKVxuIFx0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuIFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiBcdHI2ID0gcjA7XHRcdC8qIHI2IHVua25vd24sIGdldHMgaWQgQSAqL1x0XFxcbi1cdHI2ICYjNDM7PSA1O1x0XHQvKiBpZCBBfEFERF9DT05TVCwgZGVsdGEgNSAqL1x0XFxcbiYjNDM7XHRyNiAmIzQzOz0gNTtcdFx0LyogaWQgQSwgQUREX0NPTlNUXzY0IGRlbHRhICovXHRcXFxuIFx0cjYgXj0gMDtcdFx0LyogaWQgY2xlYXJlZDsgZGVsdGEgc3RheXMgNSAqL1x0XFxcbiBcdHI4ID0gcjY7XHRcdC8qIG5ldyBpZCBCLCBzdGFsZSBkZWx0YSA1ICovXHRcXFxuLVx0cjggJiM0Mzs9IDM7XHRcdC8qIGlkIEJ8QUREX0NPTlNULCBkZWx0YSAzICovXHRcXFxuJiM0MztcdHI4ICYjNDM7PSAzO1x0XHQvKiBpZCBCLCBBRERfQ09OU1RfNjQgZGVsdGEgKi9cdFxcXG4gXHRyOSA9IHI2O1x0XHQvKiBpZCBCLCBzdGFsZSBkZWx0YSA1ICovXHRcXFxuIFx0aWYgcjkgIT0gMTAgZ290byBsX2V4aXRfJT07XHRcdFx0XHRcXFxuIFx0LyogQnVnOiByOCA9IDEwJiM0MzsoMy01KSA9IDg7IEZpeDogcjggPSAxMCYjNDM7KDMtMCkgPSAxMyAqL1x0XFxcbkBAIC02NDgsMTAgJiM0Mzs2NDgsMTAgQEAgbF9leGl0XyU9Olx0XHRcdFx0XHRcdFx0XFxcbiB9XG4gXG4gLypcbi0gKiBUZXN0IHRoYXQgcmVnc2FmZSgpIHZlcmlmaWVzIGJhc2VfaWQgY29uc2lzdGVuY3kgZm9yIEJQRl9BRERfQ09OU1RcbiYjNDM7ICogVGVzdCB0aGF0IHJlZ3NhZmUoKSB2ZXJpZmllcyBiYXNlX2lkIGNvbnNpc3RlbmN5IGZvciBBRERfQ09OU1RfKlxuICAqIGxpbmtlZCBzY2FsYXJzIGR1cmluZyBzdGF0ZSBwcnVuaW5nLlxuICAqXG4tICogVGhlIGZhbHNlIGJyYW5jaCAoZXhwbG9yZWQgZmlyc3QpIGxpbmtzIFIzIHRvIFIyIHZpYSBBRERfQ09OU1QuXG4mIzQzOyAqIFRoZSBmYWxzZSBicmFuY2ggKGV4cGxvcmVkIGZpcnN0KSBsaW5rcyBSMyB0byBSMiB2aWEgQUREX0NPTlNUXzY0LlxuICAqIFRoZSB0cnVlIGJyYW5jaCAocnVudGltZSBwYXRoKSBsaW5rcyBSMyB0byBSNCAodW5yZWxhdGVkIGJhc2VfaWQpLlxuICAqIEF0IHRoZSBtZXJnZSBwb2ludCwgcHJ1bmluZyBtdXN0IGZhaWwgYmVjYXVzZSB0aGUgbGlua2FnZSB0b3BvbG9neVxuICAqIGRpZmZlcnMuXG5AQCAtNjc1LDcgJiM0Mzs2NzUsNyBAQCBfX25ha2VkIHZvaWQgYWRkX2NvbnN0X2Jhc2VfaWRfcHJ1bmluZyh2b2lkKVxuIFx0cjIgPSByMDtcdFx0XHRcdFx0XHRcXFxuIFx0cjIgXHUwMDI2PSAweGZmO1x0XHQvKiBSMiA9IHNjYWxhcihpZD1BKSBbMCwyNTVdICovXHRcXFxuIFx0cjMgPSByMjtcdFx0LyogUjMgbGlua2VkIHRvIFIyIChpZD1BKSAqL1x0XFxcbi1cdHIzICYjNDM7PSAxMDtcdFx0LyogUjMgaWQ9QXxBRERfQ09OU1QsIGRlbHRhPTEwICovXFxcbiYjNDM7XHRyMyAmIzQzOz0gMTA7XHRcdC8qIEFERF9DT05TVF82NCBkZWx0YSAqL1xcXG4gXHRyNiA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuIFx0Z290byBsX21lcmdlXyU9O1x0XHRcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTY4Nyw3ICYjNDM7Njg3LDcgQEAgbF90cnVlXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiBcdHI0ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiBcdHI0IFx1MDAyNj0gMHhmZjtcdFx0LyogUjQgPSBzY2FsYXIgWzAsMjU1XSwgaWQ9MCAqL1x0XFxcbiBcdHIzID0gcjQ7XHRcdC8qIFIzIGxpbmtlZCB0byBSNCAobmV3IGlkPUMpICovXFxcbi1cdHIzICYjNDM7PSAxMDtcdFx0LyogUjMgaWQ9Q3xBRERfQ09OU1QsIGRlbHRhPTEwICovXFxcbiYjNDM7XHRyMyAmIzQzOz0gMTA7XHRcdC8qIEFERF9DT05TVF82NCBkZWx0YSAqL1xcXG4gXHRyNiA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcXFxuIGxfbWVyZ2VfJT06XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTcxMCw0ICYjNDM7NzEwLDYyMyBAQCBsX2V4aXRfJT06XHRcdFx0XHRcdFx0XHRcXFxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgMzItYml0IG1vdiBmcm9tIGEgd2lkZSBzb3VyY2Ugc2hhcmVzIG9ubHkgdGhlIGxvdyAzMiBiaXRzLiBOYXJyb3dpbmcgdGhlXG4mIzQzOyAqIHNvdXJjZSBtdXN0IHJlYWNoIHRoZSBkZXN0aW5hdGlvbiB0aHJvdWdoIHRoYXQgbGluay5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX25ha2VkIHZvaWQgemV4dF9tb3ZfbmFycm93X3NyYyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHc3ID0gdzY7XHRcdC8qIGZvcm1zIHRoZSBsaW5rICovXHRcdFxcXG4mIzQzO1x0aWYgdzYgIT0gMCBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcXFxuJiM0MztcdGlmIHc3ID09IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzOzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSByZXZlcnNlIGRvZXMgbm90IGhvbGQ6IG5hcnJvd2luZyB0aGUgbG93LTMyIGxpbmsgc2F5cyBub3RoaW5nIGFib3V0IHRoZVxuJiM0MzsgKiBiYXNlJiMzOTtzIGhpZ2ggYml0cywgc28gcjYgbXVzdCBzdGF5IHVua25vd24gYW5kIHRoZSBkaXYgc3RheXMgcmVhY2hhYmxlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2RpdiBieSB6ZXJvXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9uYXJyb3dfZHN0X2tlZXBzX2Jhc2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3NyA9IHc2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuJiM0MztcdGlmIHI3ICE9IDAgZ290byAxZjtcdC8qIG5hcnJvd3MgcjcsIG11c3Qgbm90IHByb3BhZ2F0ZSB0byByNiAqLyBcXFxuJiM0MztcdGlmIHI2ID09IDAgZ290byAxZjtcdC8qIHRha2VuIG9ubHkgaWYgcjYgd3JvbmdseSBuYXJyb3dlZCAqL1x0XFxcbiYjNDM7XHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzOzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgcHJvdmFibHktdTMyIHNvdXJjZSB0YWtlcyB0aGUgZnVsbC1lcXVhbGl0eSBwYXRoLCBub3QgdGhlIGxvdy0zMiBvbmU6XG4mIzQzOyAqIG5hcnJvd2luZyB0aGUgZGVzdGluYXRpb24gbXVzdCByZWFjaCB0aGUgc291cmNlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X3UzMl9zcmNfaXNfZnVsbF9saW5rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHR3NiA9IHcwO1x0XHQvKiByNiBwcm92YWJseSB1MzIgKi9cdFx0XFxcbiYjNDM7XHR3NyA9IHc2O1x0XHQvKiBmdWxsIGxpbmssIG5vdCBsb3ctMzIgKi9cdFxcXG4mIzQzO1x0aWYgcjcgXHUwMDNlIDEwIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI3LCBwcm9wYWdhdGVzIHRvIHI2ICovIFxcXG4mIzQzO1x0aWYgcjYgXHUwMDNlIDEwIGdvdG8gMmY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Z290byAxZjtcdFx0XHRcdFx0XHRcXFxuJiM0MzsyOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBzZWxmLW1vdiBoYXMgbm90aGluZyB0byBsaW5rLCBzbyBpdCBtdXN0IG5vdCBtaW50IGFuIGlkIGZvciByNi5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MzsvKiBhbiBpZCB3b3VsZCBwcmludCBhcyBSNj1zY2FsYXIoaWQ9Ti5sbzMyLHNtaW49Li4uICovXG4mIzQzO19fbXNnKFwmIzM0OyhiYykgdzYgPSB3NiB7ey4qfX0gUjY9c2NhbGFyKHNtaW49MCxcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiBePSAwO1x0XHQvKiBkcm9wIHRoZSBpZCAqL1x0XHRcXFxuJiM0MztcdHc2ID0gdzY7XHRcdC8qIGZvcm1zIG5vIGxpbmsgKi9cdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBsb3ctMzItbGlua2VkIHNvdXJjZSBrZWVwcyBpdHMgaWQgYW5kIGZsYWcgYWNyb3NzIGEgZnVydGhlciAzMi1iaXQgbW92LFxuJiM0MzsgKiBzbyBuYXJyb3dpbmcgdGhlIGJhc2Ugc3RpbGwgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBjaGFpbi5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX25ha2VkIHZvaWQgemV4dF9jaGFpbl9rZWVwc19saW5rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbiYjNDM7XHR3OCA9IHc3O1x0XHQvKiBsaW5rIHN1cnZpdmVzIHRoZSAybmQgbW92ICovXHRcXFxuJiM0MztcdGlmIHc2ICE9IDAgZ290byAxZjtcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjggKi8gXFxcbiYjNDM7XHRpZiB3OCA9PSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIGRlbHRhIG9uIGVpdGhlciBzaWRlIGlzIG5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGEgbG93LTMyIGxpbmssIHNvIG5vXG4mIzQzOyAqIHJhbmdlIHByb3BhZ2F0ZXM6IGhlcmUgdGhlIGJyYW5jaCByZWdpc3RlciBjYXJyaWVzIHRoZSBkZWx0YS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtkaXYgYnkgemVyb1wmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbiYjNDM7XHRyOCA9IHI2O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjggJiM0Mzs9IDM7XHRcdC8qIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnICovXHRcXFxuJiM0MztcdGlmIHI4ICE9IDMgZ290byAxZjtcdC8qIG11c3Qgbm90IHByb3BhZ2F0ZSB0byByNyAqL1x0XFxcbiYjNDM7XHRpZiB3NyA9PSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiAuLi4gYW5kIGhlcmUgdGhlIGxvdy0zMiBsaW5rIGlzIHRoZSBicmFuY2ggcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlclxuJiM0MzsgKiBjYXJyeWluZyB0aGUgZGVsdGEgbXVzdCBub3QgYmUgbmFycm93ZWQgZWl0aGVyLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2RpdiBieSB6ZXJvXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9ub19zeW5jX2Zyb21fc3VicmVnX2Jhc2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3NyA9IHc2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuJiM0MztcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyOCAmIzQzOz0gMztcdFx0LyogZGVsdGEgb24gcjggKi9cdFx0XFxcbiYjNDM7XHRpZiB3NyAhPSAwIGdvdG8gMWY7XHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi9cdFxcXG4mIzQzO1x0aWYgcjggPT0gMyBnb3RvIDFmO1x0LyogdGFrZW4gb25seSBpZiByOCB3cm9uZ2x5IG5hcnJvd2VkICovXHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVHdvIGxvdy0zMiBsaW5rcyBvbiB0aGUgc2FtZSBiYXNlIGRvIHByb3BhZ2F0ZSB0byBlYWNoIG90aGVyOiBib3RoIGFyZSB0aGVcbiYjNDM7ICogemVyby1leHRlbnNpb24gb2YgdGhlIHNhbWUgbG93IDMyIGJpdHMuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfc3luY19iZXR3ZWVuX3R3b19zdWJyZWdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzcgPSB3NjtcdFx0LyogdHdvIGxpbmtzIG9uIG9uZSBiYXNlICovXHRcXFxuJiM0MztcdHc4ID0gdzY7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiB3NyAhPSAwIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI3LCBwcm9wYWdhdGVzIHRvIHI4ICovIFxcXG4mIzQzO1x0aWYgdzggPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogT25seSBvbmUgb2YgdGhlIHR3byBwYXRocyBsaW5rcyByNyB0byByOCwgc28gdGhlIG5hcnJvd2luZyBvZiB3OCByZWFjaGVzIHI3XG4mIzQzOyAqIG9uIG9uZSBhbmQgbm90IHRoZSBvdGhlciBhbmQgdGhlIGRpdiBzdGF5cyByZWFjaGFibGUuIFRoaXMgY2hlY2tzIHRoZVxuJiM0MzsgKiBvdXRjb21lLCBub3QgdGhlIG1lY2hhbmlzbTogdGhlIHR3byBzdGF0ZXMgZGlmZmVyIGluIHRoZWlyIGlkcyBhbmQgY29udGVudHMsXG4mIzQzOyAqIHNvIHJlZ3NhZmUoKSBoYXMgbWFueSByZWFzb25zIHRvIGtlZXAgdGhlbSBhcGFydCBhbmQgZGlzYWJsaW5nIGFueSBzaW5nbGVcbiYjNDM7ICogb25lIG9mIGl0cyBjaGVja3MgZG9lcyBub3QgbWFrZSB0aGlzIGZhaWwuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGl2IGJ5IHplcm9cJiMzNDspXG4mIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X3VubGlua2VkX3BhdGhfc3RheXNfcmVhY2hhYmxlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgXHUwMDI2PSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjYgXHUwMDNlPSAxIGdvdG8gMmY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogZXhwbG9yZWQgZmlyc3Q6IHI3IGlzIGEgbG93LTMyIGxpbmsgb2YgcjggKi9cdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuJiM0MztcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3NyA9IHc4O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuJiM0MztcdGdvdG8gMWY7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MjpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiBydW50aW1lIHBhdGg6IHI3IHVucmVsYXRlZCB0byByOCAqL1x0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyOCA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHR3NyA9IHcwO1x0XHQvKiBubyBsaW5rIGhlcmUgKi9cdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiB3OCAhPSAwIGdvdG8gM2Y7XHQvKiBwcm9wYWdhdGVzIHRvIHI3IG9ubHkgaWYgbGlua2VkICovIFxcXG4mIzQzO1x0aWYgdzcgPT0gMCBnb3RvIDNmO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MzpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRm9ybWluZyB0aGUgbGluayBjYWxscyBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoKSwgd2hpY2ggZHJvcHMgYSBkZWx0YVxuJiM0MzsgKiBsaW5rIG9uIHRoZSBzb3VyY2UuIFRoYXQgaXMgd2hhdCB0aGUgbmFycm93LXNvdXJjZSBwYXRoIGhhcyBhbHdheXMgZG9uZSxcbiYjNDM7ICogc28gYSB3aWRlIHNvdXJjZSBiZWhhdmVzIHRoZSBzYW1lOiByNSBzdG9wcyB0cmFja2luZyByNi5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtkaXYgYnkgemVyb1wmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbW92X2JyZWFrc19hZGRfY29uc3Rfc3JjKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjUgPSByNjtcdFx0LyogcjUsIHI2IGxpbmtlZCAqL1x0XHRcXFxuJiM0MztcdHI1ICYjNDM7PSAzO1x0XHQvKiByNSA9IGJhc2UgJiM0MzsgMyAqL1x0XHRcXFxuJiM0MztcdHc3ID0gdzU7XHRcdC8qIGJyZWFrcyByNSYjMzk7cyBkZWx0YSBsaW5rICovXHRcXFxuJiM0MztcdGlmIHI2IFx1MDAzZSA5IGdvdG8gMWY7XHQvKiByNiBpbiBbMCwgOV0gKi9cdFx0XFxcbiYjNDM7XHRpZiByNSBcdTAwM2MgMTMgZ290byAxZjtcdC8qIHRha2VuIG9ubHkgaWYgcjUgc3RpbGwgbGlua2VkICovIFxcXG4mIzQzO1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIG5hcnJvd2luZyBmaWxsIGtlZXBzIG9ubHkgdGhlIHNsb3QmIzM5O3MgbG93IDMyIGJpdHMsIHNvIGEgbGF0ZXIgbmFycm93aW5nIG9mXG4mIzQzOyAqIHRoZSBzcGlsbGVkIHZhbHVlIG11c3Qgc3RpbGwgcmVhY2ggdGhlIGZpbGxlZCByZWdpc3Rlci4gU2FtZSByZWxhdGlvbiBhcyBhXG4mIzQzOyAqIDMyLWJpdCBtb3YgZnJvbSBhIHdpZGUgc291cmNlLCB3aXRoIHRoZSBzdGFjayBzbG90IGFzIHRoZSBiYXNlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2ZpbGxfbmFycm93X2Zyb21fd2lkZV9zcGlsbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI2IHw9IHIwO1x0XHQvKiByNiA9IGZ1bGwgNjQtYml0IHVua25vd24gKi9cdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByNjtcdC8qIHNsb3QgbGlua2VkIHRvIHI2ICovXHRcdFxcXG4mIzQzO1x0cjIgPSAqKHUzMiAqKShyMTAgLSA4KTtcdC8qIG5hcnJvd2luZyBmaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcXFxuJiM0MztcdGlmIHc2ICE9IDAgZ290byAxZjtcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjIgKi8gXFxcbiYjNDM7XHRpZiByMiA9PSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIGZ1bGwtd2lkdGggZmlsbCBvZiBhIHdpZGUgc2xvdCBpcyBhIHBsYWluIDY0LWJpdCBlcXVhbGl0eSwgbm90IGEgbG93LTMyXG4mIzQzOyAqIGxpbmssIHNvIGl0IG11c3Qga2VlcCBwcm9wYWdhdGluZyBleGFjdGx5IGFzIGJlZm9yZS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX25ha2VkIHZvaWQgemV4dF9maWxsX2Z1bGxfd2lkdGhfa2VlcHNfZnVsbF9saW5rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCBcdTAwM2NcdTAwM2M9IDMyO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgfD0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IHI2O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gKih1NjQgKikocjEwIC0gOCk7XHQvKiBubyBuYXJyb3dpbmcgKi9cdFx0XFxcbiYjNDM7XHRpZiByNiAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBzdWItd29yZCBmaWxsIGlzIGJlbG93IHRoZSBsb3ctMzIgbW9kZWwsIHNvIG5vIGxpbmsgaXMgZm9ybWVkIGFuZCB0aGVcbiYjNDM7ICogcmVsYXRpb24gaXMgZHJvcHBlZCBhcyBiZWZvcmUuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGl2IGJ5IHplcm9cJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2ZpbGxfYnl0ZV9mb3Jtc19ub19saW5rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCBcdTAwM2NcdTAwM2M9IDMyO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgfD0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IHI2O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gKih1OCAqKShyMTAgLSA4KTtcdC8qIDEtYnl0ZSBmaWxsOiBubyBsaW5rICovXHRcXFxuJiM0MztcdGlmIHc2ICE9IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiByMiA9PSAwIGdvdG8gMWY7XHQvKiBub3QgZGVkdWNlZCAqL1x0XHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBuYXJyb3dpbmcgc3BpbGwgc3RvcmVzIG9ubHkgdGhlIHNvdXJjZSYjMzk7cyBsb3cgMzIgYml0cywgc28gdGhlIHNsb3QgaXMgdGhlaXJcbiYjNDM7ICogemVyby1leHRlbnNpb24uIEEgbGF0ZXIgbmFycm93aW5nIG9mIHRoZSBzb3VyY2UgbXVzdCBzdGlsbCByZWFjaCBhbnl0aGluZ1xuJiM0MzsgKiBmaWxsZWQgYmFjayBvdXQgb2YgdGhhdCBzbG90LlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9rZWVwc19saW5rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCBcdTAwM2NcdTAwM2M9IDMyO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgfD0gcjA7XHRcdC8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqL1x0XFxcbiYjNDM7XHQqKHUzMiAqKShyMTAgLSA4KSA9IHI2O1x0LyogbmFycm93aW5nIHNwaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcXFxuJiM0MztcdHIyID0gKih1MzIgKikocjEwIC0gOCk7XHQvKiBmaWxsIGl0IGJhY2sgKi9cdFx0XFxcbiYjNDM7XHRpZiB3NiAhPSAwIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHIyICovIFxcXG4mIzQzO1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBzdWItd29yZCBzcGlsbCBpcyBiZWxvdyB0aGUgbG93LTMyIG1vZGVsLCBzbyBubyBsaW5rIGlzIGZvcm1lZCB0aGVyZS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtkaXYgYnkgemVyb1wmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbmFycm93aW5nX3NwaWxsX2J5dGVfbm9fbGluayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI2IHw9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1OCAqKShyMTAgLSA4KSA9IHI2O1x0LyogMS1ieXRlIHNwaWxsOiBubyBsaW5rICovXHRcXFxuJiM0MztcdHIyID0gKih1OCAqKShyMTAgLSA4KTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiB3NiAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0Lyogbm90IGRlZHVjZWQgKi9cdFx0XFxcbiYjNDM7XHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzOzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZmRlZiBDQU5fVVNFX01PVlNYXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIDMyLWJpdCBzaWduIGV4dGVuc2lvbiBrZWVwcyB0aGUgbG93IDMyIGJpdHMsIHNvIG5hcnJvd2luZyB0aGUgc291cmNlXG4mIzQzOyAqIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uIHRoZSBzYW1lIHdheSBpdCBkb2VzIGZvciBhIHplcm8gZXh0ZW5zaW9uLiBUaGUgaGlnaFxuJiM0MzsgKiBoYWxmIGZvbGxvd3MgdGhlIHNpZ24sIHNvIHRoZSB2YWx1ZSBzZWVuIGhlcmUgaXMgbmVnYXRpdmUuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7X19uYWtlZCB2b2lkIHNleHRfbW92X3dpZGVfc3JjKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjcgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuJiM0MztcdGlmIHc2ICE9IC0xIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHI3ICovIFxcXG4mIzQzO1x0aWYgcjcgPT0gLTEgZ290byAxZjtcdC8qIHNpZ24tZXh0ZW5kZWQsIG5vdCAweGZmZmZmZmZmICovIFxcXG4mIzQzO1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiByMCA9IChzMzIpcjAgaXMgaG93IGEgc2lnbi1leHRlbmRlZCBpbnQgcmV0dXJuIGxhbmRzLiBzcmMgYW5kIGRzdCBhcmUgdGhlXG4mIzQzOyAqIHNhbWUgcmVnaXN0ZXIsIGJ1dCByMCBpcyBhbHJlYWR5IGxpbmtlZCwgc28gdGhlcmUgaXMgYSBzZXQgZm9yIGl0IHRvIHN0YXlcbiYjNDM7ICogaW4gYW5kIHRoZSBuYXJyb3dpbmcgc3RpbGwgcHJvcGFnYXRlcy5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX25ha2VkIHZvaWQgc2V4dF9zZWxmX21vdl9rZWVwc19saW5rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjcgPSByNjtcdFx0LyogcjYsIHI3IGxpbmtlZCAqL1x0XHRcXFxuJiM0MztcdHI3ID0gKHMzMilyNztcdFx0Lyogc2VsZi1tb3YsIGtlZXBzIHRoZSBpZCAqL1x0XFxcbiYjNDM7XHRpZiB3NiAhPSAtMSBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcXFxuJiM0MztcdGlmIHI3ID09IC0xIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgc2FtZSBzZWxmLW1vdiBvbiBhbiB1bmxpbmtlZCByZWdpc3RlciBoYXMgbm90aGluZyB0byBsaW5rIHRvLCBzbyBpdFxuJiM0MzsgKiBtdXN0IG5vdCBtaW50IGFuIGlkIHRoYXQgd291bGQgbGVhdmUgcjYgZGVzY3JpYmluZyBpdHNlbGYuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7LyogYW4gaWQgd291bGQgcHJpbnQgYXMgUjY9c2NhbGFyKGlkPU4ubG8zMnN4LHNtaW49Li4uICovXG4mIzQzO19fbXNnKFwmIzM0OyhiZikgcjYgPSAoczMyKXI2IHt7Lip9fSBSNj1zY2FsYXIoc21pbj1cJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiBePSAwO1x0XHQvKiBkcm9wIHRoZSBpZCAqL1x0XHRcXFxuJiM0MztcdHI2ID0gKHMzMilyNjtcdFx0LyogZm9ybXMgbm8gbGluayAqL1x0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnaXN0ZXIgaXMgbm90IG1vZGVsbGVkIHRvZ2V0aGVyIHdpdGggYSBsb3ctMzJcbiYjNDM7ICogbGluaywgc28gdGhlIHByb3BhZ2F0aW9uIGlzIHNraXBwZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZCBhdC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtkaXYgYnkgemVyb1wmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHNleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjcgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuJiM0MztcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyOCAmIzQzOz0gMztcdFx0LyogZGVsdGEgb24gdGhlIGJyYW5jaCByZWcgKi9cdFxcXG4mIzQzO1x0aWYgcjggIT0gMyBnb3RvIDFmO1x0LyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI3ICovXHRcXFxuJiM0MztcdGlmIHI3ID09IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzOzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIC4uLiBhbmQgd2l0aCB0aGUgbGluayBhcyB0aGUgYnJhbmNoIHJlZ2lzdGVyIHRoZSBwcm9wYWdhdGlvbiBtdXN0IG5vdCBydW5cbiYjNDM7ICogYmFja3dhcmRzOiBhIC1cdTAwM2VzdWJyZWcgcmVnaXN0ZXIga25vd3Mgbm90aGluZyBhYm91dCB0aGUgYmFzZSYjMzk7cyBoaWdoIGhhbGYsIHNvXG4mIzQzOyAqIG5hcnJvd2luZyBpdCBtdXN0IGxlYXZlIHRoZSByZXN0IG9mIHRoZSBzZXQgYWxvbmUuIFdlcmUgdGhlIGd1YXJkIG1pc3NpbmcsXG4mIzQzOyAqIHI4IHdvdWxkIGJlIHJlYnVpbHQgYXMgcjcgJiM0MzsgMyA9PSAyLCB0cmVhdGluZyByNyBhcyBpZiBpdCB3ZXJlIHRoZSBiYXNlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2RpdiBieSB6ZXJvXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgc2V4dF9ub19zeW5jX2Zyb21fc3VicmVnX2Jhc2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNyA9IChzMzIpcjY7XHRcdC8qIGZvcm1zIHRoZSBsaW5rICovXHRcdFxcXG4mIzQzO1x0cjggPSByNjtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI4ICYjNDM7PSAzO1x0XHQvKiBkZWx0YSBvbiByOCAqL1x0XHRcXFxuJiM0MztcdGlmIHI3ICE9IC0xIGdvdG8gMWY7XHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi9cdFxcXG4mIzQzO1x0aWYgcjggPT0gMiBnb3RvIDFmO1x0LyogdGFrZW4gb25seSBpZiByOCB3cm9uZ2x5IG5hcnJvd2VkICovXHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHR3byBraW5kcyByZWJ1aWxkIHRoZSBoaWdoIGhhbGYgZGlmZmVyZW50bHk6IHRoZSBzYW1lIGxvdyBoYWxmIHJlYWNoZXNcbiYjNDM7ICogLTEgdGhyb3VnaCBhIHNpZ24gZXh0ZW5zaW9uIGFuZCAweGZmZmZmZmZmIHRocm91Z2ggYSB6ZXJvIGV4dGVuc2lvbiwgc28gb25seVxuJiM0MzsgKiBvbmUgcGF0aCBjbGVhcnMgdGhlIGd1YXJkLiBBcyBhYm92ZSB0aGlzIGNoZWNrcyB0aGUgb3V0Y29tZSAtLSB0aGUgZGlmZmVyaW5nXG4mIzQzOyAqIHJhbmdlcyBrZWVwIHRoZSBzdGF0ZXMgYXBhcnQgb24gdGhlaXIgb3duLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2RpdiBieSB6ZXJvXCYjMzQ7KVxuJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuJiM0MztfX25ha2VkIHZvaWQgc2V4dF9raW5kc19yZWFjaF9kaWZmZXJlbnRfdmFsdWVzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgXHUwMDI2PSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjYgXHUwMDNlPSAxIGdvdG8gMmY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogZXhwbG9yZWQgZmlyc3Q6IHI3IGlzIGEgc2lnbi1leHRlbmRlZCBsaW5rIG9mIHI4ICovXHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjggPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI3ID0gKHMzMilyODtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGdvdG8gMWY7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MjpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiBydW50aW1lIHBhdGg6IHI3IGlzIGEgemVyby1leHRlbmRlZCBsaW5rIG9mIHI4ICovXHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjggPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHc3ID0gdzg7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiB3OCAhPSAtMSBnb3RvIDNmO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHI3ID09IC0xIGdvdG8gM2Y7XHQvKiBvbmx5IHRoZSBzaWduLWV4dGVuZGVkIHBhdGggKi8gXFxcbiYjNDM7XHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzOzM6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBzaWduLWV4dGVuZGluZyBjb3VudGVycGFydDogdGhlIGZpbGxlZCByZWdpc3RlciBpcyB0aGUgc2lnbiBleHRlbnNpb24gb2ZcbiYjNDM7ICogdGhlIHNsb3QmIzM5O3MgbG93IDMyIGJpdHMsIHNvIGEgbmFycm93aW5nIG9mIHRob3NlIGJpdHMgYXJyaXZlcyBzaWduLWV4dGVuZGVkLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbmFrZWQgdm9pZCBzZXh0X2ZpbGxfbmFycm93X2Zyb21fd2lkZV9zcGlsbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI2IHw9IHIwO1x0XHQvKiByNiA9IGZ1bGwgNjQtYml0IHVua25vd24gKi9cdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByNjtcdC8qIHNsb3QgbGlua2VkIHRvIHI2ICovXHRcdFxcXG4mIzQzO1x0cjIgPSAqKHMzMiAqKShyMTAgLSA4KTtcdC8qIG5hcnJvd2luZyBzeCBmaWxsICovXHRcdFxcXG4mIzQzO1x0aWYgdzYgIT0gLTEgZ290byAxZjtcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjIgKi8gXFxcbiYjNDM7XHRpZiByMiA9PSAtMSBnb3RvIDFmO1x0Lyogc2lnbi1leHRlbmRlZCwgbm90IDB4ZmZmZmZmZmYgKi8gXFxcbiYjNDM7XHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzOzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBzYW1lLCBmb3IgdGhlIHR3byBmaWxsIGtpbmRzIG9mZiBvbmUgc2xvdC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtkaXYgYnkgemVyb1wmIzM0OylcbiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiYjNDM7X19uYWtlZCB2b2lkIGZpbGxfa2luZHNfcmVhY2hfZGlmZmVyZW50X3ZhbHVlcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI2IFx1MDAyNj0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjggPSByMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI4IHw9IHIwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiByNiBcdTAwM2U9IDEgZ290byAyZjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiA9ICooczMyICopKHIxMCAtIDgpO1x0Lyogc2lnbi1leHRlbmRpbmcgZmlsbCAqL1x0XFxcbiYjNDM7XHRnb3RvIDFmO1x0XHRcdFx0XHRcdFxcXG4mIzQzOzI6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSAqKHUzMiAqKShyMTAgLSA4KTtcdC8qIHplcm8tZXh0ZW5kaW5nIGZpbGwgKi9cdFxcXG4mIzQzOzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgdzggIT0gLTEgZ290byAzZjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiByMiA9PSAtMSBnb3RvIDNmO1x0Lyogb25seSB0aGUgc2lnbi1leHRlbmRpbmcgcGF0aCAqLyBcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MzpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIENBTl9VU0VfTU9WU1ggKi9cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jXG5pbmRleCAxOTViMjdhNTEyMjRmLi4zYTBlNjdlYmI5NjNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jXG5AQCAtMjAyLDYgJiM0MzsyMDIsNTcgQEAgbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgcmFuZ2UgdGhhdCBhbHJlYWR5IGZpdHMgdGhlIGZpZWxkIGlzIHVuY2hhbmdlZCBieSB0aGUgc2lnbiBleHRlbnNpb24uXG4mIzQzOyAqIEJvdGggb2YgdGhlc2Ugc3RyYWRkbGUgemVybywgc28gdGhlIGhpZ2ggYml0cyBvZiBzbWluIGFuZCBzbWF4IGRpZmZlciBhbmRcbiYjNDM7ICogdGhlIHRvcF9zKl92YWx1ZSB0ZXN0IGFsb25lIHdvdWxkIGZhbGwgYmFjayB0byB0aGUgZnVsbCBmaWVsZCByYW5nZS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7TU9WNjRTWCwgUzMyLCBuZWdhdGl2ZSByYW5nZSBpcyBwcmVzZXJ2ZWRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX3N1Y2Nlc3NfdW5wcml2IF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgdm9pZCBtb3Y2NHN4X3MzMl9uZWdhdGl2ZV9yYW5nZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MCBcdTAwMjY9IDB4ZmZmO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwIC09IDB4ZmZmO1x0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHIwIGlzIFstNDA5NSwgMF0sIGFscmVhZHkgYSB2YWxpZCBzMzIgKi9cdFxcXG4mIzQzO1x0cjAgPSAoczMyKXIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIwIHNcdTAwM2MgLTB4ZmZmIGdvdG8gbDBfJT07XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO2wwXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiB1bnJlYWNoYWJsZSB1bmxlc3MgdGhlIHJhbmdlIHdhcyB3aWRlbmVkICovXHRcXFxuJiM0MztcdHIwIC89IDA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtNT1Y2NFNYLCBTOCwgbmVnYXRpdmUgcmFuZ2UgaXMgcHJlc2VydmVkXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19zdWNjZXNzX3VucHJpdiBfX3JldHZhbCgwKVxuJiM0MztfX25ha2VkIHZvaWQgbW92NjRzeF9zOF9uZWdhdGl2ZV9yYW5nZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MCBcdTAwMjY9IDB4M2Y7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgLT0gMHgzZjtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByMCBpcyBbLTYzLCAwXSwgYWxyZWFkeSBhIHZhbGlkIHM4ICovXHRcXFxuJiM0MztcdHIwID0gKHM4KXIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIwIHNcdTAwM2MgLTB4M2YgZ290byBsMF8lPTtcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7bDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHVucmVhY2hhYmxlIHVubGVzcyB0aGUgcmFuZ2Ugd2FzIHdpZGVuZWQgKi9cdFxcXG4mIzQzO1x0cjAgLz0gMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDtNT1Y2NFNYLCBTMTYsIFIxMCBTaWduIEV4dGVuc2lvblwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgdHlwZT1zY2FsYXIgZXhwZWN0ZWQ9ZnAsIHBrdCwgcGt0X21ldGEsIG1hcF9rZXksIG1hcF92YWx1ZSwgbWVtLCByaW5nYnVmX21lbSwgYnVmLCB0cnVzdGVkX3B0cl9cJiMzNDspXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXG5pbmRleCBkYzFkOGMzMGZiMGVlLi4zNDIxNGVjOTI2NzA2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmVnX2VxdWFsLmNcbkBAIC0zMSwyMyAmIzQzOzMxLDIzIEBAIGwxXyU9Olx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuIH1cbiBcbiBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuLV9fZGVzY3JpcHRpb24oXCYjMzQ7Y2hlY2sgdyByZWcgbm90IGVxdWFsIGlmIHIgcmVnIHVwcGVyMzIgYml0cyBub3QgMFwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgIXJlYWRfb2tcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7Y2hlY2sgdyByZWcgZXF1YWwgaWYgciByZWcgdXBwZXIzMiBiaXRzIG5vdCAwXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiBfX25ha2VkIHZvaWQgc3VicmVnX2VxdWFsaXR5XzIodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuIFx0Y2FsbCAlW2JwZl9rdGltZV9nZXRfbnNdO1x0XHRcdFxcXG4gXHRyMiA9IHIwO1x0XHRcdFx0XHRcXFxuLVx0LyogVXBwZXIgNC1ieXRlcyBvZiByMiBtYXkgbm90IGJlIDAsIHRodXMgaW5zblx0XFxcbi1cdCAqIHczID0gdzIgc2hvdWxkIG5vdCBwcm9wYWdhdGUgcmVnIGlkLFx0YW5kXHRcXFxuLVx0ICogdzIgXHUwMDNjIDkgY29tcGFyaXNvbiBzaG91bGQgbm90IHByb3BhZ2F0ZVx0XFxcbi1cdCAqIHRoZSByYW5nZSBmb3IgcjMgZWl0aGVyLlx0XHRcdFxcXG4mIzQzO1x0LyogVXBwZXIgNC1ieXRlcyBvZiByMiBtYXkgbm90IGJlIDAsIHNvIHIzIGRvZXNcdFxcXG4mIzQzO1x0ICogbm90IGVxdWFsIHIyLiBJdCBkb2VzIHNoYXJlIHIyJiMzOTtzIGxvdyAzMiBiaXRzXHRcXFxuJiM0MztcdCAqIHRob3VnaCwgc28gdzIgXHUwMDNjIDkgc3RpbGwgYm91bmRzIHIzOiB0aGVcdFxcXG4mIzQzO1x0ICogemVyby1leHRlbmRpbmcgbW92IGxlYXZlcyBub3RoaW5nIGFib3ZlIHRoZW0uXFxcbiBcdCAqL1x0XHRcdFx0XHRcdFxcXG4gXHR3MyA9IHcyO1x0XHRcdFx0XHRcXFxuIFx0aWYgdzIgXHUwMDNjIDkgZ290byBsMF8lPTtcdFx0XHRcdFxcXG4gXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4gbDBfJT06XHRpZiByMyBcdTAwM2MgOSBnb3RvIGwxXyU9O1x0XHRcdFx0XFxcbi1cdC8qIHIxIHJlYWQgaXMgaWxsZWdhbCBhdCB0aGlzIHBvaW50ICovXHRcdFxcXG4mIzQzO1x0LyogdW5yZWFjaGFibGUsIHNvIHRoZSByMSByZWFkIGlzIG5ldmVyIG1hZGUgKi9cdFxcXG4gXHRyMCAtPSByMTtcdFx0XHRcdFx0XFxcbiBsMV8lPTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiBcJiMzNDtcdDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xuaW5kZXggMzlhMTc2NmRhZTNmMS4uMTA0Mjg1NmI5N2MyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmNcbkBAIC00NjQsOSAmIzQzOzQ2NCwxMyBAQCBsMF8lPTpcdHIxIFx1MDAzZVx1MDAzZT0gMTY7XHRcdFx0XHRcdFxcXG4gU0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiBfX2xvZ19sZXZlbCgyKVxuIF9fc3VjY2Vzc1xuLV9fbXNnKFwmIzM0O2ZwLTg9MG0/P3NjYWxhcigpXCYjMzQ7KVxuLV9fbXNnKFwmIzM0O2ZwLTE2PTAwbW0/P3NjYWxhcigpXCYjMzQ7KVxuLV9fbXNnKFwmIzM0O2ZwLTI0PTAwbW0/Pz9zY2FsYXIoKVwmIzM0OylcbiYjNDM7LypcbiYjNDM7ICogVGhlIHNsb3QgcmVjb3JkcyB3aGF0IHRoZSBzdG9yZSBwdXQgdGhlcmUsIG5vdCB0aGUgd2lkZXIgc291cmNlIGl0IGNhbWVcbiYjNDM7ICogZnJvbSwgc28gZWFjaCBzY2FsYXIgaXMgYm91bmRlZCBieSB0aGUgc2l6ZSBvZiBpdHMgc3BpbGwuXG4mIzQzOyAqL1xuJiM0MztfX21zZyhcJiMzNDtmcC04PTBtPz9zY2FsYXIoaWQ9e3tbMC05XSYjNDM7fX0ubG8zMixzbWluPTAsc21heD11bWF4PTB4ZmZmZmZmZmYsdmFyX29mZj0oMHgwOyAweGZmZmZmZmZmKSlcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O2ZwLTE2PTAwbW0/P3NjYWxhcihzbWluPXNtaW4zMj0wLHNtYXg9dW1heD1zbWF4MzI9dW1heDMyPTB4ZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZikpXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtmcC0yND0wMG1tPz8/c2NhbGFyKHNtaW49c21pbjMyPTAsc21heD11bWF4PXNtYXgzMj11bWF4MzI9MjU1LHZhcl9vZmY9KDB4MDsgMHhmZikpXCYjMzQ7KVxuIF9fbmFrZWQgdm9pZCBzcGlsbF9zdWJyZWdzX3ByZXNlcnZlX3N0YWNrX3plcm8odm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3N5bmNfbGlua2VkX3JlZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfYWx1X29wJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NvZXJjZV9yZWdfdG9fc2l6ZV9zeCYjMzQ7LAogICAgJiMzNDt0bnVtX3NleHQmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDticGZfY2xlYXJfc2luZ3VsYXJfaWRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciBzY2FsYXIgcmVnaXN0ZXIgbGlua2FnZSwgaW50cm9kdWNpbmcgc3VicmVnIHRyYWNraW5nIChTVUJSRUdfWkVYVCwgU1VCUkVHX1NFWFQpIGZvciAzMi1iaXQgbmFycm93aW5nIG9wZXJhdGlvbnMsIHNpZ24tZXh0ZW5zaW9uIHRudW0gaGVscGVycyAodG51bV9zZXh0KSwgc3RhY2sgc3BpbGwvZmlsbCBzY2FsYXIgdHJhY2tpbmcsIGFuZCB1cGRhdGluZyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgKHJlZ3NhZmUpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyBhbmQgYm91bmRzIHRyYWNraW5nIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2Zjk1YTEzZjU2ZDg2MmZkYjU3OGVmYTEwZDBjMjhmYzNmMTZmZWQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTg6MzA6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA5NzI3ZGY1YWY4M2FiLi45MjBjOTQ5MGVjYzgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTM1LDYgJiM0MzszNSwyNyBAQCBlbnVtIGJwZl9pdGVyX3N0YXRlIHsKIAlCUEZfSVRFUl9TVEFURV9EUkFJTkVELAogfTsKIAomIzQzOy8qCiYjNDM7ICogUmVjb3JkcyB0aGF0IGEgcmVnaXN0ZXIgaXMgKGJhc2UgJiM0MzsgLSZndDtkZWx0YSkgd2l0aGluIGl0cyAtJmd0O2lkIHNldDoKJiM0MzsgKiByMSAmIzQzOz0gMTA7ICAgcjEgZ2V0cyBBRERfQ09OU1RfNjQgZGVsdGEKJiM0MzsgKiB3MyAmIzQzOz0gMTA7ICAgcjMgZ2V0cyBBRERfQ09OU1RfMzIgZGVsdGEKJiM0MzsgKi8KJiM0MztlbnVtIGJwZl9hZGRfY29uc3QgewomIzQzOwlBRERfQ09OU1RfTk9ORSA9IDAsCiYjNDM7CUFERF9DT05TVF8zMiwJCS8qIGRlbHRhIHdhcyBhZGRlZCB3aXRoIGEgMzItYml0IEFMVSBvcCAqLwomIzQzOwlBRERfQ09OU1RfNjQsCQkvKiAuLi4gd2l0aCBhIDY0LWJpdCBBTFUgb3AgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVjb3JkcyB0aGF0IGEgcmVnaXN0ZXIgc2hhcmVzIG9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBiYXNlIG9mIGl0cwomIzQzOyAqIC0mZ3Q7aWQgc2V0LCBhbmQgaG93IGl0cyBoaWdoIGJpdHMgZm9sbG93IGZyb20gdGhlbS4KJiM0MzsgKi8KJiM0MztlbnVtIGJwZl9zdWJyZWcgewomIzQzOwlTVUJSRUdfTk9ORSA9IDAsCiYjNDM7CVNVQlJFR19aRVhULAkJLyogaGlnaCBiaXRzIGFyZSB6ZXJvICgzMi1iaXQgemVyby1leHRlbmRpbmcgbW92KSAqLwomIzQzOwlTVUJSRUdfU0VYVCwJCS8qIGhpZ2ggYml0cyByZXBlYXQgYml0IDMxICgzMi1iaXQgc2lnbi1leHRlbmRpbmcgbW92KSAqLwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7CiAJLyogT3JkZXJpbmcgb2YgZmllbGRzIG1hdHRlcnMuICBTZWUgc3RhdGVzX2VxdWFsKCkgKi8KIAllbnVtIGJwZl9yZWdfdHlwZSB0eXBlOwpAQCAtMTM2LDE2ICYjNDM7MTU3LDkgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUgewogCSAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuCiAJICovCiAJLyoKLQkgKiBVcHBlciBiaXQgb2YgSUQgaXMgdXNlZCB0byByZW1lbWJlciByZWxhdGlvbnNoaXAgYmV0d2VlbiAmIzM0O2xpbmtlZCYjMzQ7Ci0JICogcmVnaXN0ZXJzLiBFeGFtcGxlOgomIzQzOwkgKiBSZWdpc3RlcnMgc2hhcmluZyBhbiAtJmd0O2lkIGFyZSAmIzM0O2xpbmtlZCYjMzQ7OgogCSAqIHIxID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIxLSZndDtpZCA9PSByMi0mZ3Q7aWQgPT0gTgotCSAqIHIxICYjNDM7PSAxMDsgICByMS0mZ3Q7aWQgPT0gTiB8IEJQRl9BRERfQ09OU1QgYW5kIHIxLSZndDtkZWx0YSA9PSAxMAotCSAqIHIzID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIzLSZndDtpZCA9PSByMi0mZ3Q7aWQgPT0gTgotCSAqIHczICYjNDM7PSAxMDsgICByMy0mZ3Q7aWQgPT0gTiB8IEJQRl9BRERfQ09OU1QzMiBhbmQgcjMtJmd0O2RlbHRhID09IDEwCiAJICovCi0jZGVmaW5lIEJQRl9BRERfQ09OU1Q2NCAoMVUgJmx0OyZsdDsgMzEpCi0jZGVmaW5lIEJQRl9BRERfQ09OU1QzMiAoMVUgJmx0OyZsdDsgMzApCi0jZGVmaW5lIEJQRl9BRERfQ09OU1QgKEJQRl9BRERfQ09OU1Q2NCB8IEJQRl9BRERfQ09OU1QzMikKIAl1MzIgaWQ7CiAJLyoKIAkgKiBUcmFja3MgdGhlIHBhcmVudCBvYmplY3QgdGhpcyByZWdpc3RlciB3YXMgZGVyaXZlZCBmcm9tLgpAQCAtMTY0LDYgJiM0MzsxNzgsMTIgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUgewogCXUzMiBmcmFtZW5vOwogCS8qIGlmICghcHJlY2lzZSAmYW1wOyZhbXA7IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovCiAJYm9vbCBwcmVjaXNlOwomIzQzOwkvKgomIzQzOwkgKiBIb3cgdGhpcyByZWdpc3RlciByZWxhdGVzIHRvIHRoZSBvdGhlcnMgc2hhcmluZyBpdHMgLSZndDtpZC4KJiM0MzsJICogTm9uLXplcm8gb25seSBpZiAtJmd0O2lkIGlzLgomIzQzOwkgKi8KJiM0MzsJZW51bSBicGZfYWRkX2NvbnN0IGFkZF9jb25zdDoyOwomIzQzOwllbnVtIGJwZl9zdWJyZWcgc3VicmVnOjI7CiB9OwogCiBzdGF0aWMgaW5saW5lIHM2NCByZWdfc21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90bnVtLmggYi9pbmNsdWRlL2xpbnV4L3RudW0uaAppbmRleCBjYTJjZmVjOGRlMDhhLi44NjY4MDNkZTU4NDE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RudW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3RudW0uaApAQCAtNjMsNiAmIzQzOzYzLDkgQEAgc3RydWN0IHRudW0gdG51bV91bmlvbihzdHJ1Y3QgdG51bSB0MSwgc3RydWN0IHRudW0gdDIpOwogLyogUmV0dXJuIEBhIHdpdGggYWxsIGJ1dCB0aGUgbG93ZXN0IEBzaXplIGJ5dGVzIGNsZWFyZWQgKi8KIHN0cnVjdCB0bnVtIHRudW1fY2FzdChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKTsKIAomIzQzOy8qIFJldHVybiB0aGUgbG93ZXN0IEBzaXplIGJ5dGVzIG9mIEBhIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyAqLwomIzQzO3N0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKTsKJiM0MzsKIC8qIFN3YXAgdGhlIGJ5dGVzIG9mIGEgdG51bSAqLwogc3RydWN0IHRudW0gdG51bV9ic3dhcDE2KHN0cnVjdCB0bnVtIGEpOwogc3RydWN0IHRudW0gdG51bV9ic3dhcDMyKHN0cnVjdCB0bnVtIGEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9sb2cuYyBiL2tlcm5lbC9icGYvbG9nLmMKaW5kZXggZmIwMzJkZmRjMGRlZS4uYjY3YmJkNGQ1N2Y0NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9sb2cuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2xvZy5jCkBAIC02NTEsOSAmIzQzOzY1MSwxMyBAQCBzdGF0aWMgdm9pZCBwcmludF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJdmVyYm9zZShlbnYsICYjMzQ7JXMmIzM0OywgYnRmX3R5cGVfbmFtZShyZWctJmd0O2J0ZiwgcmVnLSZndDtidGZfaWQpKTsKIAl2ZXJib3NlKGVudiwgJiMzNDsoJiMzNDspOwogCWlmIChyZWctJmd0O2lkKQotCQl2ZXJib3NlX2EoJiMzNDtpZD0lZCYjMzQ7LCByZWctJmd0O2lkICZhbXA7IH5CUEZfQUREX0NPTlNUKTsKLQlpZiAocmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKQomIzQzOwkJdmVyYm9zZV9hKCYjMzQ7aWQ9JWQmIzM0OywgcmVnLSZndDtpZCk7CiYjNDM7CWlmIChyZWctJmd0O2FkZF9jb25zdCkKIAkJdmVyYm9zZShlbnYsICYjMzQ7JSYjNDM7ZCYjMzQ7LCByZWctJmd0O2RlbHRhKTsKJiM0MzsJaWYgKHJlZy0mZ3Q7c3VicmVnID09IFNVQlJFR19aRVhUKQomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7LmxvMzImIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKHJlZy0mZ3Q7c3VicmVnID09IFNVQlJFR19TRVhUKQomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7LmxvMzJzeCYjMzQ7KTsKIAlpZiAocmVnLSZndDtwYXJlbnRfaWQpCiAJCXZlcmJvc2VfYSgmIzM0O3BhcmVudF9pZD0lZCYjMzQ7LCByZWctJmd0O3BhcmVudF9pZCk7CiAJaWYgKHR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCmluZGV4IDY2ZmIxMWI2YzZhNzYuLjE2MThjNzcxMDVhYjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGF0ZXMuYwpAQCAtMzY5LDEzICYjNDM7MzY5LDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQogICogYW5kIHI3LmlkPTAgKGJvdGggaW5kZXBlbmRlbnQpLCB3aXRob3V0IHRlbXAgSURzIGJvdGggd291bGQgbWFwIG9sZF9pZD1YCiAgKiB0byBjdXJfaWQ9MCBhbmQgcGFzcy4gV2l0aCB0ZW1wIElEczogcjYgbWFwcyBYLSZndDt0ZW1wMSwgcjcgdHJpZXMgdG8gbWFwCiAgKiBYLSZndDt0ZW1wMiwgYnV0IFggaXMgYWxyZWFkeSBtYXBwZWQgdG8gdGVtcDEsIHNvIHRoZSBjaGVjayBmYWlscyBjb3JyZWN0bHkuCi0gKgotICogV2hlbiBvbGRfaWQgaGFzIEJQRl9BRERfQ09OU1Qgc2V0LCB0aGUgY29tcG91bmQgaWQgKGJhc2UgfCBmbGFnKSBhbmQgdGhlCi0gKiBiYXNlIGlkIChmbGFnIHN0cmlwcGVkKSBtdXN0IGJvdGggbWFwIGNvbnNpc3RlbnRseS4gRXhhbXBsZTogb2xkIGhhcwotICogcjIuaWQ9QSwgcjMuaWQ9QXxmbGFnIChyMyA9IHIyICYjNDM7IGRlbHRhKSwgY3VyIGhhcyByMi5pZD1CLCByMy5pZD1DfGZsYWcKLSAqIChyMyBkZXJpdmVkIGZyb20gdW5yZWxhdGVkIHI0KS4gV2l0aG91dCB0aGUgYmFzZSBjaGVjaywgaWRtYXAgZ2V0cyB0d28KLSAqIGluZGVwZW5kZW50IGVudHJpZXMgQS0mZ3Q7QiBhbmQgQXxmbGFnLSZndDtDfGZsYWcsIG1pc3NpbmcgdGhhdCBBLSZndDtDIGNvbmZsaWN0cwotICogd2l0aCBBLSZndDtCLiBUaGUgYmFzZSBJRCBjcm9zcy1jaGVjayBjYXRjaGVzIHRoaXMuCiAgKi8KIHN0YXRpYyBib29sIGNoZWNrX3NjYWxhcl9pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiB7CkBAIC0zODQsMTUgJiM0MzszNzcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQogCiAJY3VyX2lkID0gY3VyX2lkID8gY3VyX2lkIDogJiM0MzsmIzQzO2lkbWFwLSZndDt0bXBfaWRfZ2VuOwogCi0JaWYgKCFjaGVja19pZHMob2xkX2lkLCBjdXJfaWQsIGlkbWFwKSkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChvbGRfaWQgJmFtcDsgQlBGX0FERF9DT05TVCkgewotCQlvbGRfaWQgJmFtcDs9IH5CUEZfQUREX0NPTlNUOwotCQljdXJfaWQgJmFtcDs9IH5CUEZfQUREX0NPTlNUOwotCQlpZiAoIWNoZWNrX2lkcyhvbGRfaWQsIGN1cl9pZCwgaWRtYXApKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIGNoZWNrX2lkcyhvbGRfaWQsIGN1cl9pZCwgaWRtYXApOwogfQogCiBzdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKQEAgLTQ5MCw2ICYjNDM7NDc1LDggQEAgc3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIAkJICAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQogewogCXJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByb2xkLSZndDthZGRfY29uc3QgPT0gcmN1ci0mZ3Q7YWRkX2NvbnN0ICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHJvbGQtJmd0O3N1YnJlZyA9PSByY3VyLSZndDtzdWJyZWcgJmFtcDsmYW1wOwogCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7aWQsIHJjdXItJmd0O2lkLCBpZG1hcCkgJmFtcDsmYW1wOwogCSAgICAgICBjaGVja19pZHMocm9sZC0mZ3Q7cGFyZW50X2lkLCByY3VyLSZndDtwYXJlbnRfaWQsIGlkbWFwKTsKIH0KQEAgLTU0Miw4ICYjNDM7NTI5LDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIAkJCS8qIGV4cGxvcmVfYWx1X2xpbWl0cyBkaXNhYmxlcyB0bnVtX2luKCkgYW5kIHJhbmdlX3dpdGhpbigpCiAJCQkgKiBsb2dpYyBhbmQgcmVxdWlyZXMgZXZlcnl0aGluZyB0byBiZSBzdHJpY3QKIAkJCSAqLwotCQkJcmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwICZhbXA7JmFtcDsKLQkJCSAgICAgICBjaGVja19zY2FsYXJfaWRzKHJvbGQtJmd0O2lkLCByY3VyLSZndDtpZCwgaWRtYXApOwomIzQzOwkJCXJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTsKIAkJfQogCQlpZiAoIXJvbGQtJmd0O3ByZWNpc2UgJmFtcDsmYW1wOyBleGFjdCA9PSBOT1RfRVhBQ1QpCiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTU1MSw3ICYjNDM7NTM3LDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIAkJICogTGlua2VkIHJlZ2lzdGVyIHRyYWNraW5nIHVzZXMgcm9sZC0mZ3Q7aWQgdG8gZGV0ZWN0IHJlbGF0aW9uc2hpcHMuCiAJCSAqIFdoZW4gcm9sZC0mZ3Q7aWQgPT0gMCwgdGhlIHJlZ2lzdGVyIGlzIGluZGVwZW5kZW50IGFuZCBhbnkgbGlua2luZwogCQkgKiBpbiByY3VyIG9ubHkgYWRkcyBjb25zdHJhaW50cy4gV2hlbiByb2xkLSZndDtpZCAhPSAwLCB3ZSBtdXN0IHZlcmlmeQotCQkgKiBpZCBtYXBwaW5nIGFuZCAoZm9yIEJQRl9BRERfQ09OU1QpIG9mZnNldCBjb25zaXN0ZW5jeS4KJiM0MzsJCSAqIGlkIG1hcHBpbmcgYW5kIHRoYXQgdGhlIGxpbmsga2luZHMgYWdyZWUsIGFsb25nIHdpdGggYW55IGRlbHRhCiYjNDM7CQkgKiB0aGV5IGNhcnJ5LgogCQkgKgogCQkgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsKIAkJICogfCAgICAgICAgICAgICAgICAgIHwgcm9sZC0mZ3Q7aWQgIHwgcm9sZCAmIzQzOyBBRERfQ09OU1QgfCByb2xkLSZndDtpZCA9PSAwIHwKQEAgLTU4NywxNyAmIzQzOzU3NCwxNiBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLAogCQkgKi8KIAogCQkvKgotCQkgKiBBRERfQ09OU1QgZmxhZ3MgbXVzdCBtYXRjaCBleGFjdGx5OiBCUEZfQUREX0NPTlNUMzIgYW5kCi0JCSAqIEJQRl9BRERfQ09OU1Q2NCBoYXZlIGRpZmZlcmVudCBsaW5raW5nIHNlbWFudGljcyBpbgotCQkgKiBzeW5jX2xpbmtlZF9yZWdzKCkgKGFsdTMyIHplcm8tZXh0ZW5kcywgYWx1NjQgZG9lcyBub3QpLAotCQkgKiBzbyBwcnVuaW5nIGFjcm9zcyBkaWZmZXJlbnQgZmxhZyB0eXBlcyBpcyB1bnNhZmUuCiYjNDM7CQkgKiBUaGUgbGluayBraW5kcyBtdXN0IG1hdGNoOiBhbHUzMiBhbmQgYWx1NjQgYWRkcyBoYXZlIGRpZmZlcmVudAomIzQzOwkJICogbGlua2luZyBzZW1hbnRpY3MgaW4gc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsCiYjNDM7CQkgKiBhbHU2NCBkb2VzIG5vdCksIHNvIHBydW5pbmcgYWNyb3NzIHRoZW0gaXMgdW5zYWZlLgogCQkgKi8KLQkJaWYgKHJvbGQtJmd0O2lkICZhbXA7JmFtcDsKLQkJICAgIChyb2xkLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSAhPSAocmN1ci0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkpCiYjNDM7CQlpZiAocm9sZC0mZ3Q7aWQgJmFtcDsmYW1wOyAocm9sZC0mZ3Q7YWRkX2NvbnN0ICE9IHJjdXItJmd0O2FkZF9jb25zdCB8fAomIzQzOwkJCQkgcm9sZC0mZ3Q7c3VicmVnICE9IHJjdXItJmd0O3N1YnJlZykpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJLyogQm90aCBoYXZlIG9mZnNldCBsaW5rYWdlOiBvZmZzZXRzIG11c3QgbWF0Y2ggKi8KLQkJaWYgKChyb2xkLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSAmYW1wOyZhbXA7IHJvbGQtJmd0O2RlbHRhICE9IHJjdXItJmd0O2RlbHRhKQomIzQzOwkJaWYgKHJvbGQtJmd0O2FkZF9jb25zdCAmYW1wOyZhbXA7IHJvbGQtJmd0O2RlbHRhICE9IHJjdXItJmd0O2RlbHRhKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJCWlmICghY2hlY2tfc2NhbGFyX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdG51bS5jIGIva2VybmVsL2JwZi90bnVtLmMKaW5kZXggZWM5YzMxMGNmNWQ3Zi4uZTFkYzU3YWZkM2QzMyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90bnVtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90bnVtLmMKQEAgLTIwMCw2ICYjNDM7MjAwLDIxIEBAIHN0cnVjdCB0bnVtIHRudW1fY2FzdChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKQogCXJldHVybiBhOwogfQogCiYjNDM7c3RydWN0IHRudW0gdG51bV9zZXh0KHN0cnVjdCB0bnVtIGEsIHU4IHNpemUpCiYjNDM7ewomIzQzOwl1OCBzaGlmdCA9IDY0IC0gc2l6ZSAqIDg7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNoaWZ0aW5nIHRoZSBmaWVsZCB1cCB0byB0aGUgdG9wIGFuZCBiYWNrIGRvd24gYXJpdGhtZXRpY2FsbHkKJiM0MzsJICogcmVwbGljYXRlcyBpdHMgc2lnbiBiaXQgdGhyb3VnaCB0aGUgaGlnaCBoYWxmLiBBcHBseWluZyB0aGF0IHRvIHRoZQomIzQzOwkgKiBtYXNrIGFzIHdlbGwgY2FycmllcyBvdmVyIHdoZXRoZXIgdGhlIHNpZ24gd2FzIGtub3duOiBhbiB1bmtub3duCiYjNDM7CSAqIHNpZ24gYml0IGxlYXZlcyBldmVyeSBoaWdoIGJpdCB1bmtub3duLgomIzQzOwkgKi8KJiM0MzsJYSA9IHRudW1fY2FzdChhLCBzaXplKTsKJiM0MzsJcmV0dXJuIFROVU0oKHM2NCkoYS52YWx1ZSAmbHQ7Jmx0OyBzaGlmdCkgJmd0OyZndDsgc2hpZnQsCiYjNDM7CQkgICAgKHM2NCkoYS5tYXNrICZsdDsmbHQ7IHNoaWZ0KSAmZ3Q7Jmd0OyBzaGlmdCk7CiYjNDM7fQomIzQzOwogYm9vbCB0bnVtX2lzX2FsaWduZWQoc3RydWN0IHRudW0gYSwgdTY0IHNpemUpCiB7CiAJaWYgKCFzaXplKQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDllNzk3NTBlMjQ4MDguLjllNjNlZGRiOTAyM2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTE5MDcsNiAmIzQzOzE5MDcsOCBAQCBzdGF0aWMgdm9pZCBfX21hcmtfcmVnX2tub3duKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHU2NCBpbW0pCiAJICAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCB2YXJfb2ZmKSAtIHNpemVvZihyZWctJmd0O3R5cGUpKTsKIAlyZWctJmd0O2lkID0gMDsKIAlyZWctJmd0O3BhcmVudF9pZCA9IDA7CiYjNDM7CXJlZy0mZ3Q7YWRkX2NvbnN0ID0gQUREX0NPTlNUX05PTkU7CiYjNDM7CXJlZy0mZ3Q7c3VicmVnID0gU1VCUkVHX05PTkU7CiAJX19fbWFya19yZWdfa25vd24ocmVnLCBpbW0pOwogfQogCkBAIC0zNDgwLDYgJiM0MzszNDgyLDggQEAgc3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCiB7CiAJcmVnLSZndDtpZCA9IDA7CiAJcmVnLSZndDtkZWx0YSA9IDA7CiYjNDM7CXJlZy0mZ3Q7YWRkX2NvbnN0ID0gQUREX0NPTlNUX05PTkU7CiYjNDM7CXJlZy0mZ3Q7c3VicmVnID0gU1VCUkVHX05PTkU7CiB9CiAKIHN0YXRpYyB2b2lkIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LApAQCAtMzQ5MSw4ICYjNDM7MzQ5NSwxMCBAQCBzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKiBUaGUgdmVyaWZpZXIgaXMgcHJvY2Vzc2luZyByWCA9IHJZIGluc24gYW5kCiAJICogclktJmd0O2lkIGhhcyBzcGVjaWFsIGxpbmtlZCByZWdpc3RlciBhbHJlYWR5LgogCSAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICYjNDM7PSBjb25zdCBhcmUgbm90IHN1cHBvcnRlZC4KJiM0MzsJICogQSAtJmd0O3N1YnJlZyBsaW5rIGNhbiBiZSBzaGFyZWQ6IGl0IGRlc2NyaWJlcyBzcmMmIzM5O3Mgb3duIHJlbGF0aW9uc2hpcAomIzQzOwkgKiB0byB0aGUgc2V0LCBub3QgYSBkZWx0YSB0byB1bndpbmQuCiAJICovCi0JaWYgKHNyY19yZWctJmd0O2lkICZhbXA7IEJQRl9BRERfQ09OU1QpCiYjNDM7CWlmIChzcmNfcmVnLSZndDthZGRfY29uc3QpCiAJCWNsZWFyX3NjYWxhcl9pZChzcmNfcmVnKTsKIAkvKgogCSAqIEVuc3VyZSB0aGF0IHNyY19yZWcgaGFzIGEgdmFsaWQgSUQgdGhhdCB3aWxsIGJlIGNvcGllZCB0bwpAQCAtMzUwMyw2ICYjNDM7MzUwOSwzMSBAQCBzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJc3JjX3JlZy0mZ3Q7aWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBjb2VyY2VfcmVnX3RvX3NpemUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpCiYjNDM7ewomIzQzOwl1NjQgbWFzazsKJiM0MzsKJiM0MzsJLyogY2xlYXIgaGlnaCBiaXRzIGluIGJpdCByZXByZXNlbnRhdGlvbiAqLwomIzQzOwlyZWctJmd0O3Zhcl9vZmYgPSB0bnVtX2Nhc3QocmVnLSZndDt2YXJfb2ZmLCBzaXplKTsKJiM0MzsKJiM0MzsJLyogZml4IGFyaXRobWV0aWMgYm91bmRzICovCiYjNDM7CW1hc2sgPSAoKHU2NCkxICZsdDsmbHQ7IChzaXplICogOCkpIC0gMTsKJiM0MzsJaWYgKChyZWdfdW1pbihyZWcpICZhbXA7IH5tYXNrKSA9PSAocmVnX3VtYXgocmVnKSAmYW1wOyB+bWFzaykpCiYjNDM7CQlyZWdfc2V0X3VyYW5nZTY0KHJlZywgcmVnX3VtaW4ocmVnKSAmYW1wOyBtYXNrLCByZWdfdW1heChyZWcpICZhbXA7IG1hc2spOwomIzQzOwllbHNlCiYjNDM7CQlyZWdfc2V0X3VyYW5nZTY0KHJlZywgMCwgbWFzayk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHNpemUgaXMgc21hbGxlciB0aGFuIDMyYml0IHJlZ2lzdGVyIHRoZSAzMmJpdCByZWdpc3RlcgomIzQzOwkgKiB2YWx1ZXMgYXJlIGFsc28gdHJ1bmNhdGVkIHNvIHdlIHB1c2ggNjQtYml0IGJvdW5kcyBpbnRvCiYjNDM7CSAqIDMyLWJpdCBib3VuZHMuIEFib3ZlIHdlcmUgdHJ1bmNhdGVkICZsdDsgMzItYml0cyBhbHJlYWR5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNpemUgJmx0OyA0KQomIzQzOwkJX19tYXJrX3JlZzMyX3VuYm91bmRlZChyZWcpOwomIzQzOwomIzQzOwlyZWdfYm91bmRzX3N5bmMocmVnKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwKIAkJCQlpbnQgc3BpLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLApAQCAtMzYzNCwxNSAmIzQzOzM2NjUsMzggQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAltYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTsKIAlpZiAocmVnICZhbXA7JmFtcDsgIShvZmYgJSBCUEZfUkVHX1NJWkUpICZhbXA7JmFtcDsgcmVnLSZndDt0eXBlID09IFNDQUxBUl9WQUxVRSAmYW1wOyZhbXA7IGVudi0mZ3Q7YnBmX2NhcGFibGUpIHsKIAkJYm9vbCByZWdfdmFsdWVfZml0czsKJiM0MzsJCWJvb2wgc3VicmVnX2xpbms7CiAKIAkJcmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgJmx0Oz0gQklUU19QRVJfQllURSAqIHNpemU7CiYjNDM7CQkvKgomIzQzOwkJICogQSBuYXJyb3dpbmcgc3BpbGwgc3RvcmVzIHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgc291cmNlLCBzbwomIzQzOwkJICogdGhlIHNsb3QgaXMgdGhlaXIgemVyby1leHRlbnNpb246IHJlY29yZCBhIGxvdy0zMiBsaW5rCiYjNDM7CQkgKiByYXRoZXIgdGhhbiBkcm9wcGluZyB0aGUgcmVsYXRpb24sIGFzIGEgMzItYml0IG1vdiBkb2VzLgomIzQzOwkJICogQSBzdG9yZSBuZXZlciBzaWduLWV4dGVuZHMsIHNvIHRoZXJlIGlzIG9ubHkgb25lIGtpbmQgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJc3VicmVnX2xpbmsgPSAhcmVnX3ZhbHVlX2ZpdHMgJmFtcDsmYW1wOyBzaXplID09IDQ7CiYjNDM7CiAJCS8qIE1ha2Ugc3VyZSB0aGF0IHJlZyBoYWQgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbiBvbiBzcGlsbC4gKi8KLQkJaWYgKHJlZ192YWx1ZV9maXRzKQomIzQzOwkJaWYgKHJlZ192YWx1ZV9maXRzIHx8IHN1YnJlZ19saW5rKQogCQkJYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTsKIAkJc2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7Ci0JCS8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi8KLQkJaWYgKCFyZWdfdmFsdWVfZml0cykKLQkJCXN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDsKJiM0MzsJCWlmICghcmVnX3ZhbHVlX2ZpdHMpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIE9ubHkgdGhlIGxvdyBAc2l6ZSBieXRlcyByZWFjaCBtZW1vcnksIHNvIHJlY29yZAomIzQzOwkJCSAqIHdoYXQgdGhlIHNsb3QgaG9sZHMgcmF0aGVyIHRoYW4gdGhlIHdpZGVyIHNvdXJjZQomIzQzOwkJCSAqIGl0IGNhbWUgZnJvbS4KJiM0MzsJCQkgKi8KJiM0MzsJCQljb2VyY2VfcmVnX3RvX3NpemUoJmFtcDtzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgc2l6ZSk7CiYjNDM7CQkJaWYgKHN1YnJlZ19saW5rICZhbXA7JmFtcDsgcmVnLSZndDtpZCkKJiM0MzsJCQkJc3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHIuc3VicmVnID0gU1VCUkVHX1pFWFQ7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBOb3RoaW5nIHRvIHJlbGF0ZTogZWl0aGVyIHRoZSBzb3VyY2UgaGFzIG5vCiYjNDM7CQkJCSAqIGlkIHRvIHNoYXJlLCBvciB0aGUgc3RvcmUgaXMgbmFycm93ZXIgdGhhbgomIzQzOwkJCQkgKiB0aGUgMzIgYml0cyBhIGxpbmsgY2FuIGRlc2NyaWJlLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJY2xlYXJfc2NhbGFyX2lkKCZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHIpOwomIzQzOwkJfQogCX0gZWxzZSBpZiAoIXJlZyAmYW1wOyZhbXA7ICEob2ZmICUgQlBGX1JFR19TSVpFKSAmYW1wOyZhbXA7IGlzX2JwZl9zdF9tZW0oaW5zbikgJmFtcDsmYW1wOwogCQkgICBlbnYtJmd0O2JwZl9jYXBhYmxlKSB7CiAJCXN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gJmFtcDtlbnYtJmd0O2Zha2VfcmVnWzBdOwpAQCAtMzkyMSw3ICYjNDM7Mzk3NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGluCiBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgICAgLyogZnVuYyB3aGVyZSBzcmMgcmVnaXN0ZXIgcG9pbnRzIHRvICovCiAJCQkJICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpyZWdfc3RhdGUsCi0JCQkJICAgICAgaW50IG9mZiwgaW50IHNpemUsIGludCBkc3RfcmVnbm8pCiYjNDM7CQkJCSAgICAgIGludCBvZmYsIGludCBzaXplLCBpbnQgZHN0X3JlZ25vLAomIzQzOwkJCQkgICAgICBib29sIGlzX2xkc3gpCiB7CiAJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LSZndDtjdXJfc3RhdGU7CiAJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IHZzdGF0ZS0mZ3Q7ZnJhbWVbdnN0YXRlLSZndDtjdXJmcmFtZV07CkBAIC0zOTYyLDE4ICYjNDM7NDAxNywzNCBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAKIAkJCWlmIChzaXplICZsdDs9IHNwaWxsX3NpemUgJmFtcDsmYW1wOwogCQkJICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHsKLQkJCQlpZiAoZW52LSZndDticGZfY2FwYWJsZSAmYW1wOyZhbXA7IHNpemUgPT0gNCAmYW1wOyZhbXA7IHNwaWxsX3NpemUgPT0gNCAmYW1wOyZhbXA7Ci0JCQkJICAgIGdldF9yZWdfd2lkdGgocmVnKSAmbHQ7PSAzMikKJiM0MzsJCQkJYm9vbCBuYXJyb3dpbmcgPSBnZXRfcmVnX3dpZHRoKHJlZykgJmd0OyBzaXplICogQklUU19QRVJfQllURTsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogQSBuYXJyb3dpbmcgZmlsbCBrZWVwcyBvbmx5IHRoZSBzbG90JiMzOTtzIGxvdyAzMiBiaXRzLAomIzQzOwkJCQkgKiBzbyByZWNvcmQgYSBsb3ctMzIgbGluayByYXRoZXIgdGhhbiBkcm9wcGluZyB0aGUKJiM0MzsJCQkJICogcmVsYXRpb24sIGFzIGEgMzItYml0IG1vdiBmcm9tIGEgd2lkZSBzb3VyY2UgZG9lcy4KJiM0MzsJCQkJICogV2hpY2gga2luZCBkZXBlbmRzIG9uIGhvdyB0aGUgbG9hZCBmaWxscyB0aGUgaGlnaAomIzQzOwkJCQkgKiBoYWxmLCBoZW5jZSBpc19sZHN4LgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJYm9vbCBzdWJyZWdfbGluayA9IG5hcnJvd2luZyAmYW1wOyZhbXA7IHNpemUgPT0gNDsKJiM0MzsKJiM0MzsJCQkJaWYgKGVudi0mZ3Q7YnBmX2NhcGFibGUgJmFtcDsmYW1wOyBzaXplID09IDQgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgKHN1YnJlZ19saW5rIHx8IChzcGlsbF9zaXplID09IDQgJmFtcDsmYW1wOyAhbmFycm93aW5nKSkpCiAJCQkJCS8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uCiAJCQkJCSAqIHdpdGggdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9uIGZpbGwuCiAJCQkJCSAqLwogCQkJCQlhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCByZWcpOwogCQkJCXN0YXRlLSZndDtyZWdzW2RzdF9yZWdub10gPSAqcmVnOwogCi0JCQkJLyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuCi0JCQkJICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLgotCQkJCSAqLwotCQkJCWlmIChnZXRfcmVnX3dpZHRoKHJlZykgJmd0OyBzaXplICogQklUU19QRVJfQllURSkKJiM0MzsJCQkJaWYgKHN1YnJlZ19saW5rICZhbXA7JmFtcDsgcmVnLSZndDtpZCkKJiM0MzsJCQkJCXN0YXRlLSZndDtyZWdzW2RzdF9yZWdub10uc3VicmVnID0KJiM0MzsJCQkJCQlpc19sZHN4ID8gU1VCUkVHX1NFWFQgOiBTVUJSRUdfWkVYVDsKJiM0MzsJCQkJZWxzZSBpZiAobmFycm93aW5nKQomIzQzOwkJCQkJLyoKJiM0MzsJCQkJCSAqIE5vdGhpbmcgdG8gcmVsYXRlOiBlaXRoZXIgdGhlIHNsb3QgaGFzCiYjNDM7CQkJCQkgKiBubyBpZCB0byBzaGFyZSwgb3IgdGhlIGZpbGwgaXMgbmFycm93ZXIKJiM0MzsJCQkJCSAqIHRoYW4gdGhlIDMyIGJpdHMgYSBsaW5rIGNhbiBkZXNjcmliZS4KJiM0MzsJCQkJCSAqIGNvZXJjZV9yZWdfdG9fc2l6ZSBhZGp1c3RzIHRoZSBib3VuZHMuCiYjNDM7CQkJCQkgKi8KIAkJCQkJY2xlYXJfc2NhbGFyX2lkKCZhbXA7c3RhdGUtJmd0O3JlZ3NbZHN0X3JlZ25vXSk7CiAJCQl9IGVsc2UgewogCQkJCWludCBzcGlsbF9jbnQgPSAwLCB6ZXJvX2NudCA9IDA7CkBAIC00MTM4LDcgJiM0Mzs0MjA5LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWcKICAqLwogc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBwdHJfYXJnbm8sIGludCBvZmYsIGludCBzaXplLAotCQkJICAgIGludCBkc3RfcmVnbm8pCiYjNDM7CQkJICAgIGludCBkc3RfcmVnbm8sIGJvb2wgaXNfbGRzeCkKIHsKIAlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpOwogCWludCBlcnI7CkBAIC00MTc3LDcgJiM0Mzs0MjQ4LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKCF2YXJfb2ZmKSB7CiAJCW9mZiAmIzQzOz0gcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwogCQllcnIgPSBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihlbnYsIHN0YXRlLCBvZmYsIHNpemUsCi0JCQkJCQkgZHN0X3JlZ25vKTsKJiM0MzsJCQkJCQkgZHN0X3JlZ25vLCBpc19sZHN4KTsKIAl9IGVsc2UgewogCQkvKiBWYXJpYWJsZSBvZmZzZXQgc3RhY2sgcmVhZHMgbmVlZCBtb3JlIGNvbnNlcnZhdGl2ZSBoYW5kbGluZwogCQkgKiB0aGFuIGZpeGVkIG9mZnNldCBvbmVzLiBOb3RlIHRoYXQgZHN0X3JlZ25vICZndDs9IDAgb24gdGhpcwpAQCAtNTcwMiwzMyAmIzQzOzU3NzMsMTkgQEAgc3RhdGljIHZvaWQgemV4dF8zMl90b182NChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCXJlZ19zZXRfdXJhbmdlNjQocmVnLCByZWdfdTMyX21pbihyZWcpLCByZWdfdTMyX21heChyZWcpKTsKIH0KIAotLyogdHJ1bmNhdGUgcmVnaXN0ZXIgdG8gc21hbGxlciBzaXplIChpbiBieXRlcykKLSAqIG11c3QgYmUgY2FsbGVkIHdpdGggc2l6ZSAmbHQ7IEJQRl9SRUdfU0laRQomIzQzOy8qCiYjNDM7ICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0LiBTaWduZWQgYm91bmRzIGNhcnJ5IG92ZXIgZGlyZWN0bHkgYmVjYXVzZQomIzQzOyAqIHNpZ24gZXh0ZW5zaW9uIGlzIG1vbm90b25pYyBvdmVyIHRoZSBzaWduZWQgMzItYml0IHJhbmdlLgogICovCi1zdGF0aWMgdm9pZCBjb2VyY2VfcmVnX3RvX3NpemUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpCiYjNDM7c3RhdGljIHZvaWQgc2V4dF8zMl90b182NChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewotCXU2NCBtYXNrOwotCi0JLyogY2xlYXIgaGlnaCBiaXRzIGluIGJpdCByZXByZXNlbnRhdGlvbiAqLwotCXJlZy0mZ3Q7dmFyX29mZiA9IHRudW1fY2FzdChyZWctJmd0O3Zhcl9vZmYsIHNpemUpOwotCi0JLyogZml4IGFyaXRobWV0aWMgYm91bmRzICovCi0JbWFzayA9ICgodTY0KTEgJmx0OyZsdDsgKHNpemUgKiA4KSkgLSAxOwotCWlmICgocmVnX3VtaW4ocmVnKSAmYW1wOyB+bWFzaykgPT0gKHJlZ191bWF4KHJlZykgJmFtcDsgfm1hc2spKQotCQlyZWdfc2V0X3VyYW5nZTY0KHJlZywgcmVnX3VtaW4ocmVnKSAmYW1wOyBtYXNrLCByZWdfdW1heChyZWcpICZhbXA7IG1hc2spOwotCWVsc2UKLQkJcmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spOwotCi0JLyogSWYgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMzJiaXQgcmVnaXN0ZXIgdGhlIDMyYml0IHJlZ2lzdGVyCi0JICogdmFsdWVzIGFyZSBhbHNvIHRydW5jYXRlZCBzbyB3ZSBwdXNoIDY0LWJpdCBib3VuZHMgaW50bwotCSAqIDMyLWJpdCBib3VuZHMuIEFib3ZlIHdlcmUgdHJ1bmNhdGVkICZsdDsgMzItYml0cyBhbHJlYWR5LgotCSAqLwotCWlmIChzaXplICZsdDsgNCkKLQkJX19tYXJrX3JlZzMyX3VuYm91bmRlZChyZWcpOwotCi0JcmVnX2JvdW5kc19zeW5jKHJlZyk7CiYjNDM7CXJlZy0mZ3Q7dmFyX29mZiA9IHRudW1fc2V4dChyZWctJmd0O3Zhcl9vZmYsIDQpOwomIzQzOwlyZWdfc2V0X3NyYW5nZTY0KHJlZywgcmVnX3MzMl9taW4ocmVnKSwgcmVnX3MzMl9tYXgocmVnKSk7CiB9CiAKJiM0MzsvKiB0cnVuY2F0ZSByZWdpc3RlciB0byBzbWFsbGVyIHNpemUgKGluIGJ5dGVzKQomIzQzOyAqIG11c3QgYmUgY2FsbGVkIHdpdGggc2l6ZSAmbHQ7IEJQRl9SRUdfU0laRQomIzQzOyAqLwogc3RhdGljIHZvaWQgc2V0X3NleHQ2NF9kZWZhdWx0X3ZhbChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSkKIHsKIAlpZiAoc2l6ZSA9PSAxKSB7CkBAIC01NzQ4LDYgJiM0Mzs1ODA1LDcgQEAgc3RhdGljIHZvaWQgc2V0X3NleHQ2NF9kZWZhdWx0X3ZhbChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSkKIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSkKIHsKIAlzNjQgaW5pdF9zNjRfbWF4LCBpbml0X3M2NF9taW4sIHM2NF9tYXgsIHM2NF9taW4sIHU2NF9jdmFsOwomIzQzOwlzNjQgZmllbGRfc21pbiwgZmllbGRfc21heDsKIAl1NjQgdG9wX3NtYXhfdmFsdWUsIHRvcF9zbWluX3ZhbHVlOwogCXU2NCBudW1fYml0cyA9IHNpemUgKiA4OwogCkBAIC01NzY3LDYgJiM0Mzs1ODI1LDI3IEBAIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSkKIAkJcmV0dXJuOwogCX0KIAomIzQzOwlpZiAoc2l6ZSA9PSAxKSB7CiYjNDM7CQlmaWVsZF9zbWluID0gUzhfTUlOOwomIzQzOwkJZmllbGRfc21heCA9IFM4X01BWDsKJiM0MzsJfSBlbHNlIGlmIChzaXplID09IDIpIHsKJiM0MzsJCWZpZWxkX3NtaW4gPSBTMTZfTUlOOwomIzQzOwkJZmllbGRfc21heCA9IFMxNl9NQVg7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBzaXplID09IDQgKi8KJiM0MzsJCWZpZWxkX3NtaW4gPSBTMzJfTUlOOwomIzQzOwkJZmllbGRfc21heCA9IFMzMl9NQVg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHJhbmdlIGFscmVhZHkgZml0cyB0aGUgZmllbGQsIHNvIChzTil2ID09IHYgZm9yIGV2ZXJ5IHZhbHVlIHRoZQomIzQzOwkgKiByZWdpc3RlciBjYW4gaG9sZCBhbmQgdGhlIHNpZ24gZXh0ZW5zaW9uIGNoYW5nZXMgbm90aGluZy4gVGhlIHRlc3RzCiYjNDM7CSAqIGJlbG93IGNhbm5vdCByZWFjaCB0aGlzIGNhc2Ugb25jZSBzbWluIGlzIG5lZ2F0aXZlOiBhIG5lZ2F0aXZlIHNtaW4KJiM0MzsJICogYW5kIGEgbm9uLW5lZ2F0aXZlIHNtYXggbmV2ZXIgc2hhcmUgdGhlaXIgaGlnaCBiaXRzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZ19zbWluKHJlZykgJmd0Oz0gZmllbGRfc21pbiAmYW1wOyZhbXA7IHJlZ19zbWF4KHJlZykgJmx0Oz0gZmllbGRfc21heCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAl0b3Bfc21heF92YWx1ZSA9ICgodTY0KXJlZ19zbWF4KHJlZykgJmd0OyZndDsgbnVtX2JpdHMpICZsdDsmbHQ7IG51bV9iaXRzOwogCXRvcF9zbWluX3ZhbHVlID0gKCh1NjQpcmVnX3NtaW4ocmVnKSAmZ3Q7Jmd0OyBudW1fYml0cykgJmx0OyZsdDsgbnVtX2JpdHM7CiAKQEAgLTY2MDEsNyAmIzQzOzY2ODAsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYgogCiAJCWlmICh0ID09IEJQRl9SRUFEKQogCQkJZXJyID0gY2hlY2tfc3RhY2tfcmVhZChlbnYsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwKLQkJCQkJICAgICAgIHZhbHVlX3JlZ25vKTsKJiM0MzsJCQkJCSAgICAgICB2YWx1ZV9yZWdubywgaXNfbGRzeCk7CiAJCWVsc2UKIAkJCWVyciA9IGNoZWNrX3N0YWNrX3dyaXRlKGVudiwgcmVnLCBvZmYsIHNpemUsCiAJCQkJCQl2YWx1ZV9yZWdubywgaW5zbl9pZHgpOwpAQCAtNjY5OCwxMyAmIzQzOzY3NzcsMTUgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAkJCSAqIFNpZ24tZXh0ZW5zaW9uIGNhbiBjaGFuZ2UgdGhlIHJlZ2lzdGVyIHZhbHVlIHJlbGF0aXZlCiAJCQkgKiB0byBhIHNjYWxhciBpdCBpcyBsaW5rZWQgd2l0aCBieSBpZCAoZS5nLiBhIHplcm8tCiAJCQkgKiBleHRlbmRpbmcgZmlsbCBvZiB0aGUgc2FtZSBzcGlsbGVkIHN0YWNrIHNsb3QpLCB0aHVzCi0JCQkgKiBkcm9wIHRoZSBzaGFyZWQgaWQgaW4gdGhhdCBjYXNlLgomIzQzOwkJCSAqIGRyb3AgdGhlIHNoYXJlZCBpZCBpbiB0aGF0IGNhc2UuIEEgLSZndDtzdWJyZWcgbGluayBpcwomIzQzOwkJCSAqIHRoZSBleGNlcHRpb246IGl0IGFscmVhZHkgcmVjb3JkcyB0aGF0IG9ubHkgdGhlIGxvdwomIzQzOwkJCSAqIDMyIGJpdHMgYXJlIHNoYXJlZCwgYW5kIGhvdyB0aGUgaGlnaCBoYWxmIGZvbGxvd3MuCiAJCQkgKi8KIAkJCWJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KCZhbXA7cmVnc1t2YWx1ZV9yZWdub10pICZsdDsKIAkJCQkJKDFVTEwgJmx0OyZsdDsgKHNpemUgKiBCSVRTX1BFUl9CWVRFIC0gMSkpOwogCiAJCQljb2VyY2VfcmVnX3RvX3NpemVfc3goJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSwgc2l6ZSk7Ci0JCQlpZiAoIW5vX3NleHQpCiYjNDM7CQkJaWYgKCFub19zZXh0ICZhbXA7JmFtcDsgIXJlZ3NbdmFsdWVfcmVnbm9dLnN1YnJlZykKIAkJCQljbGVhcl9zY2FsYXJfaWQoJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSk7CiAJCX0KIAl9CkBAIC0xNjExNyw3ICYjNDM7MTYxOTgsNyBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlvZmYgPSAtb2ZmOwogCQl9CiAKLQkJaWYgKGRzdF9yZWctJmd0O2lkICZhbXA7IEJQRl9BRERfQ09OU1QpIHsKJiM0MzsJCWlmIChkc3RfcmVnLSZndDthZGRfY29uc3QpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgcmVnaXN0ZXIgYWxyZWFkeSB3ZW50IHRocm91Z2ggclggJiM0Mzs9IHZhbAogCQkJICogd2UgY2Fubm90IGFjY3VtdWxhdGUgYW5vdGhlciB2YWwgaW50byByeC0mZ3Q7b2ZmLgpAQCAtMTYxMjYsOSAmIzQzOzE2MjA3LDkgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJY2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpOwogCQl9IGVsc2UgewogCQkJaWYgKGFsdTMyKQotCQkJCWRzdF9yZWctJmd0O2lkIHw9IEJQRl9BRERfQ09OU1QzMjsKJiM0MzsJCQkJZHN0X3JlZy0mZ3Q7YWRkX2NvbnN0ID0gQUREX0NPTlNUXzMyOwogCQkJZWxzZQotCQkJCWRzdF9yZWctJmd0O2lkIHw9IEJQRl9BRERfQ09OU1Q2NDsKJiM0MzsJCQkJZHN0X3JlZy0mZ3Q7YWRkX2NvbnN0ID0gQUREX0NPTlNUXzY0OwogCQkJZHN0X3JlZy0mZ3Q7ZGVsdGEgPSBvZmY7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTYyMjAsMTIgJiM0MzsxNjMwMSwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCQkJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJCQkJfSBlbHNlIGlmIChzcmNfcmVnLSZndDt0eXBlID09IFNDQUxBUl9WQUxVRSkgewogCQkJCQkJYm9vbCBub19zZXh0OwomIzQzOwkJCQkJCS8qCiYjNDM7CQkJCQkJICogQSAzMi1iaXQgc2lnbiBleHRlbnNpb24ga2VlcHMgdGhlIGxvdyAzMgomIzQzOwkJCQkJCSAqIGJpdHMsIHNvIHJlY29yZCBhIGxvdy0zMiBsaW5rIGFzIHRoZQomIzQzOwkJCQkJCSAqIHplcm8tZXh0ZW5kaW5nIG1vdiBkb2VzLiBBIHNlbGYtbW92CiYjNDM7CQkJCQkJICogcXVhbGlmaWVzIG9ubHkgaWYgc3JjIGlzIGFscmVhZHkgbGlua2VkLgomIzQzOwkJCQkJCSAqLwomIzQzOwkJCQkJCWJvb2wgc3VicmVnX2xpbmsgPSAoaW5zbi0mZ3Q7b2ZmICZndDsmZ3Q7IDMpID09IDQgJmFtcDsmYW1wOwomIzQzOwkJCQkJCQkJICAgKHNyY19yZWcgIT0gZHN0X3JlZyB8fAomIzQzOwkJCQkJCQkJICAgIHNyY19yZWctJmd0O2lkKTsKIAogCQkJCQkJbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpICZsdDsgKDFVTEwgJmx0OyZsdDsgKGluc24tJmd0O29mZiAtIDEpKTsKLQkJCQkJCWlmIChub19zZXh0KQomIzQzOwkJCQkJCWlmIChub19zZXh0IHx8IHN1YnJlZ19saW5rKQogCQkJCQkJCWFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHNyY19yZWcpOwogCQkJCQkJKmRzdF9yZWcgPSAqc3JjX3JlZzsKLQkJCQkJCWlmICghbm9fc2V4dCkKJiM0MzsJCQkJCQlpZiAoIW5vX3NleHQgJmFtcDsmYW1wOyBzdWJyZWdfbGluayAmYW1wOyZhbXA7IHNyY19yZWctJmd0O2lkKQomIzQzOwkJCQkJCQlkc3RfcmVnLSZndDtzdWJyZWcgPSBTVUJSRUdfU0VYVDsKJiM0MzsJCQkJCQllbHNlIGlmICghbm9fc2V4dCkKIAkJCQkJCQljbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7CiAJCQkJCQljb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi0mZ3Q7b2ZmICZndDsmZ3Q7IDMpOwogCQkJCQl9IGVsc2UgewpAQCAtMTYyNDIsMTUgJiM0MzsxNjMzNCwyMiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCQkJfSBlbHNlIGlmIChzcmNfcmVnLSZndDt0eXBlID09IFNDQUxBUl9WQUxVRSkgewogCQkJCQlpZiAoaW5zbi0mZ3Q7b2ZmID09IDApIHsKIAkJCQkJCWJvb2wgaXNfc3JjX3JlZ191MzIgPSBnZXRfcmVnX3dpZHRoKHNyY19yZWcpICZsdDs9IDMyOwomIzQzOwkJCQkJCS8qCiYjNDM7CQkJCQkJICogQSB3aWRlIHNyYyBzaGFyZXMgb25seSBpdHMgbG93IDMyIGJpdHMuIEEKJiM0MzsJCQkJCQkgKiBmdWxsIGxpbmsgd291bGQgbGV0IGRzdCYjMzk7cyBbMCwgVTMyX01BWF0KJiM0MzsJCQkJCQkgKiBwcm9wYWdhdGUgb250byBzcmMmIzM5O3MgdW5rbm93biBoaWdoIGJpdHMsIHNvCiYjNDM7CQkJCQkJICogcmVjb3JkIGEgbG93LTMyLW9ubHkgbGluayBpbnN0ZWFkLiBBCiYjNDM7CQkJCQkJICogc2VsZi1tb3YgaGFzIG5vdGhpbmcgdG8gbGluay4KJiM0MzsJCQkJCQkgKi8KJiM0MzsJCQkJCQlib29sIHN1YnJlZ19saW5rID0gIWlzX3NyY19yZWdfdTMyICZhbXA7JmFtcDsKJiM0MzsJCQkJCQkJCSAgIHNyY19yZWcgIT0gZHN0X3JlZzsKIAotCQkJCQkJaWYgKGlzX3NyY19yZWdfdTMyKQomIzQzOwkJCQkJCWlmIChpc19zcmNfcmVnX3UzMiB8fCBzdWJyZWdfbGluaykKIAkJCQkJCQlhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTsKIAkJCQkJCSpkc3RfcmVnID0gKnNyY19yZWc7Ci0JCQkJCQkvKiBNYWtlIHN1cmUgSUQgaXMgY2xlYXJlZCBpZiBzcmNfcmVnIGlzIG5vdCBpbiB1MzIKLQkJCQkJCSAqIHJhbmdlIG90aGVyd2lzZSBkc3RfcmVnIG1pbi9tYXggY291bGQgYmUgaW5jb3JyZWN0bHkKLQkJCQkJCSAqIHByb3BhZ2F0ZWQgaW50byBzcmNfcmVnIGJ5IHN5bmNfbGlua2VkX3JlZ3MoKQotCQkJCQkJICovCi0JCQkJCQlpZiAoIWlzX3NyY19yZWdfdTMyKQomIzQzOwkJCQkJCWlmIChzdWJyZWdfbGluayAmYW1wOyZhbXA7IHNyY19yZWctJmd0O2lkKQomIzQzOwkJCQkJCQlkc3RfcmVnLSZndDtzdWJyZWcgPSBTVUJSRUdfWkVYVDsKJiM0MzsJCQkJCQllbHNlIGlmICghaXNfc3JjX3JlZ191MzIpCiAJCQkJCQkJY2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpOwogCQkJCQl9IGVsc2UgewogCQkJCQkJLyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqLwpAQCAtMTcwNjcsNyAmIzQzOzE3MTY2LDcgQEAgc3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3QKIHsKIAlzdHJ1Y3QgbGlua2VkX3JlZyAqZTsKIAotCWlmIChyZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IChyZWctJmd0O2lkICZhbXA7IH5CUEZfQUREX0NPTlNUKSAhPSBpZCkKJiM0MzsJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnLSZndDtpZCAhPSBpZCkKIAkJcmV0dXJuOwogCiAJZSA9IGxpbmtlZF9yZWdzX3B1c2gocmVnX3NldCk7CkBAIC0xNzA5NSw3ICYjNDM7MTcxOTQsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJdTE2IGxpdmVfcmVnczsKIAlpbnQgaSwgajsKIAotCWlkID0gaWQgJmFtcDsgfkJQRl9BRERfQ09OU1Q7CiAJZm9yIChpID0gdnN0YXRlLSZndDtjdXJmcmFtZTsgaSAmZ3Q7PSAwOyBpLS0pIHsKIAkJbGl2ZV9yZWdzID0gYXV4W2JwZl9mcmFtZV9pbnNuX2lkeCh2c3RhdGUsIGkpXS5saXZlX3JlZ3NfYmVmb3JlOwogCQlmdW5jID0gdnN0YXRlLSZndDtmcmFtZVtpXTsKQEAgLTE3MTE0LDYgJiM0MzsxNzIxMiw0MCBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBTZXQgQHJlZyB0byB0aGUgemVyby1leHRlbnNpb24gb2YgQGtub3duX3JlZyYjMzk7cyBsb3cgMzIgYml0czogaXQgc2hhcmVzIHRob3NlCiYjNDM7ICogYml0cyBhbmQgaXRzIGhpZ2ggaGFsZiBpcyB6ZXJvLiBDb3B5IHRoZSBiYXNlIHRvIGtlZXAgaXRzIHByZWNpc2UgbG93LTMyCiYjNDM7ICogdG51bSwgdGhlbiByZS1hcHBseSB0aGUgemV4dF8zMl90b182NCgpIHRoZSAzMi1iaXQgbW92IGl0c2VsZiB1c2VkLgomIzQzOyAqIEByZWctJmd0O2lkIGFuZCAtJmd0O2RlbHRhIGFscmVhZHkgZXF1YWwgQGtub3duX3JlZyYjMzk7czsgb25seSAtJmd0O3N1YnJlZyBpcyBpdHMgb3duLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlY29uc3RydWN0X3pleHQzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqa25vd25fcmVnKQomIzQzO3sKJiM0MzsJZW51bSBicGZfc3VicmVnIHN1YnJlZyA9IHJlZy0mZ3Q7c3VicmVnOwomIzQzOwomIzQzOwkqcmVnID0gKmtub3duX3JlZzsKJiM0MzsJcmVnLSZndDtzdWJyZWcgPSBzdWJyZWc7CiYjNDM7CXpleHRfMzJfdG9fNjQocmVnKTsKJiM0MzsJcmVnX2JvdW5kc19zeW5jKHJlZyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0LiBOb3RlIHRoaXMgZHJpdmVzIG9mZiB0aGUgYmFzZSYjMzk7cyAzMi1iaXQKJiM0MzsgKiByYW5nZSwgbm90IGNvZXJjZV9yZWdfdG9fc2l6ZV9zeCgpOiBhZnRlciBhIDMyLWJpdCBjb21wYXJlIGl0IGlzIHRoZSBsb3cKJiM0MzsgKiBoYWxmIHRoYXQgaGFzIGJlZW4gbmFycm93ZWQsIGFuZCB0aGUgNjQtYml0IGJvdW5kcyBzdGlsbCBkZXNjcmliZSB0aGUKJiM0MzsgKiBiYXNlJiMzOTtzIGhpZ2ggYml0cywgd2hpY2ggYXJlIG5vdCBvdXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlY29uc3RydWN0X3NleHQzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqa25vd25fcmVnKQomIzQzO3sKJiM0MzsJZW51bSBicGZfc3VicmVnIHN1YnJlZyA9IHJlZy0mZ3Q7c3VicmVnOwomIzQzOwomIzQzOwkqcmVnID0gKmtub3duX3JlZzsKJiM0MzsJcmVnLSZndDtzdWJyZWcgPSBzdWJyZWc7CiYjNDM7CXNleHRfMzJfdG9fNjQocmVnKTsKJiM0MzsJcmVnX2JvdW5kc19zeW5jKHJlZyk7CiYjNDM7fQomIzQzOwogLyogRm9yIGFsbCBSIGluIGxpbmtlZF9yZWdzLCBjb3B5IGtub3duX3JlZyByYW5nZSBpbnRvIFIKICAqIGlmIFItJmd0O2lkID09IGtub3duX3JlZy0mZ3Q7aWQuCiAgKi8KQEAgLTE3MTMxLDE4ICYjNDM7MTcyNjMsNDQgQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3MKIAkJCQk6ICZhbXA7dnN0YXRlLSZndDtmcmFtZVtlLSZndDtmcmFtZW5vXS0mZ3Q7c3RhY2tbZS0mZ3Q7c3BpXS5zcGlsbGVkX3B0cjsKIAkJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnID09IGtub3duX3JlZykKIAkJCWNvbnRpbnVlOwotCQlpZiAoKHJlZy0mZ3Q7aWQgJmFtcDsgfkJQRl9BRERfQ09OU1QpICE9IChrbm93bl9yZWctJmd0O2lkICZhbXA7IH5CUEZfQUREX0NPTlNUKSkKJiM0MzsJCWlmIChyZWctJmd0O2lkICE9IGtub3duX3JlZy0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkvKgomIzQzOwkJICogQSAtJmd0O3N1YnJlZyByZWdpc3RlciBzaGFyZXMgb25seSB0aGUgYmFzZSYjMzk7cyBsb3cgMzIgYml0cywgc28gaXQKJiM0MzsJCSAqIGlzIHJlYnVpbHQgcmF0aGVyIHRoYW4gY29waWVkLiBOb3QgbW9kZWxsZWQgdG9nZXRoZXIgd2l0aCBhCiYjNDM7CQkgKiBkZWx0YSwgc28gc2tpcCBpZiBlaXRoZXIgc2lkZSBoYXMgb25lIChzb3VuZCwgbGVzcyBwcmVjaXNlKS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJlZy0mZ3Q7c3VicmVnKSB7CiYjNDM7CQkJaWYgKHJlZy0mZ3Q7YWRkX2NvbnN0IHx8IGtub3duX3JlZy0mZ3Q7YWRkX2NvbnN0KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlpZiAocmVnLSZndDtzdWJyZWcgPT0gU1VCUkVHX1pFWFQpCiYjNDM7CQkJCXJlY29uc3RydWN0X3pleHQzMihyZWcsIGtub3duX3JlZyk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlyZWNvbnN0cnVjdF9zZXh0MzIocmVnLCBrbm93bl9yZWcpOwomIzQzOwkJCWlmIChlLSZndDtpc19yZWcpCiYjNDM7CQkJCW1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIGUtJmd0O3JlZ25vKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCW1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBlLSZndDtzcGkpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSByZXZlcnNlOiBrbm93bl9yZWcga25vd3Mgb25seSBpdHMgbG93IDMyIGJpdHMsIHdoaWNoIHNheQomIzQzOwkJICogbm90aGluZyBhYm91dCByZWcmIzM5O3MgaGlnaCBoYWxmLgomIzQzOwkJICovCiYjNDM7CQlpZiAoa25vd25fcmVnLSZndDtzdWJyZWcpCiAJCQljb250aW51ZTsKIAkJLyoKIAkJICogU2tpcCBtaXhlZCAzMi82NC1iaXQgbGlua3M6IHRoZSBkZWx0YSByZWxhdGlvbnNoaXAgZG9lc24mIzM5O3QKIAkJICogaG9sZCBhY3Jvc3MgZGlmZmVyZW50IEFMVSB3aWR0aHMuCiAJCSAqLwotCQlpZiAoKChyZWctJmd0O2lkIF4ga25vd25fcmVnLSZndDtpZCkgJmFtcDsgQlBGX0FERF9DT05TVCkgPT0gQlBGX0FERF9DT05TVCkKJiM0MzsJCWlmIChyZWctJmd0O2FkZF9jb25zdCAmYW1wOyZhbXA7IGtub3duX3JlZy0mZ3Q7YWRkX2NvbnN0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICByZWctJmd0O2FkZF9jb25zdCAhPSBrbm93bl9yZWctJmd0O2FkZF9jb25zdCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKCEocmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSAmYW1wOyZhbXA7ICEoa25vd25fcmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSkgfHwKJiM0MzsJCWlmICgoIXJlZy0mZ3Q7YWRkX2NvbnN0ICZhbXA7JmFtcDsgIWtub3duX3JlZy0mZ3Q7YWRkX2NvbnN0KSB8fAogCQkgICAgcmVnLSZndDtkZWx0YSA9PSBrbm93bl9yZWctJmd0O2RlbHRhKSB7CiAJCQkqcmVnID0gKmtub3duX3JlZzsKIAkJfSBlbHNlIHsKJiM0MzsJCQllbnVtIGJwZl9hZGRfY29uc3Qgc2F2ZWRfYWRkX2NvbnN0ID0gcmVnLSZndDthZGRfY29uc3Q7CiAJCQlzMzIgc2F2ZWRfb2ZmID0gcmVnLSZndDtkZWx0YTsKIAkJCXUzMiBzYXZlZF9pZCA9IHJlZy0mZ3Q7aWQ7CiAKQEAgLTE3MTUyLDE2ICYjNDM7MTczMTAsMTggQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3MKIAkJCS8qIHJlZyA9IGtub3duX3JlZzsgcmVnICYjNDM7PSBkZWx0YSAqLwogCQkJKnJlZyA9ICprbm93bl9yZWc7CiAJCQkvKgotCQkJICogTXVzdCBwcmVzZXJ2ZSBvZmYgYW5kIGlkLCBvdGhlcndpc2UgYW5vdGhlciBzeW5jX2xpbmtlZF9yZWdzKCkKLQkJCSAqIHdpbGwgYmUgaW5jb3JyZWN0LgomIzQzOwkJCSAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgYWRkX2NvbnN0LCBvdGhlcndpc2UgYW5vdGhlcgomIzQzOwkJCSAqIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC4KIAkJCSAqLwogCQkJcmVnLSZndDtkZWx0YSA9IHNhdmVkX29mZjsKIAkJCXJlZy0mZ3Q7aWQgPSBzYXZlZF9pZDsKJiM0MzsJCQlyZWctJmd0O2FkZF9jb25zdCA9IHNhdmVkX2FkZF9jb25zdDsKIAogCQkJc2NhbGFyMzJfbWluX21heF9hZGQocmVnLCAmYW1wO2Zha2VfcmVnKTsKIAkJCXNjYWxhcl9taW5fbWF4X2FkZChyZWcsICZhbXA7ZmFrZV9yZWcpOwogCQkJcmVnLSZndDt2YXJfb2ZmID0gdG51bV9hZGQocmVnLSZndDt2YXJfb2ZmLCBmYWtlX3JlZy52YXJfb2ZmKTsKLQkJCWlmICgocmVnLSZndDtpZCB8IGtub3duX3JlZy0mZ3Q7aWQpICZhbXA7IEJQRl9BRERfQ09OU1QzMikKJiM0MzsJCQlpZiAocmVnLSZndDthZGRfY29uc3QgPT0gQUREX0NPTlNUXzMyIHx8CiYjNDM7CQkJICAgIGtub3duX3JlZy0mZ3Q7YWRkX2NvbnN0ID09IEFERF9DT05TVF8zMikKIAkJCQl6ZXh0XzMyX3RvXzY0KHJlZyk7CiAJCQlyZWdfYm91bmRzX3N5bmMocmVnKTsKIAkJfQpAQCAtMTgyNTUsNyAmIzQzOzE4NDE1LDcgQEAgdm9pZCBicGZfY2xlYXJfc2luZ3VsYXJfaWRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQljb250aW51ZTsKIAkJaWYgKCFyZWctJmd0O2lkKQogCQkJY29udGludWU7Ci0JCWlkc2V0X2NudF9pbmMoaWRzZXQsIHJlZy0mZ3Q7aWQgJmFtcDsgfkJQRl9BRERfQ09OU1QpOwomIzQzOwkJaWRzZXRfY250X2luYyhpZHNldCwgcmVnLSZndDtpZCk7CiAJfSkpOwogCiAJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoc3QsIGZ1bmMsIHJlZywgKHsKQEAgLTE4MjYzLDcgJiM0MzsxODQyMyw3IEBAIHZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJY29udGludWU7CiAJCWlmICghcmVnLSZndDtpZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaWRzZXRfY250X2dldChpZHNldCwgcmVnLSZndDtpZCAmYW1wOyB+QlBGX0FERF9DT05TVCkgPT0gMSkKJiM0MzsJCWlmIChpZHNldF9jbnRfZ2V0KGlkc2V0LCByZWctJmd0O2lkKSA9PSAxKQogCQkJY2xlYXJfc2NhbGFyX2lkKHJlZyk7CiAJfSkpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAppbmRleCBlYjg4ZDljZTZjMzQ4Li40NWJmYTAyYTUzMzgwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaApAQCAtMjY5LDYgJiM0MzsyNjksMTQgQEAKICNkZWZpbmUgQ0FOX1VTRV9CUEZfU1QKICNlbmRpZgogCiYjNDM7I2lmIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8CVwKJiM0MzsgICAgIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSB8fAkJXAomIzQzOyAgICAgZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybSkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApIHx8CVwKJiM0MzsgICAgIGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKSAmYW1wOyZhbXA7CQkJCVwKJiM0MzsJKF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAxOCB8fCBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfTU9WU1gpKQomIzQzOyNkZWZpbmUgQ0FOX1VTRV9NT1ZTWAomIzQzOyNlbmRpZgomIzQzOwogI2lmIF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAxOCAmYW1wOyZhbXA7IGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpICZhbXA7JmFtcDsJCVwKIAkoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fAkJCQlcCiAJIGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8CQkJCQlcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmMKaW5kZXggZGY4ZDUzMDk2NTdlMS4uYjRlYWRiZDg4MzU3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYwpAQCAtMTUxNiw3ICYjNDM7MTUxNiw3IEBAIF9fbmFrZWQgdm9pZCBzdWIzMl9mdWxsX292ZXJmbG93KHZvaWQpCiBTRUMoJiMzNDtzb2NrZXQmIzM0OykKIF9fZGVzY3JpcHRpb24oJiMzNDszMi1iaXQgc3VidHJhY3Rpb24sIHBhcnRpYWwgb3ZlcmZsb3csIHJlc3VsdCBpbiB1bmJvdW5kZWQgdTMyIGJvdW5kcyYjMzQ7KQogX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCi1fX21zZygmIzM0OzM6ICgxYykgdzMgLT0gdzIge3suKn19IFIzPXNjYWxhcihzbWluPTAsc21heD11bWF4PTB4ZmZmZmZmZmYsdmFyX29mZj0oMHgwOyAweGZmZmZmZmZmKSkmIzM0OykKJiM0MztfX21zZygmIzM0OzM6ICgxYykgdzMgLT0gdzIge3suKn19IFIzPXNjYWxhcihpZD17e1swLTldJiM0Mzt9fS0xLmxvMzIsc21pbj0wLHNtYXg9dW1heD0weGZmZmZmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmZmZmZikpJiMzNDspCiBfX3JldHZhbCgwKQogX19uYWtlZCB2b2lkIHN1YjMyX3BhcnRpYWxfb3ZlcmZsb3codm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xpbmtlZF9zY2FsYXJzLmMKaW5kZXggZDU3MWZiZmM4NmEzYS4uY2E3NDcxZjAyOTNkZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xpbmtlZF9zY2FsYXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xpbmtlZF9zY2FsYXJzLmMKQEAgLTM0OSw4ICYjNDM7MzQ5LDggQEAgbDBfJT06CQkJCQkJCVwKIH0KIAogLyoKLSAqIFRlc3QgdGhhdCBzeW5jX2xpbmtlZF9yZWdzKCkgY2hlY2tzIHJlZy0mZ3Q7aWQgKHRoZSBsaW5rZWQgdGFyZ2V0IHJlZ2lzdGVyKQotICogZm9yIEJQRl9BRERfQ09OU1QzMiByYXRoZXIgdGhhbiBrbm93bl9yZWctJmd0O2lkICh0aGUgYnJhbmNoIHJlZ2lzdGVyKS4KJiM0MzsgKiBUZXN0IHRoYXQgc3luY19saW5rZWRfcmVncygpIGNoZWNrcyB0aGUgbGlua2VkIHRhcmdldCByZWdpc3RlciAocmVnKSBmb3IKJiM0MzsgKiBBRERfQ09OU1RfMzIgcmF0aGVyIHRoYW4gdGhlIGJyYW5jaCByZWdpc3RlciAoa25vd25fcmVnKS4KICAqLwogU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX3N1Y2Nlc3MKQEAgLTM2MCw3ICYjNDM7MzYwLDcgQEAgX19uYWtlZCB2b2lkIHNjYWxhcnNfYWx1MzJfemV4dF9saW5rZWRfcmVnKHZvaWQpCiAJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiAJdzYgPSB3MDsJCS8qIHI2IGluIFswLCAweEZGRkZGRkZGXSAqLwlcCiAJcjcgPSByNjsJCS8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqLwlcCi0JdzcgJiM0Mzs9IDE7CQkvKiBhbHUzMjogcjcuaWQgfD0gQlBGX0FERF9DT05TVDMyICovIFwKJiM0MzsJdzcgJiM0Mzs9IDE7CQkvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi8gXAogCXI4ID0gMHhGRkZGZmZmZiBsbDsJCQkJCVwKIAlpZiByNiAmbHQ7IHI4IGdvdG8gbDBfJT07CQkJCQlcCiAJLyogcjYgaW4gWzB4RkZGRkZGRkYsIDB4RkZGRkZGRkZdICovCQkJXApAQCAtMzgxLDcgJiM0MzszODEsNyBAQCBsMF8lPToJCQkJCQkJCVwKIAogLyoKICAqIFRlc3QgdGhhdCBzeW5jX2xpbmtlZF9yZWdzKCkgc2tpcHMgcHJvcGFnYXRpb24gd2hlbiBvbmUgcmVnaXN0ZXIgdXNlZAotICogYWx1MzIgKEJQRl9BRERfQ09OU1QzMikgYW5kIHRoZSBvdGhlciB1c2VkIGFsdTY0IChCUEZfQUREX0NPTlNUNjQpLgomIzQzOyAqIGFsdTMyIChBRERfQ09OU1RfMzIpIGFuZCB0aGUgb3RoZXIgdXNlZCBhbHU2NCAoQUREX0NPTlNUXzY0KS4KICAqIFRoZSBkZWx0YSByZWxhdGlvbnNoaXAgZG9lc24mIzM5O3QgaG9sZCBhY3Jvc3MgZGlmZmVyZW50IEFMVSB3aWR0aHMuCiAgKi8KIFNFQygmIzM0O3NvY2tldCYjMzQ7KQpAQCAtMzkyLDEzICYjNDM7MzkyLDEzIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX2FsdTY0X2Nyb3NzX3R5cGUodm9pZCkKIAljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKIAl3NiA9IHcwOwkJLyogcjYgaW4gWzAsIDB4RkZGRkZGRkZdICovCVwKIAlyNyA9IHI2OwkJLyogbGlua2VkOiBzYW1lIGlkIGFzIHI2ICovCVwKLQl3NyAmIzQzOz0gMTsJCS8qIGFsdTMyOiBCUEZfQUREX0NPTlNUMzIsIGRlbHRhID0gMSAqLyBcCiYjNDM7CXc3ICYjNDM7PSAxOwkJLyogQUREX0NPTlNUXzMyIGRlbHRhICovIFwKIAlyOCA9IHI2OwkJLyogbGlua2VkOiBzYW1lIGlkIGFzIHI2ICovCVwKLQlyOCAmIzQzOz0gMjsJCS8qIGFsdTY0OiBCUEZfQUREX0NPTlNUNjQsIGRlbHRhID0gMiAqLyBcCiYjNDM7CXI4ICYjNDM7PSAyOwkJLyogQUREX0NPTlNUXzY0IGRlbHRhICovIFwKIAlyOSA9IDB4RkZGRmZmZmYgbGw7CQkJCQlcCiAJaWYgcjcgJmx0OyByOSBnb3RvIGwwXyU9OwkJCQkJXAogCS8qIHI3ID0gMHhGRkZGRkZGRiAqLwkJCQkJXAotCS8qIHN5bmM6IGtub3duX3JlZz1yNyAoQUREX0NPTlNUMzIpLCByZWc9cjggKEFERF9DT05TVDY0KSAqLyBcCiYjNDM7CS8qIHN5bmM6IGtub3duX3JlZz1yNyAoQUREX0NPTlNUXzMyKSwgcmVnPXI4IChBRERfQ09OU1RfNjQpICovIFwKIAkvKiBXaXRob3V0IGZpeDogcjggPSB6ZXh0KDB4RkZGRkZGRkYgJiM0MzsgMSkgPSAwICovCVwKIAkvKiBXaXRoIGZpeDogcjggc3RheXMgWzIsIDB4MTAwMDAwMDAxXSAocjggJmd0Oz0gMikgKi8JXAogCWlmIHI4ICZndDsgMCBnb3RvIGwxXyU9OwkJCQkJXApAQCAtNDE2LDcgJiM0Mzs0MTYsNyBAQCBsMF8lPToJCQkJCQkJCVwKIC8qCiAgKiBUZXN0IHRoYXQgcmVnc2FmZSgpIHByZXZlbnRzIHBydW5pbmcgd2hlbiB0d28gcGF0aHMgcmVhY2ggdGhlIHNhbWUgcHJvZ3JhbQogICogcG9pbnQgd2l0aCBsaW5rZWQgcmVnaXN0ZXJzIGNhcnJ5aW5nIGRpZmZlcmVudCBBRERfQ09OU1QgZmxhZ3MgKG9uZQotICogQlBGX0FERF9DT05TVDMyIGZyb20gYWx1MzIsIGFub3RoZXIgQlBGX0FERF9DT05TVDY0IGZyb20gYWx1NjQpLgomIzQzOyAqIEFERF9DT05TVF8zMiBmcm9tIGFsdTMyLCBhbm90aGVyIEFERF9DT05TVF82NCBmcm9tIGFsdTY0KS4KICAqLwogU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQpAQCAtNDMxLDExICYjNDM7NDMxLDExIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX2FsdTY0X3JlZ3NhZmVfcHJ1bmluZyh2b2lkKQogCWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAogCWlmIHIwICZndDsgMCBnb3RvIGxfcGF0aGJfJT07CQkJCVwKIAkvKiBQYXRoIEE6IGFsdTMyICovCQkJCQlcCi0JdzcgJiM0Mzs9IDE7CQkvKiBCUEZfQUREX0NPTlNUMzIsIGRlbHRhID0gMSAqL1wKJiM0MzsJdzcgJiM0Mzs9IDE7CQkvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi9cCiAJZ290byBsX21lcmdlXyU9OwkJCQkJXAogbF9wYXRoYl8lPToJCQkJCQkJXAogCS8qIFBhdGggQjogYWx1NjQgKi8JCQkJCVwKLQlyNyAmIzQzOz0gMTsJCS8qIEJQRl9BRERfQ09OU1Q2NCwgZGVsdGEgPSAxICovXAomIzQzOwlyNyAmIzQzOz0gMTsJCS8qIEFERF9DT05TVF82NCBkZWx0YSAqL1wKIGxfbWVyZ2VfJT06CQkJCQkJCVwKIAkvKiBNZXJnZSBwb2ludDogcmVnc2FmZSgpIGNvbXBhcmVzIHBhdGggQiBhZ2FpbnN0IGNhY2hlZCBwYXRoIEEuICovIFwKIAkvKiBOYXJyb3cgcjYgdG8gdHJpZ2dlciBzeW5jX2xpbmtlZF9yZWdzIGZvciByNyAqLwlcCkBAIC01OTMsNyAmIzQzOzU5Myw3IEBAIGxfZXhpdF8lPToJCQkJCQkJXAogfQogCiAvKgotICogVGVzdCB0aGF0IHN0YWxlIGRlbHRhIGZyb20gYSBjbGVhcmVkIEJQRl9BRERfQ09OU1QgZG9lcyBub3QgbGVhawomIzQzOyAqIFRlc3QgdGhhdCBzdGFsZSBkZWx0YSBmcm9tIGEgY2xlYXJlZCBBRERfQ09OU1RfKiBkb2VzIG5vdCBsZWFrCiAgKiB0aHJvdWdoIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdigpIGludG8gYSBuZXcgaWQsIGNhdXNpbmcKICAqIHN5bmNfbGlua2VkX3JlZ3MoKSB0byBjb21wdXRlIGFuIGluY29ycmVjdCBvZmZzZXQuCiAgKi8KQEAgLTYwNSwxMCAmIzQzOzYwNSwxMCBAQCBfX25ha2VkIHZvaWQgc2NhbGFyc19zdGFsZV9kZWx0YV9mcm9tX2NsZWFyZWRfaWQodm9pZCkKIAlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAogCWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAogCXI2ID0gcjA7CQkvKiByNiB1bmtub3duLCBnZXRzIGlkIEEgKi8JXAotCXI2ICYjNDM7PSA1OwkJLyogaWQgQXxBRERfQ09OU1QsIGRlbHRhIDUgKi8JXAomIzQzOwlyNiAmIzQzOz0gNTsJCS8qIGlkIEEsIEFERF9DT05TVF82NCBkZWx0YSAqLwlcCiAJcjYgXj0gMDsJCS8qIGlkIGNsZWFyZWQ7IGRlbHRhIHN0YXlzIDUgKi8JXAogCXI4ID0gcjY7CQkvKiBuZXcgaWQgQiwgc3RhbGUgZGVsdGEgNSAqLwlcCi0JcjggJiM0Mzs9IDM7CQkvKiBpZCBCfEFERF9DT05TVCwgZGVsdGEgMyAqLwlcCiYjNDM7CXI4ICYjNDM7PSAzOwkJLyogaWQgQiwgQUREX0NPTlNUXzY0IGRlbHRhICovCVwKIAlyOSA9IHI2OwkJLyogaWQgQiwgc3RhbGUgZGVsdGEgNSAqLwlcCiAJaWYgcjkgIT0gMTAgZ290byBsX2V4aXRfJT07CQkJCVwKIAkvKiBCdWc6IHI4ID0gMTAmIzQzOygzLTUpID0gODsgRml4OiByOCA9IDEwJiM0MzsoMy0wKSA9IDEzICovCVwKQEAgLTY0OCwxMCAmIzQzOzY0OCwxMCBAQCBsX2V4aXRfJT06CQkJCQkJCVwKIH0KIAogLyoKLSAqIFRlc3QgdGhhdCByZWdzYWZlKCkgdmVyaWZpZXMgYmFzZV9pZCBjb25zaXN0ZW5jeSBmb3IgQlBGX0FERF9DT05TVAomIzQzOyAqIFRlc3QgdGhhdCByZWdzYWZlKCkgdmVyaWZpZXMgYmFzZV9pZCBjb25zaXN0ZW5jeSBmb3IgQUREX0NPTlNUXyoKICAqIGxpbmtlZCBzY2FsYXJzIGR1cmluZyBzdGF0ZSBwcnVuaW5nLgogICoKLSAqIFRoZSBmYWxzZSBicmFuY2ggKGV4cGxvcmVkIGZpcnN0KSBsaW5rcyBSMyB0byBSMiB2aWEgQUREX0NPTlNULgomIzQzOyAqIFRoZSBmYWxzZSBicmFuY2ggKGV4cGxvcmVkIGZpcnN0KSBsaW5rcyBSMyB0byBSMiB2aWEgQUREX0NPTlNUXzY0LgogICogVGhlIHRydWUgYnJhbmNoIChydW50aW1lIHBhdGgpIGxpbmtzIFIzIHRvIFI0ICh1bnJlbGF0ZWQgYmFzZV9pZCkuCiAgKiBBdCB0aGUgbWVyZ2UgcG9pbnQsIHBydW5pbmcgbXVzdCBmYWlsIGJlY2F1c2UgdGhlIGxpbmthZ2UgdG9wb2xvZ3kKICAqIGRpZmZlcnMuCkBAIC02NzUsNyAmIzQzOzY3NSw3IEBAIF9fbmFrZWQgdm9pZCBhZGRfY29uc3RfYmFzZV9pZF9wcnVuaW5nKHZvaWQpCiAJcjIgPSByMDsJCQkJCQlcCiAJcjIgJmFtcDs9IDB4ZmY7CQkvKiBSMiA9IHNjYWxhcihpZD1BKSBbMCwyNTVdICovCVwKIAlyMyA9IHIyOwkJLyogUjMgbGlua2VkIHRvIFIyIChpZD1BKSAqLwlcCi0JcjMgJiM0Mzs9IDEwOwkJLyogUjMgaWQ9QXxBRERfQ09OU1QsIGRlbHRhPTEwICovXAomIzQzOwlyMyAmIzQzOz0gMTA7CQkvKiBBRERfQ09OU1RfNjQgZGVsdGEgKi9cCiAJcjYgPSAwOwkJCQkJCQlcCiAJZ290byBsX21lcmdlXyU9OwkJCQkJXAogCQkJCQkJCQlcCkBAIC02ODcsNyAmIzQzOzY4Nyw3IEBAIGxfdHJ1ZV8lPToJCQkJCQkJXAogCXI0ID0gcjA7CQkJCQkJXAogCXI0ICZhbXA7PSAweGZmOwkJLyogUjQgPSBzY2FsYXIgWzAsMjU1XSwgaWQ9MCAqLwlcCiAJcjMgPSByNDsJCS8qIFIzIGxpbmtlZCB0byBSNCAobmV3IGlkPUMpICovXAotCXIzICYjNDM7PSAxMDsJCS8qIFIzIGlkPUN8QUREX0NPTlNULCBkZWx0YT0xMCAqL1wKJiM0MzsJcjMgJiM0Mzs9IDEwOwkJLyogQUREX0NPTlNUXzY0IGRlbHRhICovXAogCXI2ID0gMDsJCQkJCQkJXAogCQkJCQkJCQlcCiBsX21lcmdlXyU9OgkJCQkJCQlcCkBAIC03MTAsNCAmIzQzOzcxMCw2MjMgQEAgbF9leGl0XyU9OgkJCQkJCQlcCiAJOiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSBzaGFyZXMgb25seSB0aGUgbG93IDMyIGJpdHMuIE5hcnJvd2luZyB0aGUKJiM0MzsgKiBzb3VyY2UgbXVzdCByZWFjaCB0aGUgZGVzdGluYXRpb24gdGhyb3VnaCB0aGF0IGxpbmsuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbW92X25hcnJvd19zcmModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJdzcgPSB3NjsJCS8qIGZvcm1zIHRoZSBsaW5rICovCQlcCiYjNDM7CWlmIHc2ICE9IDAgZ290byAxZjsJLyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcCiYjNDM7CWlmIHc3ID09IDAgZ290byAxZjsJCQkJCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgcmV2ZXJzZSBkb2VzIG5vdCBob2xkOiBuYXJyb3dpbmcgdGhlIGxvdy0zMiBsaW5rIHNheXMgbm90aGluZyBhYm91dCB0aGUKJiM0MzsgKiBiYXNlJiMzOTtzIGhpZ2ggYml0cywgc28gcjYgbXVzdCBzdGF5IHVua25vd24gYW5kIHRoZSBkaXYgc3RheXMgcmVhY2hhYmxlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbmFycm93X2RzdF9rZWVwc19iYXNlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXc3ID0gdzY7CQkvKiBmb3JtcyB0aGUgbGluayAqLwkJXAomIzQzOwlpZiByNyAhPSAwIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjcsIG11c3Qgbm90IHByb3BhZ2F0ZSB0byByNiAqLyBcCiYjNDM7CWlmIHI2ID09IDAgZ290byAxZjsJLyogdGFrZW4gb25seSBpZiByNiB3cm9uZ2x5IG5hcnJvd2VkICovCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIHByb3ZhYmx5LXUzMiBzb3VyY2UgdGFrZXMgdGhlIGZ1bGwtZXF1YWxpdHkgcGF0aCwgbm90IHRoZSBsb3ctMzIgb25lOgomIzQzOyAqIG5hcnJvd2luZyB0aGUgZGVzdGluYXRpb24gbXVzdCByZWFjaCB0aGUgc291cmNlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X3UzMl9zcmNfaXNfZnVsbF9saW5rKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJdzYgPSB3MDsJCS8qIHI2IHByb3ZhYmx5IHUzMiAqLwkJXAomIzQzOwl3NyA9IHc2OwkJLyogZnVsbCBsaW5rLCBub3QgbG93LTMyICovCVwKJiM0MzsJaWYgcjcgJmd0OyAxMCBnb3RvIDFmOwkvKiBuYXJyb3dzIHI3LCBwcm9wYWdhdGVzIHRvIHI2ICovIFwKJiM0MzsJaWYgcjYgJmd0OyAxMCBnb3RvIDJmOwkJCQkJXAomIzQzOwlnb3RvIDFmOwkJCQkJCVwKJiM0MzsyOgkJCQkJCQkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgc2VsZi1tb3YgaGFzIG5vdGhpbmcgdG8gbGluaywgc28gaXQgbXVzdCBub3QgbWludCBhbiBpZCBmb3IgcjYuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7LyogYW4gaWQgd291bGQgcHJpbnQgYXMgUjY9c2NhbGFyKGlkPU4ubG8zMixzbWluPS4uLiAqLwomIzQzO19fbXNnKCYjMzQ7KGJjKSB3NiA9IHc2IHt7Lip9fSBSNj1zY2FsYXIoc21pbj0wLCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjYgXj0gMDsJCS8qIGRyb3AgdGhlIGlkICovCQlcCiYjNDM7CXc2ID0gdzY7CQkvKiBmb3JtcyBubyBsaW5rICovCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBsb3ctMzItbGlua2VkIHNvdXJjZSBrZWVwcyBpdHMgaWQgYW5kIGZsYWcgYWNyb3NzIGEgZnVydGhlciAzMi1iaXQgbW92LAomIzQzOyAqIHNvIG5hcnJvd2luZyB0aGUgYmFzZSBzdGlsbCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGNoYWluLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2NoYWluX2tlZXBzX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJdzcgPSB3NjsJCS8qIGZvcm1zIHRoZSBsaW5rICovCQlcCiYjNDM7CXc4ID0gdzc7CQkvKiBsaW5rIHN1cnZpdmVzIHRoZSAybmQgbW92ICovCVwKJiM0MzsJaWYgdzYgIT0gMCBnb3RvIDFmOwkvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHI4ICovIFwKJiM0MzsJaWYgdzggPT0gMCBnb3RvIDFmOwkJCQkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgZGVsdGEgb24gZWl0aGVyIHNpZGUgaXMgbm90IG1vZGVsbGVkIHRvZ2V0aGVyIHdpdGggYSBsb3ctMzIgbGluaywgc28gbm8KJiM0MzsgKiByYW5nZSBwcm9wYWdhdGVzOiBoZXJlIHRoZSBicmFuY2ggcmVnaXN0ZXIgY2FycmllcyB0aGUgZGVsdGEuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZGl2IGJ5IHplcm8mIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9ub19zeW5jX3doZW5fYmFzZV9oYXNfZGVsdGEodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJdzcgPSB3NjsJCS8qIGZvcm1zIHRoZSBsaW5rICovCQlcCiYjNDM7CXI4ID0gcjY7CQkJCQkJXAomIzQzOwlyOCAmIzQzOz0gMzsJCS8qIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnICovCVwKJiM0MzsJaWYgcjggIT0gMyBnb3RvIDFmOwkvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjcgKi8JXAomIzQzOwlpZiB3NyA9PSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogLi4uIGFuZCBoZXJlIHRoZSBsb3ctMzIgbGluayBpcyB0aGUgYnJhbmNoIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXIKJiM0MzsgKiBjYXJyeWluZyB0aGUgZGVsdGEgbXVzdCBub3QgYmUgbmFycm93ZWQgZWl0aGVyLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbm9fc3luY19mcm9tX3N1YnJlZ19iYXNlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXc3ID0gdzY7CQkvKiBmb3JtcyB0aGUgbGluayAqLwkJXAomIzQzOwlyOCA9IHI2OwkJCQkJCVwKJiM0MzsJcjggJiM0Mzs9IDM7CQkvKiBkZWx0YSBvbiByOCAqLwkJXAomIzQzOwlpZiB3NyAhPSAwIGdvdG8gMWY7CS8qIG11c3Qgbm90IHByb3BhZ2F0ZSB0byByOCAqLwlcCiYjNDM7CWlmIHI4ID09IDMgZ290byAxZjsJLyogdGFrZW4gb25seSBpZiByOCB3cm9uZ2x5IG5hcnJvd2VkICovCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUd28gbG93LTMyIGxpbmtzIG9uIHRoZSBzYW1lIGJhc2UgZG8gcHJvcGFnYXRlIHRvIGVhY2ggb3RoZXI6IGJvdGggYXJlIHRoZQomIzQzOyAqIHplcm8tZXh0ZW5zaW9uIG9mIHRoZSBzYW1lIGxvdyAzMiBiaXRzLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X3N5bmNfYmV0d2Vlbl90d29fc3VicmVncyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwl3NyA9IHc2OwkJLyogdHdvIGxpbmtzIG9uIG9uZSBiYXNlICovCVwKJiM0MzsJdzggPSB3NjsJCQkJCQlcCiYjNDM7CWlmIHc3ICE9IDAgZ290byAxZjsJLyogbmFycm93cyByNywgcHJvcGFnYXRlcyB0byByOCAqLyBcCiYjNDM7CWlmIHc4ID09IDAgZ290byAxZjsJCQkJCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPbmx5IG9uZSBvZiB0aGUgdHdvIHBhdGhzIGxpbmtzIHI3IHRvIHI4LCBzbyB0aGUgbmFycm93aW5nIG9mIHc4IHJlYWNoZXMgcjcKJiM0MzsgKiBvbiBvbmUgYW5kIG5vdCB0aGUgb3RoZXIgYW5kIHRoZSBkaXYgc3RheXMgcmVhY2hhYmxlLiBUaGlzIGNoZWNrcyB0aGUKJiM0MzsgKiBvdXRjb21lLCBub3QgdGhlIG1lY2hhbmlzbTogdGhlIHR3byBzdGF0ZXMgZGlmZmVyIGluIHRoZWlyIGlkcyBhbmQgY29udGVudHMsCiYjNDM7ICogc28gcmVnc2FmZSgpIGhhcyBtYW55IHJlYXNvbnMgdG8ga2VlcCB0aGVtIGFwYXJ0IGFuZCBkaXNhYmxpbmcgYW55IHNpbmdsZQomIzQzOyAqIG9uZSBvZiBpdHMgY2hlY2tzIGRvZXMgbm90IG1ha2UgdGhpcyBmYWlsLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX25ha2VkIHZvaWQgemV4dF91bmxpbmtlZF9wYXRoX3N0YXlzX3JlYWNoYWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwlyNiAmYW1wOz0gMTsJCQkJCQlcCiYjNDM7CWlmIHI2ICZndDs9IDEgZ290byAyZjsJCQkJCVwKJiM0MzsJLyogZXhwbG9yZWQgZmlyc3Q6IHI3IGlzIGEgbG93LTMyIGxpbmsgb2YgcjggKi8JCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI4ID0gcjA7CQkJCQkJXAomIzQzOwl3NyA9IHc4OwkJLyogZm9ybXMgdGhlIGxpbmsgKi8JCVwKJiM0MzsJZ290byAxZjsJCQkJCQlcCiYjNDM7MjoJCQkJCQkJCVwKJiM0MzsJLyogcnVudGltZSBwYXRoOiByNyB1bnJlbGF0ZWQgdG8gcjggKi8JCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyOCA9IHIwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXc3ID0gdzA7CQkvKiBubyBsaW5rIGhlcmUgKi8JCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlpZiB3OCAhPSAwIGdvdG8gM2Y7CS8qIHByb3BhZ2F0ZXMgdG8gcjcgb25seSBpZiBsaW5rZWQgKi8gXAomIzQzOwlpZiB3NyA9PSAwIGdvdG8gM2Y7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzM6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRm9ybWluZyB0aGUgbGluayBjYWxscyBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoKSwgd2hpY2ggZHJvcHMgYSBkZWx0YQomIzQzOyAqIGxpbmsgb24gdGhlIHNvdXJjZS4gVGhhdCBpcyB3aGF0IHRoZSBuYXJyb3ctc291cmNlIHBhdGggaGFzIGFsd2F5cyBkb25lLAomIzQzOyAqIHNvIGEgd2lkZSBzb3VyY2UgYmVoYXZlcyB0aGUgc2FtZTogcjUgc3RvcHMgdHJhY2tpbmcgcjYuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZGl2IGJ5IHplcm8mIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9tb3ZfYnJlYWtzX2FkZF9jb25zdF9zcmModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjUgPSByNjsJCS8qIHI1LCByNiBsaW5rZWQgKi8JCVwKJiM0MzsJcjUgJiM0Mzs9IDM7CQkvKiByNSA9IGJhc2UgJiM0MzsgMyAqLwkJXAomIzQzOwl3NyA9IHc1OwkJLyogYnJlYWtzIHI1JiMzOTtzIGRlbHRhIGxpbmsgKi8JXAomIzQzOwlpZiByNiAmZ3Q7IDkgZ290byAxZjsJLyogcjYgaW4gWzAsIDldICovCQlcCiYjNDM7CWlmIHI1ICZsdDsgMTMgZ290byAxZjsJLyogdGFrZW4gb25seSBpZiByNSBzdGlsbCBsaW5rZWQgKi8gXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgbmFycm93aW5nIGZpbGwga2VlcHMgb25seSB0aGUgc2xvdCYjMzk7cyBsb3cgMzIgYml0cywgc28gYSBsYXRlciBuYXJyb3dpbmcgb2YKJiM0MzsgKiB0aGUgc3BpbGxlZCB2YWx1ZSBtdXN0IHN0aWxsIHJlYWNoIHRoZSBmaWxsZWQgcmVnaXN0ZXIuIFNhbWUgcmVsYXRpb24gYXMgYQomIzQzOyAqIDMyLWJpdCBtb3YgZnJvbSBhIHdpZGUgc291cmNlLCB3aXRoIHRoZSBzdGFjayBzbG90IGFzIHRoZSBiYXNlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2ZpbGxfbmFycm93X2Zyb21fd2lkZV9zcGlsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjAgJmx0OyZsdDs9IDMyOwkJCQkJCVwKJiM0MzsJcjYgfD0gcjA7CQkvKiByNiA9IGZ1bGwgNjQtYml0IHVua25vd24gKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IHI2OwkvKiBzbG90IGxpbmtlZCB0byByNiAqLwkJXAomIzQzOwlyMiA9ICoodTMyICopKHIxMCAtIDgpOwkvKiBuYXJyb3dpbmcgZmlsbCwgZm9ybXMgdGhlIGxpbmsgKi8gXAomIzQzOwlpZiB3NiAhPSAwIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjIgKi8gXAomIzQzOwlpZiByMiA9PSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBmdWxsLXdpZHRoIGZpbGwgb2YgYSB3aWRlIHNsb3QgaXMgYSBwbGFpbiA2NC1iaXQgZXF1YWxpdHksIG5vdCBhIGxvdy0zMgomIzQzOyAqIGxpbmssIHNvIGl0IG11c3Qga2VlcCBwcm9wYWdhdGluZyBleGFjdGx5IGFzIGJlZm9yZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgemV4dF9maWxsX2Z1bGxfd2lkdGhfa2VlcHNfZnVsbF9saW5rKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyMCAmbHQ7Jmx0Oz0gMzI7CQkJCQkJXAomIzQzOwlyNiB8PSByMDsJCQkJCQlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gcjY7CQkJCQlcCiYjNDM7CXIyID0gKih1NjQgKikocjEwIC0gOCk7CS8qIG5vIG5hcnJvd2luZyAqLwkJXAomIzQzOwlpZiByNiAhPSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CWlmIHIyID09IDAgZ290byAxZjsJCQkJCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIHN1Yi13b3JkIGZpbGwgaXMgYmVsb3cgdGhlIGxvdy0zMiBtb2RlbCwgc28gbm8gbGluayBpcyBmb3JtZWQgYW5kIHRoZQomIzQzOyAqIHJlbGF0aW9uIGlzIGRyb3BwZWQgYXMgYmVmb3JlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfZmlsbF9ieXRlX2Zvcm1zX25vX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXIwICZsdDsmbHQ7PSAzMjsJCQkJCQlcCiYjNDM7CXI2IHw9IHIwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByNjsJCQkJCVwKJiM0MzsJcjIgPSAqKHU4ICopKHIxMCAtIDgpOwkvKiAxLWJ5dGUgZmlsbDogbm8gbGluayAqLwlcCiYjNDM7CWlmIHc2ICE9IDAgZ290byAxZjsJCQkJCVwKJiM0MzsJaWYgcjIgPT0gMCBnb3RvIDFmOwkvKiBub3QgZGVkdWNlZCAqLwkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgbmFycm93aW5nIHNwaWxsIHN0b3JlcyBvbmx5IHRoZSBzb3VyY2UmIzM5O3MgbG93IDMyIGJpdHMsIHNvIHRoZSBzbG90IGlzIHRoZWlyCiYjNDM7ICogemVyby1leHRlbnNpb24uIEEgbGF0ZXIgbmFycm93aW5nIG9mIHRoZSBzb3VyY2UgbXVzdCBzdGlsbCByZWFjaCBhbnl0aGluZwomIzQzOyAqIGZpbGxlZCBiYWNrIG91dCBvZiB0aGF0IHNsb3QuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbmFycm93aW5nX3NwaWxsX2tlZXBzX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXIwICZsdDsmbHQ7PSAzMjsJCQkJCQlcCiYjNDM7CXI2IHw9IHIwOwkJLyogcjYgPSBmdWxsIDY0LWJpdCB1bmtub3duICovCVwKJiM0MzsJKih1MzIgKikocjEwIC0gOCkgPSByNjsJLyogbmFycm93aW5nIHNwaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcCiYjNDM7CXIyID0gKih1MzIgKikocjEwIC0gOCk7CS8qIGZpbGwgaXQgYmFjayAqLwkJXAomIzQzOwlpZiB3NiAhPSAwIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjIgKi8gXAomIzQzOwlpZiByMiA9PSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBzdWItd29yZCBzcGlsbCBpcyBiZWxvdyB0aGUgbG93LTMyIG1vZGVsLCBzbyBubyBsaW5rIGlzIGZvcm1lZCB0aGVyZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9ieXRlX25vX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXIwICZsdDsmbHQ7PSAzMjsJCQkJCQlcCiYjNDM7CXI2IHw9IHIwOwkJCQkJCVwKJiM0MzsJKih1OCAqKShyMTAgLSA4KSA9IHI2OwkvKiAxLWJ5dGUgc3BpbGw6IG5vIGxpbmsgKi8JXAomIzQzOwlyMiA9ICoodTggKikocjEwIC0gOCk7CQkJCQlcCiYjNDM7CWlmIHc2ICE9IDAgZ290byAxZjsJCQkJCVwKJiM0MzsJaWYgcjIgPT0gMCBnb3RvIDFmOwkvKiBub3QgZGVkdWNlZCAqLwkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ0FOX1VTRV9NT1ZTWAomIzQzOwomIzQzOy8qCiYjNDM7ICogQSAzMi1iaXQgc2lnbiBleHRlbnNpb24ga2VlcHMgdGhlIGxvdyAzMiBiaXRzLCBzbyBuYXJyb3dpbmcgdGhlIHNvdXJjZQomIzQzOyAqIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uIHRoZSBzYW1lIHdheSBpdCBkb2VzIGZvciBhIHplcm8gZXh0ZW5zaW9uLiBUaGUgaGlnaAomIzQzOyAqIGhhbGYgZm9sbG93cyB0aGUgc2lnbiwgc28gdGhlIHZhbHVlIHNlZW4gaGVyZSBpcyBuZWdhdGl2ZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgc2V4dF9tb3Zfd2lkZV9zcmModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjcgPSAoczMyKXI2OwkJLyogZm9ybXMgdGhlIGxpbmsgKi8JCVwKJiM0MzsJaWYgdzYgIT0gLTEgZ290byAxZjsJLyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcCiYjNDM7CWlmIHI3ID09IC0xIGdvdG8gMWY7CS8qIHNpZ24tZXh0ZW5kZWQsIG5vdCAweGZmZmZmZmZmICovIFwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiByMCA9IChzMzIpcjAgaXMgaG93IGEgc2lnbi1leHRlbmRlZCBpbnQgcmV0dXJuIGxhbmRzLiBzcmMgYW5kIGRzdCBhcmUgdGhlCiYjNDM7ICogc2FtZSByZWdpc3RlciwgYnV0IHIwIGlzIGFscmVhZHkgbGlua2VkLCBzbyB0aGVyZSBpcyBhIHNldCBmb3IgaXQgdG8gc3RheQomIzQzOyAqIGluIGFuZCB0aGUgbmFycm93aW5nIHN0aWxsIHByb3BhZ2F0ZXMuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHNleHRfc2VsZl9tb3Zfa2VlcHNfbGluayh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwlyNyA9IHI2OwkJLyogcjYsIHI3IGxpbmtlZCAqLwkJXAomIzQzOwlyNyA9IChzMzIpcjc7CQkvKiBzZWxmLW1vdiwga2VlcHMgdGhlIGlkICovCVwKJiM0MzsJaWYgdzYgIT0gLTEgZ290byAxZjsJLyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcCiYjNDM7CWlmIHI3ID09IC0xIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHNhbWUgc2VsZi1tb3Ygb24gYW4gdW5saW5rZWQgcmVnaXN0ZXIgaGFzIG5vdGhpbmcgdG8gbGluayB0bywgc28gaXQKJiM0MzsgKiBtdXN0IG5vdCBtaW50IGFuIGlkIHRoYXQgd291bGQgbGVhdmUgcjYgZGVzY3JpYmluZyBpdHNlbGYuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7LyogYW4gaWQgd291bGQgcHJpbnQgYXMgUjY9c2NhbGFyKGlkPU4ubG8zMnN4LHNtaW49Li4uICovCiYjNDM7X19tc2coJiMzNDsoYmYpIHI2ID0gKHMzMilyNiB7ey4qfX0gUjY9c2NhbGFyKHNtaW49JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHNleHRfc2VsZl9tb3Zfbm9fbGluayh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwlyNiBePSAwOwkJLyogZHJvcCB0aGUgaWQgKi8JCVwKJiM0MzsJcjYgPSAoczMyKXI2OwkJLyogZm9ybXMgbm8gbGluayAqLwkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgZGVsdGEgb24gdGhlIGJyYW5jaCByZWdpc3RlciBpcyBub3QgbW9kZWxsZWQgdG9nZXRoZXIgd2l0aCBhIGxvdy0zMgomIzQzOyAqIGxpbmssIHNvIHRoZSBwcm9wYWdhdGlvbiBpcyBza2lwcGVkIHJhdGhlciB0aGFuIGd1ZXNzZWQgYXQuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZGl2IGJ5IHplcm8mIzM0OykKJiM0MztfX25ha2VkIHZvaWQgc2V4dF9ub19zeW5jX3doZW5fYmFzZV9oYXNfZGVsdGEodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjcgPSAoczMyKXI2OwkJLyogZm9ybXMgdGhlIGxpbmsgKi8JCVwKJiM0MzsJcjggPSByNjsJCQkJCQlcCiYjNDM7CXI4ICYjNDM7PSAzOwkJLyogZGVsdGEgb24gdGhlIGJyYW5jaCByZWcgKi8JXAomIzQzOwlpZiByOCAhPSAzIGdvdG8gMWY7CS8qIG11c3Qgbm90IHByb3BhZ2F0ZSB0byByNyAqLwlcCiYjNDM7CWlmIHI3ID09IDAgZ290byAxZjsJCQkJCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiAuLi4gYW5kIHdpdGggdGhlIGxpbmsgYXMgdGhlIGJyYW5jaCByZWdpc3RlciB0aGUgcHJvcGFnYXRpb24gbXVzdCBub3QgcnVuCiYjNDM7ICogYmFja3dhcmRzOiBhIC0mZ3Q7c3VicmVnIHJlZ2lzdGVyIGtub3dzIG5vdGhpbmcgYWJvdXQgdGhlIGJhc2UmIzM5O3MgaGlnaCBoYWxmLCBzbwomIzQzOyAqIG5hcnJvd2luZyBpdCBtdXN0IGxlYXZlIHRoZSByZXN0IG9mIHRoZSBzZXQgYWxvbmUuIFdlcmUgdGhlIGd1YXJkIG1pc3NpbmcsCiYjNDM7ICogcjggd291bGQgYmUgcmVidWlsdCBhcyByNyAmIzQzOyAzID09IDIsIHRyZWF0aW5nIHI3IGFzIGlmIGl0IHdlcmUgdGhlIGJhc2UuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZGl2IGJ5IHplcm8mIzM0OykKJiM0MztfX25ha2VkIHZvaWQgc2V4dF9ub19zeW5jX2Zyb21fc3VicmVnX2Jhc2Uodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjcgPSAoczMyKXI2OwkJLyogZm9ybXMgdGhlIGxpbmsgKi8JCVwKJiM0MzsJcjggPSByNjsJCQkJCQlcCiYjNDM7CXI4ICYjNDM7PSAzOwkJLyogZGVsdGEgb24gcjggKi8JCVwKJiM0MzsJaWYgcjcgIT0gLTEgZ290byAxZjsJLyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI4ICovCVwKJiM0MzsJaWYgcjggPT0gMiBnb3RvIDFmOwkvKiB0YWtlbiBvbmx5IGlmIHI4IHdyb25nbHkgbmFycm93ZWQgKi8JXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSB0d28ga2luZHMgcmVidWlsZCB0aGUgaGlnaCBoYWxmIGRpZmZlcmVudGx5OiB0aGUgc2FtZSBsb3cgaGFsZiByZWFjaGVzCiYjNDM7ICogLTEgdGhyb3VnaCBhIHNpZ24gZXh0ZW5zaW9uIGFuZCAweGZmZmZmZmZmIHRocm91Z2ggYSB6ZXJvIGV4dGVuc2lvbiwgc28gb25seQomIzQzOyAqIG9uZSBwYXRoIGNsZWFycyB0aGUgZ3VhcmQuIEFzIGFib3ZlIHRoaXMgY2hlY2tzIHRoZSBvdXRjb21lIC0tIHRoZSBkaWZmZXJpbmcKJiM0MzsgKiByYW5nZXMga2VlcCB0aGUgc3RhdGVzIGFwYXJ0IG9uIHRoZWlyIG93bi4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19uYWtlZCB2b2lkIHNleHRfa2luZHNfcmVhY2hfZGlmZmVyZW50X3ZhbHVlcyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwlyNiAmYW1wOz0gMTsJCQkJCQlcCiYjNDM7CWlmIHI2ICZndDs9IDEgZ290byAyZjsJCQkJCVwKJiM0MzsJLyogZXhwbG9yZWQgZmlyc3Q6IHI3IGlzIGEgc2lnbi1leHRlbmRlZCBsaW5rIG9mIHI4ICovCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI4ID0gcjA7CQkJCQkJXAomIzQzOwlyNyA9IChzMzIpcjg7CQkJCQkJXAomIzQzOwlnb3RvIDFmOwkJCQkJCVwKJiM0MzsyOgkJCQkJCQkJXAomIzQzOwkvKiBydW50aW1lIHBhdGg6IHI3IGlzIGEgemVyby1leHRlbmRlZCBsaW5rIG9mIHI4ICovCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI4ID0gcjA7CQkJCQkJXAomIzQzOwl3NyA9IHc4OwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlpZiB3OCAhPSAtMSBnb3RvIDNmOwkJCQkJXAomIzQzOwlpZiByNyA9PSAtMSBnb3RvIDNmOwkvKiBvbmx5IHRoZSBzaWduLWV4dGVuZGVkIHBhdGggKi8gXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzszOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBzaWduLWV4dGVuZGluZyBjb3VudGVycGFydDogdGhlIGZpbGxlZCByZWdpc3RlciBpcyB0aGUgc2lnbiBleHRlbnNpb24gb2YKJiM0MzsgKiB0aGUgc2xvdCYjMzk7cyBsb3cgMzIgYml0cywgc28gYSBuYXJyb3dpbmcgb2YgdGhvc2UgYml0cyBhcnJpdmVzIHNpZ24tZXh0ZW5kZWQuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHNleHRfZmlsbF9uYXJyb3dfZnJvbV93aWRlX3NwaWxsKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyMCAmbHQ7Jmx0Oz0gMzI7CQkJCQkJXAomIzQzOwlyNiB8PSByMDsJCS8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gcjY7CS8qIHNsb3QgbGlua2VkIHRvIHI2ICovCQlcCiYjNDM7CXIyID0gKihzMzIgKikocjEwIC0gOCk7CS8qIG5hcnJvd2luZyBzeCBmaWxsICovCQlcCiYjNDM7CWlmIHc2ICE9IC0xIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjIgKi8gXAomIzQzOwlpZiByMiA9PSAtMSBnb3RvIDFmOwkvKiBzaWduLWV4dGVuZGVkLCBub3QgMHhmZmZmZmZmZiAqLyBcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHNhbWUsIGZvciB0aGUgdHdvIGZpbGwga2luZHMgb2ZmIG9uZSBzbG90LgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztfX25ha2VkIHZvaWQgZmlsbF9raW5kc19yZWFjaF9kaWZmZXJlbnRfdmFsdWVzKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXI2ICZhbXA7PSAxOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI4ID0gcjA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjAgJmx0OyZsdDs9IDMyOwkJCQkJCVwKJiM0MzsJcjggfD0gcjA7CQkJCQkJXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IHI4OwkJCQkJXAomIzQzOwlpZiByNiAmZ3Q7PSAxIGdvdG8gMmY7CQkJCQlcCiYjNDM7CXIyID0gKihzMzIgKikocjEwIC0gOCk7CS8qIHNpZ24tZXh0ZW5kaW5nIGZpbGwgKi8JXAomIzQzOwlnb3RvIDFmOwkJCQkJCVwKJiM0MzsyOgkJCQkJCQkJXAomIzQzOwlyMiA9ICoodTMyICopKHIxMCAtIDgpOwkvKiB6ZXJvLWV4dGVuZGluZyBmaWxsICovCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlpZiB3OCAhPSAtMSBnb3RvIDNmOwkJCQkJXAomIzQzOwlpZiByMiA9PSAtMSBnb3RvIDNmOwkvKiBvbmx5IHRoZSBzaWduLWV4dGVuZGluZyBwYXRoICovIFwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MzoJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmIC8qIENBTl9VU0VfTU9WU1ggKi8KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmMKaW5kZXggMTk1YjI3YTUxMjI0Zi4uM2EwZTY3ZWJiOTYzZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmMKQEAgLTIwMiw2ICYjNDM7MjAyLDU3IEBAIGwwXyU9OgkJCQkJCQlcCiAJOiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSByYW5nZSB0aGF0IGFscmVhZHkgZml0cyB0aGUgZmllbGQgaXMgdW5jaGFuZ2VkIGJ5IHRoZSBzaWduIGV4dGVuc2lvbi4KJiM0MzsgKiBCb3RoIG9mIHRoZXNlIHN0cmFkZGxlIHplcm8sIHNvIHRoZSBoaWdoIGJpdHMgb2Ygc21pbiBhbmQgc21heCBkaWZmZXIgYW5kCiYjNDM7ICogdGhlIHRvcF9zKl92YWx1ZSB0ZXN0IGFsb25lIHdvdWxkIGZhbGwgYmFjayB0byB0aGUgZnVsbCBmaWVsZCByYW5nZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7TU9WNjRTWCwgUzMyLCBuZWdhdGl2ZSByYW5nZSBpcyBwcmVzZXJ2ZWQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19zdWNjZXNzX3VucHJpdiBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgdm9pZCBtb3Y2NHN4X3MzMl9uZWdhdGl2ZV9yYW5nZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwl3MCAmYW1wOz0gMHhmZmY7CQkJCQlcCiYjNDM7CXIwIC09IDB4ZmZmOwkJCQkJXAomIzQzOwkvKiByMCBpcyBbLTQwOTUsIDBdLCBhbHJlYWR5IGEgdmFsaWQgczMyICovCVwKJiM0MzsJcjAgPSAoczMyKXIwOwkJCQkJXAomIzQzOwlpZiByMCBzJmx0OyAtMHhmZmYgZ290byBsMF8lPTsJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzO2wwXyU9OgkJCQkJCQlcCiYjNDM7CS8qIHVucmVhY2hhYmxlIHVubGVzcyB0aGUgcmFuZ2Ugd2FzIHdpZGVuZWQgKi8JXAomIzQzOwlyMCAvPSAwOwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O01PVjY0U1gsIFM4LCBuZWdhdGl2ZSByYW5nZSBpcyBwcmVzZXJ2ZWQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19zdWNjZXNzX3VucHJpdiBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgdm9pZCBtb3Y2NHN4X3M4X25lZ2F0aXZlX3JhbmdlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXcwICZhbXA7PSAweDNmOwkJCQkJXAomIzQzOwlyMCAtPSAweDNmOwkJCQkJXAomIzQzOwkvKiByMCBpcyBbLTYzLCAwXSwgYWxyZWFkeSBhIHZhbGlkIHM4ICovCVwKJiM0MzsJcjAgPSAoczgpcjA7CQkJCQlcCiYjNDM7CWlmIHIwIHMmbHQ7IC0weDNmIGdvdG8gbDBfJT07CQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MztsMF8lPToJCQkJCQkJXAomIzQzOwkvKiB1bnJlYWNoYWJsZSB1bmxlc3MgdGhlIHJhbmdlIHdhcyB3aWRlbmVkICovCVwKJiM0MzsJcjAgLz0gMDsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7TU9WNjRTWCwgUzE2LCBSMTAgU2lnbiBFeHRlbnNpb24mIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IxIHR5cGU9c2NhbGFyIGV4cGVjdGVkPWZwLCBwa3QsIHBrdF9tZXRhLCBtYXBfa2V5LCBtYXBfdmFsdWUsIG1lbSwgcmluZ2J1Zl9tZW0sIGJ1ZiwgdHJ1c3RlZF9wdHJfJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmVnX2VxdWFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmVnX2VxdWFsLmMKaW5kZXggZGMxZDhjMzBmYjBlZS4uMzQyMTRlYzkyNjcwNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yZWdfZXF1YWwuYwpAQCAtMzEsMjMgJiM0MzszMSwyMyBAQCBsMV8lPToJZXhpdDsJCQkJCQlcCiB9CiAKIFNFQygmIzM0O3NvY2tldCYjMzQ7KQotX19kZXNjcmlwdGlvbigmIzM0O2NoZWNrIHcgcmVnIG5vdCBlcXVhbCBpZiByIHJlZyB1cHBlcjMyIGJpdHMgbm90IDAmIzM0OykKLV9fZmFpbHVyZSBfX21zZygmIzM0O1IxICFyZWFkX29rJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2NoZWNrIHcgcmVnIGVxdWFsIGlmIHIgcmVnIHVwcGVyMzIgYml0cyBub3QgMCYjMzQ7KQomIzQzO19fc3VjY2VzcwogX19uYWtlZCB2b2lkIHN1YnJlZ19lcXVhbGl0eV8yKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAogCWNhbGwgJVticGZfa3RpbWVfZ2V0X25zXTsJCQlcCiAJcjIgPSByMDsJCQkJCVwKLQkvKiBVcHBlciA0LWJ5dGVzIG9mIHIyIG1heSBub3QgYmUgMCwgdGh1cyBpbnNuCVwKLQkgKiB3MyA9IHcyIHNob3VsZCBub3QgcHJvcGFnYXRlIHJlZyBpZCwJYW5kCVwKLQkgKiB3MiAmbHQ7IDkgY29tcGFyaXNvbiBzaG91bGQgbm90IHByb3BhZ2F0ZQlcCi0JICogdGhlIHJhbmdlIGZvciByMyBlaXRoZXIuCQkJXAomIzQzOwkvKiBVcHBlciA0LWJ5dGVzIG9mIHIyIG1heSBub3QgYmUgMCwgc28gcjMgZG9lcwlcCiYjNDM7CSAqIG5vdCBlcXVhbCByMi4gSXQgZG9lcyBzaGFyZSByMiYjMzk7cyBsb3cgMzIgYml0cwlcCiYjNDM7CSAqIHRob3VnaCwgc28gdzIgJmx0OyA5IHN0aWxsIGJvdW5kcyByMzogdGhlCVwKJiM0MzsJICogemVyby1leHRlbmRpbmcgbW92IGxlYXZlcyBub3RoaW5nIGFib3ZlIHRoZW0uXAogCSAqLwkJCQkJCVwKIAl3MyA9IHcyOwkJCQkJXAogCWlmIHcyICZsdDsgOSBnb3RvIGwwXyU9OwkJCQlcCiAJZXhpdDsJCQkJCQlcCiBsMF8lPToJaWYgcjMgJmx0OyA5IGdvdG8gbDFfJT07CQkJCVwKLQkvKiByMSByZWFkIGlzIGlsbGVnYWwgYXQgdGhpcyBwb2ludCAqLwkJXAomIzQzOwkvKiB1bnJlYWNoYWJsZSwgc28gdGhlIHIxIHJlYWQgaXMgbmV2ZXIgbWFkZSAqLwlcCiAJcjAgLT0gcjE7CQkJCQlcCiBsMV8lPToJZXhpdDsJCQkJCQlcCiAmIzM0Owk6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuYwppbmRleCAzOWExNzY2ZGFlM2YxLi4xMDQyODU2Yjk3YzI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMKQEAgLTQ2NCw5ICYjNDM7NDY0LDEzIEBAIGwwXyU9OglyMSAmZ3Q7Jmd0Oz0gMTY7CQkJCQlcCiBTRUMoJiMzNDtyYXdfdHAmIzM0OykKIF9fbG9nX2xldmVsKDIpCiBfX3N1Y2Nlc3MKLV9fbXNnKCYjMzQ7ZnAtOD0wbT8/c2NhbGFyKCkmIzM0OykKLV9fbXNnKCYjMzQ7ZnAtMTY9MDBtbT8/c2NhbGFyKCkmIzM0OykKLV9fbXNnKCYjMzQ7ZnAtMjQ9MDBtbT8/P3NjYWxhcigpJiMzNDspCiYjNDM7LyoKJiM0MzsgKiBUaGUgc2xvdCByZWNvcmRzIHdoYXQgdGhlIHN0b3JlIHB1dCB0aGVyZSwgbm90IHRoZSB3aWRlciBzb3VyY2UgaXQgY2FtZQomIzQzOyAqIGZyb20sIHNvIGVhY2ggc2NhbGFyIGlzIGJvdW5kZWQgYnkgdGhlIHNpemUgb2YgaXRzIHNwaWxsLgomIzQzOyAqLwomIzQzO19fbXNnKCYjMzQ7ZnAtOD0wbT8/c2NhbGFyKGlkPXt7WzAtOV0mIzQzO319LmxvMzIsc21pbj0wLHNtYXg9dW1heD0weGZmZmZmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmZmZmZikpJiMzNDspCiYjNDM7X19tc2coJiMzNDtmcC0xNj0wMG1tPz9zY2FsYXIoc21pbj1zbWluMzI9MCxzbWF4PXVtYXg9c21heDMyPXVtYXgzMj0weGZmZmYsdmFyX29mZj0oMHgwOyAweGZmZmYpKSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7ZnAtMjQ9MDBtbT8/P3NjYWxhcihzbWluPXNtaW4zMj0wLHNtYXg9dW1heD1zbWF4MzI9dW1heDMyPTI1NSx2YXJfb2ZmPSgweDA7IDB4ZmYpKSYjMzQ7KQogX19uYWtlZCB2b2lkIHNwaWxsX3N1YnJlZ3NfcHJlc2VydmVfc3RhY2tfemVybyh2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTQ0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQlBGIHZlcmlmaWVyIOKAkyBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwga2V5IGZpbGVzOiBgYnBmX3ZlcmlmaWVyLmhgLCBgdG51bS5oYCwgYGxvZy5jYCwgYHN0YXRlcy5jYCwgYHRudW0uY2AsIGFuZCBgdmVyaWZpZXIuY2Agd2l0aGluIHRoZSBrZXJuZWwgQlBGIGRpcmVjdG9yeSwgcGx1cyBzb21lIHNlbGZ0ZXN0cywgd2hpY2ggaXMgc3RhbmRhcmQgcHJvY2VkdXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZXNlIGFzIHRoZSBndXRzIG9mIHRoZSB2ZXJpZmllciBsb2dpYy4KCkZpcnN0IHRob3VnaHQ6IFJlYWNoYWJpbGl0eSBpcyBrZXkuIFRoZSBCUEYgdmVyaWZpZXIgaXMsIHdpdGhvdXQgYSBkb3VidCwgYSB0YXJnZXQuIEl0JiMzOTtzIHJlYWNoZWQgdGhyb3VnaCBgYnBmKClgIOKAkyB0aGUgcHJpbWFyeSBCUEYgc3lzdGVtIGNhbGwuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyBwcmVzZW50IGluIG1vc3QgbW9kZXJuIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gU3l6a2FsbGVyIGlzIGtub3duIHRvIGdpdmUgdGhpcyBjb2RlIGJhc2UgYSBzZXJpb3VzIHdvcmtvdXQgd2l0aCBmdXp6aW5nIGFzIHdlbGwsIHdoaWNoIG1ha2VzIHRoaXMgZXZlbiBtb3JlIGludGVyZXN0aW5nLgoKU2Vjb25kIHRob3VnaHQ6ICpXb3J0aEZ1enppbmcqIGhhcyB0byBiZSBgdHJ1ZWAgaGVyZS4gTm8gcXVlc3Rpb24uIFRoaXMgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIHRoYXQmIzM5O3MgZGlyZWN0bHkgcmVhY2hhYmxlLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIHN1YnN5c3RlbXMsIEJQRiBpdHNlbGYsIHNvIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgaXMgc2lnbmlmaWNhbnQsIGFuZCB0aGUgdnVsbmVyYWJpbGl0eSByaXNrIGhlcmUgaXMgaGlnaC4gTXkgYW5hbHlzaXMgc3RvcHMgdGhlcmUgdG8gZ2V0IHRvIHRoZSBuZXh0IHN0ZXAuCgpJIG5lZWQgdG8gY29uZmlybSBhbGwgZnVuY3Rpb25zIGFuZCBjb25maWcgb3B0aW9ucyBhcmUgY29uc2lkZXJlZC4gSSBzaG91bGQgdXNlIGBncmVwcGVyYCBvciBvdGhlciB0b29scyB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBCUEYgdmVyaWZpZXIuIEdvdHRhIGRvIHRoZSBiYXNpY3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjk9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMzAtXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMzItXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjMxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhY3R1YWxseSBlbmFibGUgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGNvbXBvbmVudHMg4oCTIHNwZWNpZmljYWxseSwgYHZlcmlmaWVyLmNgLCBgc3RhdGVzLmNgLCBhbmQgYHRudW0uY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgZGlyZWN0b3J5LiBTaW5jZSB0aGVzZSBhcmUgY29yZSBwaWVjZXMsIHRoZXkmIzM5O2xsIGxpa2VseSBiZSB0aWVkIHRvIHNwZWNpZmljIGtlcm5lbCBidWlsZCBvcHRpb25zLiBTbywgSSYjMzk7bGwgc3RhcnQgd2l0aCBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgQ09ORklHX2AgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB0aGVpciBjb21waWxhdGlvbiBhbmQgaW5jbHVzaW9uIGluIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgbmVlZHMgdG8gYmUgc2V0IHRvIGluY2x1ZGUgdGhlc2UgaW4gdGhlIGZpbmFsIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpZmllclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjI0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCUEYgVmVyaWZpZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUga2V5IHRvIGVuYWJsaW5nIHRoZSBlbnRpcmUgQlBGIHZlcmlmaWVyIGluZnJhc3RydWN0dXJlLiBUaGF0IG1lYW5zIHRoZSB3aG9sZSBzdWl0ZSBvZiB0b29scyDigJMgYHZlcmlmaWVyLm9gLCBgdG51bS5vYCwgYGxvZy5vYCwgYW5kIGFsbCB0aGUgcmVzdCDigJMgaGluZ2VzIG9uIHRoYXQgb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgc3RhdGVzLmNgIGFuZCB0aGUgdmVyaWZpZXIgaXRzZWxmLiBJcyBpdCBkaXJlY3RseSBpbmNsdWRlZCB3aXRoaW4gYHZlcmlmaWVyLmNgLCBvciBpcyBpdCBjb21waWxlZCBhcyBhIHNlcGFyYXRlIG9iamVjdCBmaWxlIHRoYXQgdGhlIHZlcmlmaWVyIGxpbmtzIGFnYWluc3Q/IFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgZGV0YWlsIHRvIGZpZ3VyZSBvdXQuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV2ZWFscy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIGNsdWVzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVzXFwuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODg4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipDaGVja2luZyBCUEYgVmVyaWZpZXIgSW5jbHVzaW9uKioKClJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgb3BlcmF0aW9uLCBhbmQgdGhlIGlzc3VlIHNlZW1zIGxpa2UgaXQgbWlnaHQgcmVsYXRlIHRvIGhvdyBzdGF0ZSBpcyBoYW5kbGVkLiBHaXZlbiB0aGF0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIGhvdyB0aGUgdmVyaWZpZXIgY29kZSBpcyBzdHJ1Y3R1cmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gc3RhdGUgbWFuYWdlbWVudC4gVGhhdCBtZWFucywgbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0IG1lIGNoZWNrIHRoZSBpbmNsdXNpb24gZGlyZWN0aXZlcy4gTXkgdGFyZ2V0OiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHN0YXRlcy5jYCAob3Igc29tZSByZWxhdGVkIHN0YXRlLW1hbmFnZW1lbnQgY29tcG9uZW50KSBpcyBpbmNsdWRlZCBkaXJlY3RseSBvciB0aHJvdWdoIHNvbWUgb3RoZXIgaGVhZGVyLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHZlcnkgcXVpY2sgY29uZmlybWF0aW9uIHJlZ2FyZGluZyB0aGUgZGlyZWN0IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSB2ZXJpZmllciBpdHNlbGYgYW5kIGFueSBzdGF0ZS1oYW5kbGluZyBtb2R1bGVzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2hlcmUgdG8gdHJhY2UgdGhlIHByb2dyYW0gdG8gZmluZCBhIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaW5jbHVkZS4qc3RhdGVzXFwuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE0MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgaXMgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgcnVsZXMgZm9yIGNvbXBpbGluZyBCUEYgcHJvZ3JhbXMsIGxpbmtpbmcgdGhlbSwgYW5kIGluY29ycG9yYXRpbmcgdGhlbSBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBzcGVjaWZpYyBjb21waWxlciBmbGFncyB1c2VkIChlc3BlY2lhbGx5IGAtTzJgLCBgLWZQSUNgLCBgLVdhbGxgLCBgLVdlcnJvcmApLCBhbnkgc3BlY2lmaWMgbGlua2VyIHNjcmlwdHMsIGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaW50ZXJhY3RzIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMgZHVyaW5nIHRoZSBidWlsZC4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3Mgb3IgYnVpbGQgdGFyZ2V0cywgYXMgdGhlc2UgY291bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIGhvdyBkaWZmZXJlbnQgQlBGIGZlYXR1cmVzIG9yIGFyY2hpdGVjdHVyZXMgYXJlIGhhbmRsZWQuIEkgYWxzbyBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgQlRGIGdlbmVyYXRpb24uIEZyb20gdGhlcmUgSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGJ1aWxkIHByb2Nlc3MgZG93biB0aGUgcmFiYml0IGhvbGUgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCBvdmVydmlldyBvZiBob3cgZXZlcnl0aGluZyBoYW5ncyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4gIDExOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiAgMTI6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4gIDEzOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cbiAgMTQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xuICAxNTpcdG9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xuICAxNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbiAgMTc6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xuICAxODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG4gIDE5Olx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiAgMjA6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xuICAyMTpcdGVuZGlmXG4gIDIyOlx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBkaXNwYXRjaGVyLm9cbiAgMjM6XHRpZmVxICgkKENPTkZJR19ORVQpLHkpXG4gIDI0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGV2bWFwLm9cbiAgMjU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xuICAyNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xuICAyNzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xuICAyODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4gIDI5Olx0ZW5kaWZcbiAgMzA6XHRpZmVxICgkKENPTkZJR19LRVlTKSx5KVxuICAzMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGtleXMub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDM0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzODpcdGVuZGlmXG4gIDM5Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICA0MDpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDQxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgNDI6XHRlbmRpZlxuICA0MzpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuICA0NDpcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG4gIDQ1Olx0ZW5kaWZcbiAgNDY6XHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuICA0NzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbiAgNDg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAgNDk6XHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbiAgNTA6XHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU4NgoJCQkJCQkJb3V0cHV0OiA3NgoJCQkJCQkJdGhvdWdodHM6IDc2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gbG9va2luZyBhdCBsaW5lIDE0IG9mIHRoZSBtYWtlZmlsZSwgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vYCB0ZWxscyBtZSB0aGF0IG9ubHkgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgY2hhbmdlcyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBJIG5lZWQgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGZpZ3VyZSBvdXQgKndoYXQqIGV4YWN0bHkgaGFzIGNoYW5nZWQuIFRpbWUgdG8gbWV0aWN1bG91c2x5IGRpc3NlY3QgdGhpcyBkaWZmLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbGlzdGluZyB0aGUgbW9kaWZpZWQgYW5kIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zLCBhbmQgYW55IGFzc29jaWF0ZWQgYEZvY3VzU3ltYm9sc2A6CgoxLiAgYHRudW1fc2V4dGAgaW4gYGtlcm5lbC9icGYvdG51bS5jYAoyLiAgYGNoZWNrX3NjYWxhcl9pZHNgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAoc3RhdGljKQozLiAgYHJlZ3NfZXhhY3RgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAoc3RhdGljKQo0LiAgYHJlZ3NhZmVgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAoc3RhdGljIG9yIGV4cG9ydGVkIGludGVybmFsbHk/IE5lZWQgdG8gY2hlY2sgaGVhZGVyIGZpbGVzLikKNS4gIGBfX21hcmtfcmVnX2tub3duYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQo2LiAgYGNsZWFyX3NjYWxhcl9pZGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKNy4gIGBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3ZgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpCjguICBgY29lcmNlX3JlZ190b19zaXplYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQo5LiAgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKMTAuIGBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKMTEuIGBjaGVja19zdGFja19yZWFkYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQoxMi4gYHNleHRfMzJfdG9fNjRgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpCjEzLiBgY29lcmNlX3JlZ190b19zaXplX3N4YCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQoxNC4gYGNoZWNrX21lbV9hY2Nlc3NgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpCjE1LiBgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHNgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpCjE2LiBgY2hlY2tfYWx1X29wYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQoxNy4gYF9fY29sbGVjdF9saW5rZWRfcmVnc2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKMTguIGBjb2xsZWN0X2xpbmtlZF9yZWdzYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQoxOS4gYHJlY29uc3RydWN0X3pleHQzMmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKMjAuIGByZWNvbnN0cnVjdF9zZXh0MzJgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpCjIxLiBgc3luY19saW5rZWRfcmVnc2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKMjIuIGBicGZfY2xlYXJfc2luZ3VsYXJfaWRzYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYAoyMy4gYGJwZl9jaGVja2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AKClJpZ2h0LCBub3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGByZWdzYWZlYCwgYGJwZl9jbGVhcl9zaW5ndWxhcl9pZHNgLCBgc3luY19saW5rZWRfcmVnc2AsIGBjaGVja19hbHVfb3BgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGFuZCBgdG51bV9zZXh0YC4gQXJlIHRoZXkgc3RhdGljIHRvIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMsIG9yIGFyZSB0aGV5IGV4cG9ydGVkPyAgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBkZWZpbml0aW9ucyBhbmQgdGhlbiBjaGVjayBgdm1saW51eGAgdG8gZGV0ZXJtaW5lIHdoaWNoIG9uZXMgYXJlIGdsb2JhbCBzeW1ib2xzLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGludGVyYWN0IGFuZCB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgaW1wYWN0aW5nIHRoZSBCUEYgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2x8c3RydWN0IHRudW0pIChicGZfY2xlYXJfc2luZ3VsYXJfaWRzfHJlZ3NhZmV8c3luY19saW5rZWRfcmVnc3xjaGVja19hbHVfb3B8Y2hlY2tfbWVtX2FjY2Vzc3x0bnVtX3NleHR8YnBmX2NoZWNrKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZmcuYz00NTM9c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTg5LSAqL1xua2VybmVsL2JwZi9jZmcuYzo1OTA6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNTkxLXtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTQxMD1pbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvdG51bS5jPTE5Nj1zdHJ1Y3QgdG51bSB0bnVtX2Nhc3Qoc3RydWN0IHRudW0gYSwgdTggc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL3RudW0uYy0yMDItXG5rZXJuZWwvYnBmL3RudW0uYzoyMDM6c3RydWN0IHRudW0gdG51bV9zZXh0KHN0cnVjdCB0bnVtIGEsIHU4IHNpemUpXG5rZXJuZWwvYnBmL3RudW0uYy0yMDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODM4OD1zdGF0aWMgdTMyIGlkc2V0X2NudF9nZXQoc3RydWN0IGJwZl9pZHNldCAqaWRzZXQsIHUzMiBpZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg0MDMtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg0MDQ6dm9pZCBicGZfY2xlYXJfc2luZ3VsYXJfaWRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg0MDUtXHRcdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDQ3OT1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQ5Mi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDQ5MzppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQ5NC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDkxNj1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMTY6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDE3LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxNDgxPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTYwNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTYwNTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTYwNi1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI1MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLZXJuZWwgQlBGIFN0YXRlIE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgc3RhdGUgb2YgYHJlZ3NhZmVgIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBCUEYgc3RhdGUgbWFuYWdlbWVudCBpcyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWdpc3RlciBzYWZldHkgaXMgbWFuYWdlZCBoZXJlLCBhbmQgaG93IG90aGVyIGZ1bmN0aW9ucyBpbnRlcnBsYXkgd2l0aCB0aGF0LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgcGFydGljdWxhciBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBCUEYgc3RhdGUgaXMgaGFuZGxlZCBhbmQgdG8gc2VlIGlmIEkgY2FuIHNwb3QgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIHJlcXVpcmUgYSBkZWVwIGRpdmUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3NhZmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmM9Njc5PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzQ5LSAqIEluIHRoZSBmb3JtZXIgY2FzZSwgcHJlY2lzZSBtYXJraW5ncyBpbiBjdXJyZW50IHN0YXRlIGFyZSBjb21wbGV0ZWx5XG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjc1MDogKiBpZ25vcmVkIGJ5IHN0YXRlIGNvbXBhcmlzb24gY29kZSAoc2VlIHJlZ3NhZmUoKSBmb3IgZGV0YWlscykuIE9ubHlcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzUxLSAqIGNoZWNrcG9pbnRlZCAoXCYjMzQ7b2xkXCYjMzQ7KSBzdGF0ZSBwcmVjaXNlIG1hcmtpbmdzIGFyZSBpbXBvcnRhbnQsIGFuZCBpZiBvbGRcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzUyOiAqIHN0YXRlJiMzOTtzIHJlZ2lzdGVyL3Nsb3QgaXMgcHJlY2lzZSwgcmVnc2FmZSgpIGFzc3VtZXMgY3VycmVudCBzdGF0ZSYjMzk7c1xua2VybmVsL2JwZi9iYWNrdHJhY2suYy03NTMtICogcmVnaXN0ZXIvc2xvdCBhcyBwcmVjaXNlIGFuZCBjaGVja3MgdmFsdWUgcmFuZ2VzIGV4YWN0bHkgYW5kIHByZWNpc2VseS4gSWZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ4ND1lbnVtIGV4YWN0X2xldmVsIHtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5MC0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDkxOnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5Mi1cdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY4NT1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03MzItXHRcdCAqIENvbnN0cnVjdCBhIGZha2UgcmVnaXN0ZXIgZm9yIHN1Y2ggc3RhY2sgYW5kIGNhbGxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzMzOlx0XHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxua2VybmVsL2JwZi9zdGF0ZXMuYy03MzQtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzM4LVx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjczOTpcdFx0XHRcdGlmICghcmVnc2FmZShlbnYsIG9sZF9yZWcsIGN1cl9yZWcsIGlkbWFwLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc0MC1cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzc1LVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo3NzY6XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc3Ny1cdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04MzA9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDQtXHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlc3RhY2tfYXJnX3JlZ3NbaV0gOiBcdTAwMjZub3RfaW5pdDtcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODQ1Olx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDYtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9OTI4PXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQxLVx0XHRpZiAoKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgbGl2ZV9yZWdzKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQyOlx0XHQgICAgIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlcmVnc1tpXSwgXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbaV0sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0My1cdFx0XHQgICAgIFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIENyb3NzLU1vZHVsZSBEZXBlbmRlbmNpZXM6IGBzdGF0ZXMuY2AgYW5kIGB2ZXJpZmllci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gZGVwZW5kZW5jaWVzIGJldHdlZW4gYHN0YXRlcy5jYCBhbmQgYHZlcmlmaWVyLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgd2l0aGluIGBzdGF0ZXMuY2AgYXJlIGVpdGhlciBjYWxsZWQgZGlyZWN0bHkgYnkgYHZlcmlmaWVyLmNgLCBvciBhcmUgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzLCB3aGljaCBpbiB0aGlzIGNvbnRleHQsIGNvdWxkIGluY2x1ZGUgYHZlcmlmaWVyLmNgLiBUaGlzIGlzIGEgY2xhc3NpYyBkZXBlbmRlbmN5IGFuYWx5c2lzIHByb2JsZW0uIEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGNyb3NzLW1vZHVsZSBmdW5jdGlvbiBjYWxscywgbGlrZWx5IHVzaW5nIGEgdG9vbCBpZiBhdmFpbGFibGUsIG9yIG1hbnVhbGx5IHNjYW5uaW5nIHRoZSBjb2RlIGlmIG5vIHRvb2wgaXMgcHJlc2VudC4gVGhlIGV4cG9ydCBwYXJ0IEkmIzM5O2xsIGxpa2VseSBjaGVjayB0aHJvdWdoIHRoZSBoZWFkZXIgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGhvdyBjbG9zZWx5IGNvdXBsZWQgdGhlc2UgdHdvIGZpbGVzIGFyZS4gQXJlIHRoZXJlIGNsZWFyIGludGVyZmFjZXM/IEFyZSB3ZSBkZWFsaW5nIHdpdGggdGlnaHQsIGNvbXBsZXggcmVsYXRpb25zaGlwcywgb3IgbW9yZSBtb2R1bGFyIGludGVyYWN0aW9ucz8gS25vd2luZyB0aGlzIHdpbGwgaW5mb3JtIGFueSBwb3RlbnRpYWwgcmVmYWN0b3Jpbmcgb3IgYnVnIGZpeGluZyBlZmZvcnRzIEkgbWlnaHQgdW5kZXJ0YWtlIGxhdGVyIG9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZmlsZXMgZml0IGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XmJvb2wgfF52b2lkICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz0yNTk9c3RhdGljIGJvb2wgaW5jb21wbGV0ZV9yZWFkX21hcmtzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNzItXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjI3MzppbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNzQte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTE5Nz1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMjEtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMjI6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODY5CgkJCQkJCQlvdXRwdXQ6IDIzOAoJCQkJCQkJdGhvdWdodHM6IDEzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAg4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja2luZywgYW5kIGl0IGNhbGxzIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgYHJlZ3NhZmVgLCBgY2hlY2tfc2NhbGFyX2lkc2AsIGFuZCBgcmVnc19leGFjdGAuIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBlQlBGIHZlcmlmaWVyIGNoYW5nZXMgYW5kIGRldGVybWluZSB3aGF0IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLgoKRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBJIHNlZSBgYnBmX2NsZWFyX3Npbmd1bGFyX2lkc2AgaXMgZ2xvYmFsbHkgYWNjZXNzaWJsZSAoZXhwb3J0ZWQgdGhyb3VnaCBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGApIGFuZCBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGl0c2VsZi4gIEFsc28sIGB0bnVtX3NleHRgIGluIGBrZXJuZWwvYnBmL3RudW0uY2AgaXMgZXhwb3J0ZWQgKGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L3RudW0uaGApLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyBleHBvcnRlZCBmcm9tIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gIFRoZXJlIGFyZSBhbHNvIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHZlcmlmaWVyLmNgIGxpa2UgYGNoZWNrX2FsdV9vcGAsIGBjaGVja19tZW1fYWNjZXNzYCwgYHN5bmNfbGlua2VkX3JlZ3NgLCBgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHNgLCBgY2hlY2tfc3RhY2tfcmVhZGAsIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgLCBgcmVjb25zdHJ1Y3RfemV4dDMyYCwgYW5kIGByZWNvbnN0cnVjdF9zZXh0MzJgLgoKTm93LCBhY2NvcmRpbmcgdG8gU3l6a2FsbGVyIGd1aWRlbGluZXMsIEkgbmVlZCB0byBjb25zaWRlciB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSAqcmlnaHQqIG9uZXMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiAgSSBuZWVkIHRvIGF2b2lkIGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCBpbnN0ZWFkIGZvY3VzIG9uIHNwZWNpZmljIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4gIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSB0cmlja3ksIGJ1dCBJIG5lZWQgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYyBjYWxsZXJzIHRoYXQgZXhlcmNpc2UgdGhvc2UgY2hhbmdlcy4gIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZlYXR1cmUgbG9naWMuCgpTbywgbGV0JiMzOTtzIGxpc3QgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBtb2RpZmllZCBvciByZWxldmFudCBpbiBga2VybmVsL2JwZi9gOiAgSGVyZeKAmXMgd2hhdCBJJiMzOTt2ZSBpZGVudGlmaWVkIGFzIGNyaXRpY2FsOgoKKiAgIGBzeW5jX2xpbmtlZF9yZWdzYAoqICAgYGNoZWNrX2FsdV9vcGAKKiAgIGBjaGVja19tZW1fYWNjZXNzYAoqICAgYGFkanVzdF9yZWdfbWluX21heF92YWxzYAoqICAgYGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmYAoqICAgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAKKiAgIGBjb2VyY2VfcmVnX3RvX3NpemVfc3hgCiogICBgdG51bV9zZXh0YAoqICAgYGJwZl9jbGVhcl9zaW5ndWxhcl9pZHNgCiogICBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgCiogICBgcmVnc2FmZWAKKiAgIGBicGZfY2hlY2tgCgpJJiMzOTttIGFsc28gZG91YmxlLWNoZWNraW5nIGFsbCB0aGUgZmlsZXMgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byBnZXQgYSBmdWxsIHBpY3R1cmU6CgoxLiAgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgOiAgVGhlcmUgYXJlIGNoYW5nZXMgdG8gdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuCjIuICBgaW5jbHVkZS9saW51eC90bnVtLmhgOiAgRGVjbGFyZXMgYHRudW1fc2V4dGAuCjMuICBga2VybmVsL2JwZi9sb2cuY2A6ICBGb3JtYXR0aW5nIGZvciBgLmxvMzJgIGFuZCBgLmxvMzJzeGAuCjQuICBga2VybmVsL2JwZi9zdGF0ZXMuY2A6ICBUaGlzIGFmZmVjdHMgYGNoZWNrX3NjYWxhcl9pZHNgLCBgcmVnc19leGFjdGAsIGByZWdzYWZlYC4KNS4gIGBrZXJuZWwvYnBmL3RudW0uY2A6ICBUaGlzIGltcGxlbWVudHMgYHRudW1fc2V4dGAuCjYuICBga2VybmVsL2JwZi92ZXJpZmllci5jYDogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYnVsayBvZiB0aGUgY2hhbmdlcyBpbmNsdWRpbmcgYF9fbWFya19yZWdfa25vd25gLCBgY2xlYXJfc2NhbGFyX2lkYCwgYGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdmAsIGBjb2VyY2VfcmVnX3RvX3NpemVgLCBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgYGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmYCwgYGNoZWNrX3N0YWNrX3JlYWRgLCBgc2V4dF8zMl90b182NGAsIGBjb2VyY2VfcmVnX3RvX3NpemVfc3hgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGBhZGp1c3RfcmVnX21pbl9tYXhfdmFsc2AsIGBjaGVja19hbHVfb3BgLCBgX19jb2xsZWN0X2xpbmtlZF9yZWdzYCwgYGNvbGxlY3RfbGlua2VkX3JlZ3NgLCBgcmVjb25zdHJ1Y3RfemV4dDMyYCwgYHJlY29uc3RydWN0X3NleHQzMmAsIGBzeW5jX2xpbmtlZF9yZWdzYCwgYW5kIGBicGZfY2xlYXJfc2luZ3VsYXJfaWRzYC4KNy4gIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYDogIFNlbGYgdGVzdCB1cGRhdGVzIGFuZCBuZXcgdGVzdHMgYXJlIGFkZGVkLgoKTm93LCBmb3IgY29uZmlnIHJlcXVpcmVtZW50cywgSSBzZWUgdGhhdCBgQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZywgYXMgaXQgZW5hYmxlcyB0aGUgZUJQRiB2ZXJpZmllciBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbC4KClRvIHN1bW1hcml6ZSwgSSYjMzk7dmUgZ290IHRoaXMgb3JnYW5pemVkIGludG8gYSBjbGVhciBzdHJ1Y3R1cmU6CgoqICAgYFdvcnRoRnV6emluZ2A6ICBUcnVlCiogICBgRW5hYmxlQ29uZmlnc2A6ICBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3N5bmNfbGlua2VkX3JlZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfYWx1X29wJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NvZXJjZV9yZWdfdG9fc2l6ZV9zeCYjMzQ7LAogICAgJiMzNDt0bnVtX3NleHQmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDticGZfY2xlYXJfc2luZ3VsYXJfaWRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciBzY2FsYXIgcmVnaXN0ZXIgbGlua2FnZSwgaW50cm9kdWNpbmcgc3VicmVnIHRyYWNraW5nIChTVUJSRUdfWkVYVCwgU1VCUkVHX1NFWFQpIGZvciAzMi1iaXQgbmFycm93aW5nIG9wZXJhdGlvbnMsIHNpZ24tZXh0ZW5zaW9uIHRudW0gaGVscGVycyAodG51bV9zZXh0KSwgc3RhY2sgc3BpbGwvZmlsbCBzY2FsYXIgdHJhY2tpbmcsIGFuZCB1cGRhdGluZyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgKHJlZ3NhZmUpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyBhbmQgYm91bmRzIHRyYWNraW5nIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3N5bmNfbGlua2VkX3JlZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfYWx1X29wJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NvZXJjZV9yZWdfdG9fc2l6ZV9zeCYjMzQ7LAogICAgJiMzNDt0bnVtX3NleHQmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDticGZfY2xlYXJfc2luZ3VsYXJfaWRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciBzY2FsYXIgcmVnaXN0ZXIgbGlua2FnZSwgaW50cm9kdWNpbmcgc3VicmVnIHRyYWNraW5nIChTVUJSRUdfWkVYVCwgU1VCUkVHX1NFWFQpIGZvciAzMi1iaXQgbmFycm93aW5nIG9wZXJhdGlvbnMsIHNpZ24tZXh0ZW5zaW9uIHRudW0gaGVscGVycyAodG51bV9zZXh0KSwgc3RhY2sgc3BpbGwvZmlsbCBzY2FsYXIgdHJhY2tpbmcsIGFuZCB1cGRhdGluZyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgKHJlZ3NhZmUpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyBhbmQgYm91bmRzIHRyYWNraW5nIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGFuZCBlbmhhbmNlcyByZWdpc3RlciByZWxhdGlvbnNoaXAgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHNjYWxhciBzdWJyZWdpc3RlciByZWxhdGlvbnMgbGlrZSAzMi1iaXQgemVyby0gYW5kIHNpZ24tZXh0ZW5zaW9ucywgbmFycm93IHN0YWNrIHNwaWxscy9maWxscywgYW5kIG1vdmluZyBhZGQtY29uc3QgZmxhZ3MgZnJvbSByZWdpc3RlciBJRHMgaW50byBkZWRpY2F0ZWQgc3RydWN0IGZpZWxkcykuXG5cbi0gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlIChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhlIEJQRiB2ZXJpZmllciBkdXJpbmcgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuXG4tIFJlZ2lzdGVyIHN0YXRlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkICh2aWEgbWVtc2V0IGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSBvciBleHBsaWNpdCBhc3NpZ25tZW50IGluIF9fbWFya19yZWdfa25vd24gYW5kIGNsZWFyX3NjYWxhcl9pZCksIHNvIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkLlxuLSBQdXJlIGFyaXRobWV0aWMgaGVscGVycyBsaWtlIHRudW1fc2V4dCBvcGVyYXRlIGVudGlyZWx5IG9uIHBhc3MtYnktdmFsdWUgc3RydWN0cyB3aXRoIGluaXRpYWxpemVkIGFyZ3VtZW50cy5cbi0gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHJhbmdlIHRyYWNraW5nIG9yIHJlZ2lzdGVyIHN5bmNocm9uaXphdGlvbiBjb3VsZCBsZWFkIHRvIHVuc291bmQgdmVyaWZpZXIgbG9naWMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBhbmQgS0FTQU4sIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlzayBpbnRyb2R1Y2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY5NWExM2Y1NmQ4NjJmZGI1NzhlZmExMGQwYzI4ZmMzZjE2ZmVkNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE4OjMwOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggOTcyN2RmNWFmODNhYi4uOTIwYzk0OTBlY2M4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC0zNSw2ICYjNDM7MzUsMjcgQEAgZW51bSBicGZfaXRlcl9zdGF0ZSB7CiAJQlBGX0lURVJfU1RBVEVfRFJBSU5FRCwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFJlY29yZHMgdGhhdCBhIHJlZ2lzdGVyIGlzIChiYXNlICYjNDM7IC0mZ3Q7ZGVsdGEpIHdpdGhpbiBpdHMgLSZndDtpZCBzZXQ6CiYjNDM7ICogcjEgJiM0Mzs9IDEwOyAgIHIxIGdldHMgQUREX0NPTlNUXzY0IGRlbHRhCiYjNDM7ICogdzMgJiM0Mzs9IDEwOyAgIHIzIGdldHMgQUREX0NPTlNUXzMyIGRlbHRhCiYjNDM7ICovCiYjNDM7ZW51bSBicGZfYWRkX2NvbnN0IHsKJiM0MzsJQUREX0NPTlNUX05PTkUgPSAwLAomIzQzOwlBRERfQ09OU1RfMzIsCQkvKiBkZWx0YSB3YXMgYWRkZWQgd2l0aCBhIDMyLWJpdCBBTFUgb3AgKi8KJiM0MzsJQUREX0NPTlNUXzY0LAkJLyogLi4uIHdpdGggYSA2NC1iaXQgQUxVIG9wICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlY29yZHMgdGhhdCBhIHJlZ2lzdGVyIHNoYXJlcyBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSBvZiBpdHMKJiM0MzsgKiAtJmd0O2lkIHNldCwgYW5kIGhvdyBpdHMgaGlnaCBiaXRzIGZvbGxvdyBmcm9tIHRoZW0uCiYjNDM7ICovCiYjNDM7ZW51bSBicGZfc3VicmVnIHsKJiM0MzsJU1VCUkVHX05PTkUgPSAwLAomIzQzOwlTVUJSRUdfWkVYVCwJCS8qIGhpZ2ggYml0cyBhcmUgemVybyAoMzItYml0IHplcm8tZXh0ZW5kaW5nIG1vdikgKi8KJiM0MzsJU1VCUkVHX1NFWFQsCQkvKiBoaWdoIGJpdHMgcmVwZWF0IGJpdCAzMSAoMzItYml0IHNpZ24tZXh0ZW5kaW5nIG1vdikgKi8KJiM0Mzt9OwomIzQzOwogc3RydWN0IGJwZl9yZWdfc3RhdGUgewogCS8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovCiAJZW51bSBicGZfcmVnX3R5cGUgdHlwZTsKQEAgLTEzNiwxNiAmIzQzOzE1Nyw5IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHsKIAkgKiB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIGJwZl9pdGVyLgogCSAqLwogCS8qCi0JICogVXBwZXIgYml0IG9mIElEIGlzIHVzZWQgdG8gcmVtZW1iZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gJiMzNDtsaW5rZWQmIzM0OwotCSAqIHJlZ2lzdGVycy4gRXhhbXBsZToKJiM0MzsJICogUmVnaXN0ZXJzIHNoYXJpbmcgYW4gLSZndDtpZCBhcmUgJiMzNDtsaW5rZWQmIzM0OzoKIAkgKiByMSA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMS0mZ3Q7aWQgPT0gcjItJmd0O2lkID09IE4KLQkgKiByMSAmIzQzOz0gMTA7ICAgcjEtJmd0O2lkID09IE4gfCBCUEZfQUREX0NPTlNUIGFuZCByMS0mZ3Q7ZGVsdGEgPT0gMTAKLQkgKiByMyA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMy0mZ3Q7aWQgPT0gcjItJmd0O2lkID09IE4KLQkgKiB3MyAmIzQzOz0gMTA7ICAgcjMtJmd0O2lkID09IE4gfCBCUEZfQUREX0NPTlNUMzIgYW5kIHIzLSZndDtkZWx0YSA9PSAxMAogCSAqLwotI2RlZmluZSBCUEZfQUREX0NPTlNUNjQgKDFVICZsdDsmbHQ7IDMxKQotI2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVICZsdDsmbHQ7IDMwKQotI2RlZmluZSBCUEZfQUREX0NPTlNUIChCUEZfQUREX0NPTlNUNjQgfCBCUEZfQUREX0NPTlNUMzIpCiAJdTMyIGlkOwogCS8qCiAJICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS4KQEAgLTE2NCw2ICYjNDM7MTc4LDEyIEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHsKIAl1MzIgZnJhbWVubzsKIAkvKiBpZiAoIXByZWNpc2UgJmFtcDsmYW1wOyBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24mIzM5O3QgYWZmZWN0IHNhZmV0eSAqLwogCWJvb2wgcHJlY2lzZTsKJiM0MzsJLyoKJiM0MzsJICogSG93IHRoaXMgcmVnaXN0ZXIgcmVsYXRlcyB0byB0aGUgb3RoZXJzIHNoYXJpbmcgaXRzIC0mZ3Q7aWQuCiYjNDM7CSAqIE5vbi16ZXJvIG9ubHkgaWYgLSZndDtpZCBpcy4KJiM0MzsJICovCiYjNDM7CWVudW0gYnBmX2FkZF9jb25zdCBhZGRfY29uc3Q6MjsKJiM0MzsJZW51bSBicGZfc3VicmVnIHN1YnJlZzoyOwogfTsKIAogc3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG51bS5oIGIvaW5jbHVkZS9saW51eC90bnVtLmgKaW5kZXggY2EyY2ZlYzhkZTA4YS4uODY2ODAzZGU1ODQxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90bnVtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC90bnVtLmgKQEAgLTYzLDYgJiM0Mzs2Myw5IEBAIHN0cnVjdCB0bnVtIHRudW1fdW5pb24oc3RydWN0IHRudW0gdDEsIHN0cnVjdCB0bnVtIHQyKTsKIC8qIFJldHVybiBAYSB3aXRoIGFsbCBidXQgdGhlIGxvd2VzdCBAc2l6ZSBieXRlcyBjbGVhcmVkICovCiBzdHJ1Y3QgdG51bSB0bnVtX2Nhc3Qoc3RydWN0IHRudW0gYSwgdTggc2l6ZSk7CiAKJiM0MzsvKiBSZXR1cm4gdGhlIGxvd2VzdCBAc2l6ZSBieXRlcyBvZiBAYSBzaWduLWV4dGVuZGVkIHRvIDY0IGJpdHMgKi8KJiM0MztzdHJ1Y3QgdG51bSB0bnVtX3NleHQoc3RydWN0IHRudW0gYSwgdTggc2l6ZSk7CiYjNDM7CiAvKiBTd2FwIHRoZSBieXRlcyBvZiBhIHRudW0gKi8KIHN0cnVjdCB0bnVtIHRudW1fYnN3YXAxNihzdHJ1Y3QgdG51bSBhKTsKIHN0cnVjdCB0bnVtIHRudW1fYnN3YXAzMihzdHJ1Y3QgdG51bSBhKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbG9nLmMgYi9rZXJuZWwvYnBmL2xvZy5jCmluZGV4IGZiMDMyZGZkYzBkZWUuLmI2N2JiZDRkNTdmNDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvbG9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9sb2cuYwpAQCAtNjUxLDkgJiM0Mzs2NTEsMTMgQEAgc3RhdGljIHZvaWQgcHJpbnRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXZlcmJvc2UoZW52LCAmIzM0OyVzJiMzNDssIGJ0Zl90eXBlX25hbWUocmVnLSZndDtidGYsIHJlZy0mZ3Q7YnRmX2lkKSk7CiAJdmVyYm9zZShlbnYsICYjMzQ7KCYjMzQ7KTsKIAlpZiAocmVnLSZndDtpZCkKLQkJdmVyYm9zZV9hKCYjMzQ7aWQ9JWQmIzM0OywgcmVnLSZndDtpZCAmYW1wOyB+QlBGX0FERF9DT05TVCk7Ci0JaWYgKHJlZy0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkKJiM0MzsJCXZlcmJvc2VfYSgmIzM0O2lkPSVkJiMzNDssIHJlZy0mZ3Q7aWQpOwomIzQzOwlpZiAocmVnLSZndDthZGRfY29uc3QpCiAJCXZlcmJvc2UoZW52LCAmIzM0OyUmIzQzO2QmIzM0OywgcmVnLSZndDtkZWx0YSk7CiYjNDM7CWlmIChyZWctJmd0O3N1YnJlZyA9PSBTVUJSRUdfWkVYVCkKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0Oy5sbzMyJiMzNDspOwomIzQzOwllbHNlIGlmIChyZWctJmd0O3N1YnJlZyA9PSBTVUJSRUdfU0VYVCkKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0Oy5sbzMyc3gmIzM0Oyk7CiAJaWYgKHJlZy0mZ3Q7cGFyZW50X2lkKQogCQl2ZXJib3NlX2EoJiMzNDtwYXJlbnRfaWQ9JWQmIzM0OywgcmVnLSZndDtwYXJlbnRfaWQpOwogCWlmICh0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuYwppbmRleCA2NmZiMTFiNmM2YTc2Li4xNjE4Yzc3MTA1YWIwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKQEAgLTM2OSwxMyAmIzQzOzM2OSw2IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKICAqIGFuZCByNy5pZD0wIChib3RoIGluZGVwZW5kZW50KSwgd2l0aG91dCB0ZW1wIElEcyBib3RoIHdvdWxkIG1hcCBvbGRfaWQ9WAogICogdG8gY3VyX2lkPTAgYW5kIHBhc3MuIFdpdGggdGVtcCBJRHM6IHI2IG1hcHMgWC0mZ3Q7dGVtcDEsIHI3IHRyaWVzIHRvIG1hcAogICogWC0mZ3Q7dGVtcDIsIGJ1dCBYIGlzIGFscmVhZHkgbWFwcGVkIHRvIHRlbXAxLCBzbyB0aGUgY2hlY2sgZmFpbHMgY29ycmVjdGx5LgotICoKLSAqIFdoZW4gb2xkX2lkIGhhcyBCUEZfQUREX0NPTlNUIHNldCwgdGhlIGNvbXBvdW5kIGlkIChiYXNlIHwgZmxhZykgYW5kIHRoZQotICogYmFzZSBpZCAoZmxhZyBzdHJpcHBlZCkgbXVzdCBib3RoIG1hcCBjb25zaXN0ZW50bHkuIEV4YW1wbGU6IG9sZCBoYXMKLSAqIHIyLmlkPUEsIHIzLmlkPUF8ZmxhZyAocjMgPSByMiAmIzQzOyBkZWx0YSksIGN1ciBoYXMgcjIuaWQ9QiwgcjMuaWQ9Q3xmbGFnCi0gKiAocjMgZGVyaXZlZCBmcm9tIHVucmVsYXRlZCByNCkuIFdpdGhvdXQgdGhlIGJhc2UgY2hlY2ssIGlkbWFwIGdldHMgdHdvCi0gKiBpbmRlcGVuZGVudCBlbnRyaWVzIEEtJmd0O0IgYW5kIEF8ZmxhZy0mZ3Q7Q3xmbGFnLCBtaXNzaW5nIHRoYXQgQS0mZ3Q7QyBjb25mbGljdHMKLSAqIHdpdGggQS0mZ3Q7Qi4gVGhlIGJhc2UgSUQgY3Jvc3MtY2hlY2sgY2F0Y2hlcyB0aGlzLgogICovCiBzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQogewpAQCAtMzg0LDE1ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfc2NhbGFyX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAogCWN1cl9pZCA9IGN1cl9pZCA/IGN1cl9pZCA6ICYjNDM7JiM0MztpZG1hcC0mZ3Q7dG1wX2lkX2dlbjsKIAotCWlmICghY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCkpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAob2xkX2lkICZhbXA7IEJQRl9BRERfQ09OU1QpIHsKLQkJb2xkX2lkICZhbXA7PSB+QlBGX0FERF9DT05TVDsKLQkJY3VyX2lkICZhbXA7PSB+QlBGX0FERF9DT05TVDsKLQkJaWYgKCFjaGVja19pZHMob2xkX2lkLCBjdXJfaWQsIGlkbWFwKSkKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0JcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBjaGVja19pZHMob2xkX2lkLCBjdXJfaWQsIGlkbWFwKTsKIH0KIAogc3RhdGljIHZvaWQgX19jbGVhbl9mdW5jX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCkBAIC00OTAsNiAmIzQzOzQ3NSw4IEBAIHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCSAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIHsKIAlyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgcm9sZC0mZ3Q7YWRkX2NvbnN0ID09IHJjdXItJmd0O2FkZF9jb25zdCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByb2xkLSZndDtzdWJyZWcgPT0gcmN1ci0mZ3Q7c3VicmVnICZhbXA7JmFtcDsKIAkgICAgICAgY2hlY2tfaWRzKHJvbGQtJmd0O2lkLCByY3VyLSZndDtpZCwgaWRtYXApICZhbXA7JmFtcDsKIAkgICAgICAgY2hlY2tfaWRzKHJvbGQtJmd0O3BhcmVudF9pZCwgcmN1ci0mZ3Q7cGFyZW50X2lkLCBpZG1hcCk7CiB9CkBAIC01NDIsOCAmIzQzOzUyOSw3IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCQkvKiBleHBsb3JlX2FsdV9saW1pdHMgZGlzYWJsZXMgdG51bV9pbigpIGFuZCByYW5nZV93aXRoaW4oKQogCQkJICogbG9naWMgYW5kIHJlcXVpcmVzIGV2ZXJ5dGhpbmcgdG8gYmUgc3RyaWN0CiAJCQkgKi8KLQkJCXJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCAmYW1wOyZhbXA7Ci0JCQkgICAgICAgY2hlY2tfc2NhbGFyX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKTsKJiM0MzsJCQlyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7CiAJCX0KIAkJaWYgKCFyb2xkLSZndDtwcmVjaXNlICZhbXA7JmFtcDsgZXhhY3QgPT0gTk9UX0VYQUNUKQogCQkJcmV0dXJuIHRydWU7CkBAIC01NTEsNyAmIzQzOzUzNyw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCSAqIExpbmtlZCByZWdpc3RlciB0cmFja2luZyB1c2VzIHJvbGQtJmd0O2lkIHRvIGRldGVjdCByZWxhdGlvbnNoaXBzLgogCQkgKiBXaGVuIHJvbGQtJmd0O2lkID09IDAsIHRoZSByZWdpc3RlciBpcyBpbmRlcGVuZGVudCBhbmQgYW55IGxpbmtpbmcKIAkJICogaW4gcmN1ciBvbmx5IGFkZHMgY29uc3RyYWludHMuIFdoZW4gcm9sZC0mZ3Q7aWQgIT0gMCwgd2UgbXVzdCB2ZXJpZnkKLQkJICogaWQgbWFwcGluZyBhbmQgKGZvciBCUEZfQUREX0NPTlNUKSBvZmZzZXQgY29uc2lzdGVuY3kuCiYjNDM7CQkgKiBpZCBtYXBwaW5nIGFuZCB0aGF0IHRoZSBsaW5rIGtpbmRzIGFncmVlLCBhbG9uZyB3aXRoIGFueSBkZWx0YQomIzQzOwkJICogdGhleSBjYXJyeS4KIAkJICoKIAkJICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7CiAJCSAqIHwgICAgICAgICAgICAgICAgICB8IHJvbGQtJmd0O2lkICB8IHJvbGQgJiM0MzsgQUREX0NPTlNUIHwgcm9sZC0mZ3Q7aWQgPT0gMCB8CkBAIC01ODcsMTcgJiM0Mzs1NzQsMTYgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCwKIAkJICovCiAKIAkJLyoKLQkJICogQUREX0NPTlNUIGZsYWdzIG11c3QgbWF0Y2ggZXhhY3RseTogQlBGX0FERF9DT05TVDMyIGFuZAotCQkgKiBCUEZfQUREX0NPTlNUNjQgaGF2ZSBkaWZmZXJlbnQgbGlua2luZyBzZW1hbnRpY3MgaW4KLQkJICogc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsIGFsdTY0IGRvZXMgbm90KSwKLQkJICogc28gcHJ1bmluZyBhY3Jvc3MgZGlmZmVyZW50IGZsYWcgdHlwZXMgaXMgdW5zYWZlLgomIzQzOwkJICogVGhlIGxpbmsga2luZHMgbXVzdCBtYXRjaDogYWx1MzIgYW5kIGFsdTY0IGFkZHMgaGF2ZSBkaWZmZXJlbnQKJiM0MzsJCSAqIGxpbmtpbmcgc2VtYW50aWNzIGluIHN5bmNfbGlua2VkX3JlZ3MoKSAoYWx1MzIgemVyby1leHRlbmRzLAomIzQzOwkJICogYWx1NjQgZG9lcyBub3QpLCBzbyBwcnVuaW5nIGFjcm9zcyB0aGVtIGlzIHVuc2FmZS4KIAkJICovCi0JCWlmIChyb2xkLSZndDtpZCAmYW1wOyZhbXA7Ci0JCSAgICAocm9sZC0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkgIT0gKHJjdXItJmd0O2lkICZhbXA7IEJQRl9BRERfQ09OU1QpKQomIzQzOwkJaWYgKHJvbGQtJmd0O2lkICZhbXA7JmFtcDsgKHJvbGQtJmd0O2FkZF9jb25zdCAhPSByY3VyLSZndDthZGRfY29uc3QgfHwKJiM0MzsJCQkJIHJvbGQtJmd0O3N1YnJlZyAhPSByY3VyLSZndDtzdWJyZWcpKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJCS8qIEJvdGggaGF2ZSBvZmZzZXQgbGlua2FnZTogb2Zmc2V0cyBtdXN0IG1hdGNoICovCi0JCWlmICgocm9sZC0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkgJmFtcDsmYW1wOyByb2xkLSZndDtkZWx0YSAhPSByY3VyLSZndDtkZWx0YSkKJiM0MzsJCWlmIChyb2xkLSZndDthZGRfY29uc3QgJmFtcDsmYW1wOyByb2xkLSZndDtkZWx0YSAhPSByY3VyLSZndDtkZWx0YSkKIAkJCXJldHVybiBmYWxzZTsKIAogCQlpZiAoIWNoZWNrX3NjYWxhcl9pZHMocm9sZC0mZ3Q7aWQsIHJjdXItJmd0O2lkLCBpZG1hcCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RudW0uYyBiL2tlcm5lbC9icGYvdG51bS5jCmluZGV4IGVjOWMzMTBjZjVkN2YuLmUxZGM1N2FmZDNkMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdG51bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdG51bS5jCkBAIC0yMDAsNiAmIzQzOzIwMCwyMSBAQCBzdHJ1Y3QgdG51bSB0bnVtX2Nhc3Qoc3RydWN0IHRudW0gYSwgdTggc2l6ZSkKIAlyZXR1cm4gYTsKIH0KIAomIzQzO3N0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKQomIzQzO3sKJiM0MzsJdTggc2hpZnQgPSA2NCAtIHNpemUgKiA4OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTaGlmdGluZyB0aGUgZmllbGQgdXAgdG8gdGhlIHRvcCBhbmQgYmFjayBkb3duIGFyaXRobWV0aWNhbGx5CiYjNDM7CSAqIHJlcGxpY2F0ZXMgaXRzIHNpZ24gYml0IHRocm91Z2ggdGhlIGhpZ2ggaGFsZi4gQXBwbHlpbmcgdGhhdCB0byB0aGUKJiM0MzsJICogbWFzayBhcyB3ZWxsIGNhcnJpZXMgb3ZlciB3aGV0aGVyIHRoZSBzaWduIHdhcyBrbm93bjogYW4gdW5rbm93bgomIzQzOwkgKiBzaWduIGJpdCBsZWF2ZXMgZXZlcnkgaGlnaCBiaXQgdW5rbm93bi4KJiM0MzsJICovCiYjNDM7CWEgPSB0bnVtX2Nhc3QoYSwgc2l6ZSk7CiYjNDM7CXJldHVybiBUTlVNKChzNjQpKGEudmFsdWUgJmx0OyZsdDsgc2hpZnQpICZndDsmZ3Q7IHNoaWZ0LAomIzQzOwkJICAgIChzNjQpKGEubWFzayAmbHQ7Jmx0OyBzaGlmdCkgJmd0OyZndDsgc2hpZnQpOwomIzQzO30KJiM0MzsKIGJvb2wgdG51bV9pc19hbGlnbmVkKHN0cnVjdCB0bnVtIGEsIHU2NCBzaXplKQogewogCWlmICghc2l6ZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA5ZTc5NzUwZTI0ODA4Li45ZTYzZWRkYjkwMjNiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xOTA3LDYgJiM0MzsxOTA3LDggQEAgc3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKQogCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikgLSBzaXplb2YocmVnLSZndDt0eXBlKSk7CiAJcmVnLSZndDtpZCA9IDA7CiAJcmVnLSZndDtwYXJlbnRfaWQgPSAwOwomIzQzOwlyZWctJmd0O2FkZF9jb25zdCA9IEFERF9DT05TVF9OT05FOwomIzQzOwlyZWctJmd0O3N1YnJlZyA9IFNVQlJFR19OT05FOwogCV9fX21hcmtfcmVnX2tub3duKHJlZywgaW1tKTsKIH0KIApAQCAtMzQ4MCw2ICYjNDM7MzQ4Miw4IEBAIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewogCXJlZy0mZ3Q7aWQgPSAwOwogCXJlZy0mZ3Q7ZGVsdGEgPSAwOwomIzQzOwlyZWctJmd0O2FkZF9jb25zdCA9IEFERF9DT05TVF9OT05FOwomIzQzOwlyZWctJmd0O3N1YnJlZyA9IFNVQlJFR19OT05FOwogfQogCiBzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKQEAgLTM0OTEsOCAmIzQzOzM0OTUsMTAgQEAgc3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJICogVGhlIHZlcmlmaWVyIGlzIHByb2Nlc3NpbmcgclggPSByWSBpbnNuIGFuZAogCSAqIHJZLSZndDtpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS4KIAkgKiBDbGVhcmVkIGl0LCBzaW5jZSBtdWx0aXBsZSByWCAmIzQzOz0gY29uc3QgYXJlIG5vdCBzdXBwb3J0ZWQuCiYjNDM7CSAqIEEgLSZndDtzdWJyZWcgbGluayBjYW4gYmUgc2hhcmVkOiBpdCBkZXNjcmliZXMgc3JjJiMzOTtzIG93biByZWxhdGlvbnNoaXAKJiM0MzsJICogdG8gdGhlIHNldCwgbm90IGEgZGVsdGEgdG8gdW53aW5kLgogCSAqLwotCWlmIChzcmNfcmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKQomIzQzOwlpZiAoc3JjX3JlZy0mZ3Q7YWRkX2NvbnN0KQogCQljbGVhcl9zY2FsYXJfaWQoc3JjX3JlZyk7CiAJLyoKIAkgKiBFbnN1cmUgdGhhdCBzcmNfcmVnIGhhcyBhIHZhbGlkIElEIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG8KQEAgLTM1MDMsNiAmIzQzOzM1MDksMzEgQEAgc3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXNyY19yZWctJmd0O2lkID0gJiM0MzsmIzQzO2Vudi0mZ3Q7aWRfZ2VuOwogfQogCiYjNDM7c3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKQomIzQzO3sKJiM0MzsJdTY0IG1hc2s7CiYjNDM7CiYjNDM7CS8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi8KJiM0MzsJcmVnLSZndDt2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy0mZ3Q7dmFyX29mZiwgc2l6ZSk7CiYjNDM7CiYjNDM7CS8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqLwomIzQzOwltYXNrID0gKCh1NjQpMSAmbHQ7Jmx0OyAoc2l6ZSAqIDgpKSAtIDE7CiYjNDM7CWlmICgocmVnX3VtaW4ocmVnKSAmYW1wOyB+bWFzaykgPT0gKHJlZ191bWF4KHJlZykgJmFtcDsgfm1hc2spKQomIzQzOwkJcmVnX3NldF91cmFuZ2U2NChyZWcsIHJlZ191bWluKHJlZykgJmFtcDsgbWFzaywgcmVnX3VtYXgocmVnKSAmYW1wOyBtYXNrKTsKJiM0MzsJZWxzZQomIzQzOwkJcmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiBzaXplIGlzIHNtYWxsZXIgdGhhbiAzMmJpdCByZWdpc3RlciB0aGUgMzJiaXQgcmVnaXN0ZXIKJiM0MzsJICogdmFsdWVzIGFyZSBhbHNvIHRydW5jYXRlZCBzbyB3ZSBwdXNoIDY0LWJpdCBib3VuZHMgaW50bwomIzQzOwkgKiAzMi1iaXQgYm91bmRzLiBBYm92ZSB3ZXJlIHRydW5jYXRlZCAmbHQ7IDMyLWJpdHMgYWxyZWFkeS4KJiM0MzsJICovCiYjNDM7CWlmIChzaXplICZsdDsgNCkKJiM0MzsJCV9fbWFya19yZWczMl91bmJvdW5kZWQocmVnKTsKJiM0MzsKJiM0MzsJcmVnX2JvdW5kc19zeW5jKHJlZyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc2F2ZV9yZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsCiAJCQkJaW50IHNwaSwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywKQEAgLTM2MzQsMTUgJiM0MzszNjY1LDM4IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJbWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSk7CiAJaWYgKHJlZyAmYW1wOyZhbXA7ICEob2ZmICUgQlBGX1JFR19TSVpFKSAmYW1wOyZhbXA7IHJlZy0mZ3Q7dHlwZSA9PSBTQ0FMQVJfVkFMVUUgJmFtcDsmYW1wOyBlbnYtJmd0O2JwZl9jYXBhYmxlKSB7CiAJCWJvb2wgcmVnX3ZhbHVlX2ZpdHM7CiYjNDM7CQlib29sIHN1YnJlZ19saW5rOwogCiAJCXJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpICZsdDs9IEJJVFNfUEVSX0JZVEUgKiBzaXplOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgbmFycm93aW5nIHNwaWxsIHN0b3JlcyB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIHNvdXJjZSwgc28KJiM0MzsJCSAqIHRoZSBzbG90IGlzIHRoZWlyIHplcm8tZXh0ZW5zaW9uOiByZWNvcmQgYSBsb3ctMzIgbGluawomIzQzOwkJICogcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlIHJlbGF0aW9uLCBhcyBhIDMyLWJpdCBtb3YgZG9lcy4KJiM0MzsJCSAqIEEgc3RvcmUgbmV2ZXIgc2lnbi1leHRlbmRzLCBzbyB0aGVyZSBpcyBvbmx5IG9uZSBraW5kIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXN1YnJlZ19saW5rID0gIXJlZ192YWx1ZV9maXRzICZhbXA7JmFtcDsgc2l6ZSA9PSA0OwomIzQzOwogCQkvKiBNYWtlIHN1cmUgdGhhdCByZWcgaGFkIGFuIElEIHRvIGJ1aWxkIGEgcmVsYXRpb24gb24gc3BpbGwuICovCi0JCWlmIChyZWdfdmFsdWVfZml0cykKJiM0MzsJCWlmIChyZWdfdmFsdWVfZml0cyB8fCBzdWJyZWdfbGluaykKIAkJCWFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7CiAJCXNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpOwotCQkvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgc3BpbGwuICovCi0JCWlmICghcmVnX3ZhbHVlX2ZpdHMpCi0JCQlzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5pZCA9IDA7CiYjNDM7CQlpZiAoIXJlZ192YWx1ZV9maXRzKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBPbmx5IHRoZSBsb3cgQHNpemUgYnl0ZXMgcmVhY2ggbWVtb3J5LCBzbyByZWNvcmQKJiM0MzsJCQkgKiB3aGF0IHRoZSBzbG90IGhvbGRzIHJhdGhlciB0aGFuIHRoZSB3aWRlciBzb3VyY2UKJiM0MzsJCQkgKiBpdCBjYW1lIGZyb20uCiYjNDM7CQkJICovCiYjNDM7CQkJY29lcmNlX3JlZ190b19zaXplKCZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIHNpemUpOwomIzQzOwkJCWlmIChzdWJyZWdfbGluayAmYW1wOyZhbXA7IHJlZy0mZ3Q7aWQpCiYjNDM7CQkJCXN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLnN1YnJlZyA9IFNVQlJFR19aRVhUOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogTm90aGluZyB0byByZWxhdGU6IGVpdGhlciB0aGUgc291cmNlIGhhcyBubwomIzQzOwkJCQkgKiBpZCB0byBzaGFyZSwgb3IgdGhlIHN0b3JlIGlzIG5hcnJvd2VyIHRoYW4KJiM0MzsJCQkJICogdGhlIDMyIGJpdHMgYSBsaW5rIGNhbiBkZXNjcmliZS4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWNsZWFyX3NjYWxhcl9pZCgmYW1wO3N0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyKTsKJiM0MzsJCX0KIAl9IGVsc2UgaWYgKCFyZWcgJmFtcDsmYW1wOyAhKG9mZiAlIEJQRl9SRUdfU0laRSkgJmFtcDsmYW1wOyBpc19icGZfc3RfbWVtKGluc24pICZhbXA7JmFtcDsKIAkJICAgZW52LSZndDticGZfY2FwYWJsZSkgewogCQlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdG1wX3JlZyA9ICZhbXA7ZW52LSZndDtmYWtlX3JlZ1swXTsKQEAgLTM5MjEsNyAmIzQzOzM5NzUsOCBAQCBzdGF0aWMgdm9pZCBicGZfZGlhZ19zdGFja19yZWFkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmLCBpbgogc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgICAgIC8qIGZ1bmMgd2hlcmUgc3JjIHJlZ2lzdGVyIHBvaW50cyB0byAqLwogCQkJCSAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqcmVnX3N0YXRlLAotCQkJCSAgICAgIGludCBvZmYsIGludCBzaXplLCBpbnQgZHN0X3JlZ25vKQomIzQzOwkJCQkgICAgICBpbnQgb2ZmLCBpbnQgc2l6ZSwgaW50IGRzdF9yZWdubywKJiM0MzsJCQkJICAgICAgYm9vbCBpc19sZHN4KQogewogCXN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi0mZ3Q7Y3VyX3N0YXRlOwogCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSB2c3RhdGUtJmd0O2ZyYW1lW3ZzdGF0ZS0mZ3Q7Y3VyZnJhbWVdOwpAQCAtMzk2MiwxOCAmIzQzOzQwMTcsMzQgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCiAJCQlpZiAoc2l6ZSAmbHQ7PSBzcGlsbF9zaXplICZhbXA7JmFtcDsKIAkJCSAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7Ci0JCQkJaWYgKGVudi0mZ3Q7YnBmX2NhcGFibGUgJmFtcDsmYW1wOyBzaXplID09IDQgJmFtcDsmYW1wOyBzcGlsbF9zaXplID09IDQgJmFtcDsmYW1wOwotCQkJCSAgICBnZXRfcmVnX3dpZHRoKHJlZykgJmx0Oz0gMzIpCiYjNDM7CQkJCWJvb2wgbmFycm93aW5nID0gZ2V0X3JlZ193aWR0aChyZWcpICZndDsgc2l6ZSAqIEJJVFNfUEVSX0JZVEU7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIEEgbmFycm93aW5nIGZpbGwga2VlcHMgb25seSB0aGUgc2xvdCYjMzk7cyBsb3cgMzIgYml0cywKJiM0MzsJCQkJICogc28gcmVjb3JkIGEgbG93LTMyIGxpbmsgcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlCiYjNDM7CQkJCSAqIHJlbGF0aW9uLCBhcyBhIDMyLWJpdCBtb3YgZnJvbSBhIHdpZGUgc291cmNlIGRvZXMuCiYjNDM7CQkJCSAqIFdoaWNoIGtpbmQgZGVwZW5kcyBvbiBob3cgdGhlIGxvYWQgZmlsbHMgdGhlIGhpZ2gKJiM0MzsJCQkJICogaGFsZiwgaGVuY2UgaXNfbGRzeC4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWJvb2wgc3VicmVnX2xpbmsgPSBuYXJyb3dpbmcgJmFtcDsmYW1wOyBzaXplID09IDQ7CiYjNDM7CiYjNDM7CQkJCWlmIChlbnYtJmd0O2JwZl9jYXBhYmxlICZhbXA7JmFtcDsgc2l6ZSA9PSA0ICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIChzdWJyZWdfbGluayB8fCAoc3BpbGxfc2l6ZSA9PSA0ICZhbXA7JmFtcDsgIW5hcnJvd2luZykpKQogCQkJCQkvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbgogCQkJCQkgKiB3aXRoIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvbiBmaWxsLgogCQkJCQkgKi8KIAkJCQkJYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTsKIAkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dID0gKnJlZzsKIAotCQkJCS8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBmaWxsLgotCQkJCSAqIGNvZXJjZV9yZWdfdG9fc2l6ZSB3aWxsIGFkanVzdCB0aGUgYm91bmRhcmllcy4KLQkJCQkgKi8KLQkJCQlpZiAoZ2V0X3JlZ193aWR0aChyZWcpICZndDsgc2l6ZSAqIEJJVFNfUEVSX0JZVEUpCiYjNDM7CQkJCWlmIChzdWJyZWdfbGluayAmYW1wOyZhbXA7IHJlZy0mZ3Q7aWQpCiYjNDM7CQkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dLnN1YnJlZyA9CiYjNDM7CQkJCQkJaXNfbGRzeCA/IFNVQlJFR19TRVhUIDogU1VCUkVHX1pFWFQ7CiYjNDM7CQkJCWVsc2UgaWYgKG5hcnJvd2luZykKJiM0MzsJCQkJCS8qCiYjNDM7CQkJCQkgKiBOb3RoaW5nIHRvIHJlbGF0ZTogZWl0aGVyIHRoZSBzbG90IGhhcwomIzQzOwkJCQkJICogbm8gaWQgdG8gc2hhcmUsIG9yIHRoZSBmaWxsIGlzIG5hcnJvd2VyCiYjNDM7CQkJCQkgKiB0aGFuIHRoZSAzMiBiaXRzIGEgbGluayBjYW4gZGVzY3JpYmUuCiYjNDM7CQkJCQkgKiBjb2VyY2VfcmVnX3RvX3NpemUgYWRqdXN0cyB0aGUgYm91bmRzLgomIzQzOwkJCQkJICovCiAJCQkJCWNsZWFyX3NjYWxhcl9pZCgmYW1wO3N0YXRlLSZndDtyZWdzW2RzdF9yZWdub10pOwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgc3BpbGxfY250ID0gMCwgemVyb19jbnQgPSAwOwpAQCAtNDEzOCw3ICYjNDM7NDIwOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnCiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgcHRyX2FyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSwKLQkJCSAgICBpbnQgZHN0X3JlZ25vKQomIzQzOwkJCSAgICBpbnQgZHN0X3JlZ25vLCBib29sIGlzX2xkc3gpCiB7CiAJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTsKIAlpbnQgZXJyOwpAQCAtNDE3Nyw3ICYjNDM7NDI0OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWlmICghdmFyX29mZikgewogCQlvZmYgJiM0Mzs9IHJlZy0mZ3Q7dmFyX29mZi52YWx1ZTsKIAkJZXJyID0gY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLAotCQkJCQkJIGRzdF9yZWdubyk7CiYjNDM7CQkJCQkJIGRzdF9yZWdubywgaXNfbGRzeCk7CiAJfSBlbHNlIHsKIAkJLyogVmFyaWFibGUgb2Zmc2V0IHN0YWNrIHJlYWRzIG5lZWQgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcKIAkJICogdGhhbiBmaXhlZCBvZmZzZXQgb25lcy4gTm90ZSB0aGF0IGRzdF9yZWdubyAmZ3Q7PSAwIG9uIHRoaXMKQEAgLTU3MDIsMzMgJiM0Mzs1NzczLDE5IEBAIHN0YXRpYyB2b2lkIHpleHRfMzJfdG9fNjQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKIAlyZWdfc2V0X3VyYW5nZTY0KHJlZywgcmVnX3UzMl9taW4ocmVnKSwgcmVnX3UzMl9tYXgocmVnKSk7CiB9CiAKLS8qIHRydW5jYXRlIHJlZ2lzdGVyIHRvIHNtYWxsZXIgc2l6ZSAoaW4gYnl0ZXMpCi0gKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNpemUgJmx0OyBCUEZfUkVHX1NJWkUKJiM0MzsvKgomIzQzOyAqIFRoZSBzaWduLWV4dGVuZGluZyBjb3VudGVycGFydC4gU2lnbmVkIGJvdW5kcyBjYXJyeSBvdmVyIGRpcmVjdGx5IGJlY2F1c2UKJiM0MzsgKiBzaWduIGV4dGVuc2lvbiBpcyBtb25vdG9uaWMgb3ZlciB0aGUgc2lnbmVkIDMyLWJpdCByYW5nZS4KICAqLwotc3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKQomIzQzO3N0YXRpYyB2b2lkIHNleHRfMzJfdG9fNjQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKIHsKLQl1NjQgbWFzazsKLQotCS8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi8KLQlyZWctJmd0O3Zhcl9vZmYgPSB0bnVtX2Nhc3QocmVnLSZndDt2YXJfb2ZmLCBzaXplKTsKLQotCS8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqLwotCW1hc2sgPSAoKHU2NCkxICZsdDsmbHQ7IChzaXplICogOCkpIC0gMTsKLQlpZiAoKHJlZ191bWluKHJlZykgJmFtcDsgfm1hc2spID09IChyZWdfdW1heChyZWcpICZhbXA7IH5tYXNrKSkKLQkJcmVnX3NldF91cmFuZ2U2NChyZWcsIHJlZ191bWluKHJlZykgJmFtcDsgbWFzaywgcmVnX3VtYXgocmVnKSAmYW1wOyBtYXNrKTsKLQllbHNlCi0JCXJlZ19zZXRfdXJhbmdlNjQocmVnLCAwLCBtYXNrKTsKLQotCS8qIElmIHNpemUgaXMgc21hbGxlciB0aGFuIDMyYml0IHJlZ2lzdGVyIHRoZSAzMmJpdCByZWdpc3RlcgotCSAqIHZhbHVlcyBhcmUgYWxzbyB0cnVuY2F0ZWQgc28gd2UgcHVzaCA2NC1iaXQgYm91bmRzIGludG8KLQkgKiAzMi1iaXQgYm91bmRzLiBBYm92ZSB3ZXJlIHRydW5jYXRlZCAmbHQ7IDMyLWJpdHMgYWxyZWFkeS4KLQkgKi8KLQlpZiAoc2l6ZSAmbHQ7IDQpCi0JCV9fbWFya19yZWczMl91bmJvdW5kZWQocmVnKTsKLQotCXJlZ19ib3VuZHNfc3luYyhyZWcpOwomIzQzOwlyZWctJmd0O3Zhcl9vZmYgPSB0bnVtX3NleHQocmVnLSZndDt2YXJfb2ZmLCA0KTsKJiM0MzsJcmVnX3NldF9zcmFuZ2U2NChyZWcsIHJlZ19zMzJfbWluKHJlZyksIHJlZ19zMzJfbWF4KHJlZykpOwogfQogCiYjNDM7LyogdHJ1bmNhdGUgcmVnaXN0ZXIgdG8gc21hbGxlciBzaXplIChpbiBieXRlcykKJiM0MzsgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNpemUgJmx0OyBCUEZfUkVHX1NJWkUKJiM0MzsgKi8KIHN0YXRpYyB2b2lkIHNldF9zZXh0NjRfZGVmYXVsdF92YWwoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpCiB7CiAJaWYgKHNpemUgPT0gMSkgewpAQCAtNTc0OCw2ICYjNDM7NTgwNSw3IEBAIHN0YXRpYyB2b2lkIHNldF9zZXh0NjRfZGVmYXVsdF92YWwoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpCiBzdGF0aWMgdm9pZCBjb2VyY2VfcmVnX3RvX3NpemVfc3goc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpCiB7CiAJczY0IGluaXRfczY0X21heCwgaW5pdF9zNjRfbWluLCBzNjRfbWF4LCBzNjRfbWluLCB1NjRfY3ZhbDsKJiM0MzsJczY0IGZpZWxkX3NtaW4sIGZpZWxkX3NtYXg7CiAJdTY0IHRvcF9zbWF4X3ZhbHVlLCB0b3Bfc21pbl92YWx1ZTsKIAl1NjQgbnVtX2JpdHMgPSBzaXplICogODsKIApAQCAtNTc2Nyw2ICYjNDM7NTgyNSwyNyBAQCBzdGF0aWMgdm9pZCBjb2VyY2VfcmVnX3RvX3NpemVfc3goc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKHNpemUgPT0gMSkgewomIzQzOwkJZmllbGRfc21pbiA9IFM4X01JTjsKJiM0MzsJCWZpZWxkX3NtYXggPSBTOF9NQVg7CiYjNDM7CX0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7CiYjNDM7CQlmaWVsZF9zbWluID0gUzE2X01JTjsKJiM0MzsJCWZpZWxkX3NtYXggPSBTMTZfTUFYOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogc2l6ZSA9PSA0ICovCiYjNDM7CQlmaWVsZF9zbWluID0gUzMyX01JTjsKJiM0MzsJCWZpZWxkX3NtYXggPSBTMzJfTUFYOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByYW5nZSBhbHJlYWR5IGZpdHMgdGhlIGZpZWxkLCBzbyAoc04pdiA9PSB2IGZvciBldmVyeSB2YWx1ZSB0aGUKJiM0MzsJICogcmVnaXN0ZXIgY2FuIGhvbGQgYW5kIHRoZSBzaWduIGV4dGVuc2lvbiBjaGFuZ2VzIG5vdGhpbmcuIFRoZSB0ZXN0cwomIzQzOwkgKiBiZWxvdyBjYW5ub3QgcmVhY2ggdGhpcyBjYXNlIG9uY2Ugc21pbiBpcyBuZWdhdGl2ZTogYSBuZWdhdGl2ZSBzbWluCiYjNDM7CSAqIGFuZCBhIG5vbi1uZWdhdGl2ZSBzbWF4IG5ldmVyIHNoYXJlIHRoZWlyIGhpZ2ggYml0cy4KJiM0MzsJICovCiYjNDM7CWlmIChyZWdfc21pbihyZWcpICZndDs9IGZpZWxkX3NtaW4gJmFtcDsmYW1wOyByZWdfc21heChyZWcpICZsdDs9IGZpZWxkX3NtYXgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJdG9wX3NtYXhfdmFsdWUgPSAoKHU2NClyZWdfc21heChyZWcpICZndDsmZ3Q7IG51bV9iaXRzKSAmbHQ7Jmx0OyBudW1fYml0czsKIAl0b3Bfc21pbl92YWx1ZSA9ICgodTY0KXJlZ19zbWluKHJlZykgJmd0OyZndDsgbnVtX2JpdHMpICZsdDsmbHQ7IG51bV9iaXRzOwogCkBAIC02NjAxLDcgJiM0Mzs2NjgwLDcgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAogCQlpZiAodCA9PSBCUEZfUkVBRCkKIAkJCWVyciA9IGNoZWNrX3N0YWNrX3JlYWQoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsCi0JCQkJCSAgICAgICB2YWx1ZV9yZWdubyk7CiYjNDM7CQkJCQkgICAgICAgdmFsdWVfcmVnbm8sIGlzX2xkc3gpOwogCQllbHNlCiAJCQllcnIgPSBjaGVja19zdGFja193cml0ZShlbnYsIHJlZywgb2ZmLCBzaXplLAogCQkJCQkJdmFsdWVfcmVnbm8sIGluc25faWR4KTsKQEAgLTY2OTgsMTMgJiM0Mzs2Nzc3LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiCiAJCQkgKiBTaWduLWV4dGVuc2lvbiBjYW4gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZSByZWxhdGl2ZQogCQkJICogdG8gYSBzY2FsYXIgaXQgaXMgbGlua2VkIHdpdGggYnkgaWQgKGUuZy4gYSB6ZXJvLQogCQkJICogZXh0ZW5kaW5nIGZpbGwgb2YgdGhlIHNhbWUgc3BpbGxlZCBzdGFjayBzbG90KSwgdGh1cwotCQkJICogZHJvcCB0aGUgc2hhcmVkIGlkIGluIHRoYXQgY2FzZS4KJiM0MzsJCQkgKiBkcm9wIHRoZSBzaGFyZWQgaWQgaW4gdGhhdCBjYXNlLiBBIC0mZ3Q7c3VicmVnIGxpbmsgaXMKJiM0MzsJCQkgKiB0aGUgZXhjZXB0aW9uOiBpdCBhbHJlYWR5IHJlY29yZHMgdGhhdCBvbmx5IHRoZSBsb3cKJiM0MzsJCQkgKiAzMiBiaXRzIGFyZSBzaGFyZWQsIGFuZCBob3cgdGhlIGhpZ2ggaGFsZiBmb2xsb3dzLgogCQkJICovCiAJCQlib29sIG5vX3NleHQgPSByZWdfdW1heCgmYW1wO3JlZ3NbdmFsdWVfcmVnbm9dKSAmbHQ7CiAJCQkJCSgxVUxMICZsdDsmbHQ7IChzaXplICogQklUU19QRVJfQllURSAtIDEpKTsKIAogCQkJY29lcmNlX3JlZ190b19zaXplX3N4KCZhbXA7cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpOwotCQkJaWYgKCFub19zZXh0KQomIzQzOwkJCWlmICghbm9fc2V4dCAmYW1wOyZhbXA7ICFyZWdzW3ZhbHVlX3JlZ25vXS5zdWJyZWcpCiAJCQkJY2xlYXJfc2NhbGFyX2lkKCZhbXA7cmVnc1t2YWx1ZV9yZWdub10pOwogCQl9CiAJfQpAQCAtMTYxMTcsNyAmIzQzOzE2MTk4LDcgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJb2ZmID0gLW9mZjsKIAkJfQogCi0JCWlmIChkc3RfcmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSB7CiYjNDM7CQlpZiAoZHN0X3JlZy0mZ3Q7YWRkX2NvbnN0KSB7CiAJCQkvKgogCQkJICogSWYgdGhlIHJlZ2lzdGVyIGFscmVhZHkgd2VudCB0aHJvdWdoIHJYICYjNDM7PSB2YWwKIAkJCSAqIHdlIGNhbm5vdCBhY2N1bXVsYXRlIGFub3RoZXIgdmFsIGludG8gcngtJmd0O29mZi4KQEAgLTE2MTI2LDkgJiM0MzsxNjIwNyw5IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCWNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChhbHUzMikKLQkJCQlkc3RfcmVnLSZndDtpZCB8PSBCUEZfQUREX0NPTlNUMzI7CiYjNDM7CQkJCWRzdF9yZWctJmd0O2FkZF9jb25zdCA9IEFERF9DT05TVF8zMjsKIAkJCWVsc2UKLQkJCQlkc3RfcmVnLSZndDtpZCB8PSBCUEZfQUREX0NPTlNUNjQ7CiYjNDM7CQkJCWRzdF9yZWctJmd0O2FkZF9jb25zdCA9IEFERF9DT05TVF82NDsKIAkJCWRzdF9yZWctJmd0O2RlbHRhID0gb2ZmOwogCQl9CiAJfSBlbHNlIHsKQEAgLTE2MjIwLDEyICYjNDM7MTYzMDEsMjMgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCQkJcmV0dXJuIC1FQUNDRVM7CiAJCQkJCX0gZWxzZSBpZiAoc3JjX3JlZy0mZ3Q7dHlwZSA9PSBTQ0FMQVJfVkFMVUUpIHsKIAkJCQkJCWJvb2wgbm9fc2V4dDsKJiM0MzsJCQkJCQkvKgomIzQzOwkJCQkJCSAqIEEgMzItYml0IHNpZ24gZXh0ZW5zaW9uIGtlZXBzIHRoZSBsb3cgMzIKJiM0MzsJCQkJCQkgKiBiaXRzLCBzbyByZWNvcmQgYSBsb3ctMzIgbGluayBhcyB0aGUKJiM0MzsJCQkJCQkgKiB6ZXJvLWV4dGVuZGluZyBtb3YgZG9lcy4gQSBzZWxmLW1vdgomIzQzOwkJCQkJCSAqIHF1YWxpZmllcyBvbmx5IGlmIHNyYyBpcyBhbHJlYWR5IGxpbmtlZC4KJiM0MzsJCQkJCQkgKi8KJiM0MzsJCQkJCQlib29sIHN1YnJlZ19saW5rID0gKGluc24tJmd0O29mZiAmZ3Q7Jmd0OyAzKSA9PSA0ICZhbXA7JmFtcDsKJiM0MzsJCQkJCQkJCSAgIChzcmNfcmVnICE9IGRzdF9yZWcgfHwKJiM0MzsJCQkJCQkJCSAgICBzcmNfcmVnLSZndDtpZCk7CiAKIAkJCQkJCW5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSAmbHQ7ICgxVUxMICZsdDsmbHQ7IChpbnNuLSZndDtvZmYgLSAxKSk7Ci0JCQkJCQlpZiAobm9fc2V4dCkKJiM0MzsJCQkJCQlpZiAobm9fc2V4dCB8fCBzdWJyZWdfbGluaykKIAkJCQkJCQlhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTsKIAkJCQkJCSpkc3RfcmVnID0gKnNyY19yZWc7Ci0JCQkJCQlpZiAoIW5vX3NleHQpCiYjNDM7CQkJCQkJaWYgKCFub19zZXh0ICZhbXA7JmFtcDsgc3VicmVnX2xpbmsgJmFtcDsmYW1wOyBzcmNfcmVnLSZndDtpZCkKJiM0MzsJCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnID0gU1VCUkVHX1NFWFQ7CiYjNDM7CQkJCQkJZWxzZSBpZiAoIW5vX3NleHQpCiAJCQkJCQkJY2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpOwogCQkJCQkJY29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tJmd0O29mZiAmZ3Q7Jmd0OyAzKTsKIAkJCQkJfSBlbHNlIHsKQEAgLTE2MjQyLDE1ICYjNDM7MTYzMzQsMjIgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCX0gZWxzZSBpZiAoc3JjX3JlZy0mZ3Q7dHlwZSA9PSBTQ0FMQVJfVkFMVUUpIHsKIAkJCQkJaWYgKGluc24tJmd0O29mZiA9PSAwKSB7CiAJCQkJCQlib29sIGlzX3NyY19yZWdfdTMyID0gZ2V0X3JlZ193aWR0aChzcmNfcmVnKSAmbHQ7PSAzMjsKJiM0MzsJCQkJCQkvKgomIzQzOwkJCQkJCSAqIEEgd2lkZSBzcmMgc2hhcmVzIG9ubHkgaXRzIGxvdyAzMiBiaXRzLiBBCiYjNDM7CQkJCQkJICogZnVsbCBsaW5rIHdvdWxkIGxldCBkc3QmIzM5O3MgWzAsIFUzMl9NQVhdCiYjNDM7CQkJCQkJICogcHJvcGFnYXRlIG9udG8gc3JjJiMzOTtzIHVua25vd24gaGlnaCBiaXRzLCBzbwomIzQzOwkJCQkJCSAqIHJlY29yZCBhIGxvdy0zMi1vbmx5IGxpbmsgaW5zdGVhZC4gQQomIzQzOwkJCQkJCSAqIHNlbGYtbW92IGhhcyBub3RoaW5nIHRvIGxpbmsuCiYjNDM7CQkJCQkJICovCiYjNDM7CQkJCQkJYm9vbCBzdWJyZWdfbGluayA9ICFpc19zcmNfcmVnX3UzMiAmYW1wOyZhbXA7CiYjNDM7CQkJCQkJCQkgICBzcmNfcmVnICE9IGRzdF9yZWc7CiAKLQkJCQkJCWlmIChpc19zcmNfcmVnX3UzMikKJiM0MzsJCQkJCQlpZiAoaXNfc3JjX3JlZ191MzIgfHwgc3VicmVnX2xpbmspCiAJCQkJCQkJYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7CiAJCQkJCQkqZHN0X3JlZyA9ICpzcmNfcmVnOwotCQkJCQkJLyogTWFrZSBzdXJlIElEIGlzIGNsZWFyZWQgaWYgc3JjX3JlZyBpcyBub3QgaW4gdTMyCi0JCQkJCQkgKiByYW5nZSBvdGhlcndpc2UgZHN0X3JlZyBtaW4vbWF4IGNvdWxkIGJlIGluY29ycmVjdGx5Ci0JCQkJCQkgKiBwcm9wYWdhdGVkIGludG8gc3JjX3JlZyBieSBzeW5jX2xpbmtlZF9yZWdzKCkKLQkJCQkJCSAqLwotCQkJCQkJaWYgKCFpc19zcmNfcmVnX3UzMikKJiM0MzsJCQkJCQlpZiAoc3VicmVnX2xpbmsgJmFtcDsmYW1wOyBzcmNfcmVnLSZndDtpZCkKJiM0MzsJCQkJCQkJZHN0X3JlZy0mZ3Q7c3VicmVnID0gU1VCUkVHX1pFWFQ7CiYjNDM7CQkJCQkJZWxzZSBpZiAoIWlzX3NyY19yZWdfdTMyKQogCQkJCQkJCWNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qIGNhc2U6IFcxID0gKHM4LCBzMTYpVzIgKi8KQEAgLTE3MDY3LDcgJiM0MzsxNzE2Niw3IEBAIHN0YXRpYyB2b2lkIF9fY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnJlZ19zZXQsIHN0cnVjdCBicGZfcmVnX3N0CiB7CiAJc3RydWN0IGxpbmtlZF9yZWcgKmU7CiAKLQlpZiAocmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCAocmVnLSZndDtpZCAmYW1wOyB+QlBGX0FERF9DT05TVCkgIT0gaWQpCiYjNDM7CWlmIChyZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZy0mZ3Q7aWQgIT0gaWQpCiAJCXJldHVybjsKIAogCWUgPSBsaW5rZWRfcmVnc19wdXNoKHJlZ19zZXQpOwpAQCAtMTcwOTUsNyAmIzQzOzE3MTk0LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCXUxNiBsaXZlX3JlZ3M7CiAJaW50IGksIGo7CiAKLQlpZCA9IGlkICZhbXA7IH5CUEZfQUREX0NPTlNUOwogCWZvciAoaSA9IHZzdGF0ZS0mZ3Q7Y3VyZnJhbWU7IGkgJmd0Oz0gMDsgaS0tKSB7CiAJCWxpdmVfcmVncyA9IGF1eFticGZfZnJhbWVfaW5zbl9pZHgodnN0YXRlLCBpKV0ubGl2ZV9yZWdzX2JlZm9yZTsKIAkJZnVuYyA9IHZzdGF0ZS0mZ3Q7ZnJhbWVbaV07CkBAIC0xNzExNCw2ICYjNDM7MTcyMTIsNDAgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU2V0IEByZWcgdG8gdGhlIHplcm8tZXh0ZW5zaW9uIG9mIEBrbm93bl9yZWcmIzM5O3MgbG93IDMyIGJpdHM6IGl0IHNoYXJlcyB0aG9zZQomIzQzOyAqIGJpdHMgYW5kIGl0cyBoaWdoIGhhbGYgaXMgemVyby4gQ29weSB0aGUgYmFzZSB0byBrZWVwIGl0cyBwcmVjaXNlIGxvdy0zMgomIzQzOyAqIHRudW0sIHRoZW4gcmUtYXBwbHkgdGhlIHpleHRfMzJfdG9fNjQoKSB0aGUgMzItYml0IG1vdiBpdHNlbGYgdXNlZC4KJiM0MzsgKiBAcmVnLSZndDtpZCBhbmQgLSZndDtkZWx0YSBhbHJlYWR5IGVxdWFsIEBrbm93bl9yZWcmIzM5O3M7IG9ubHkgLSZndDtzdWJyZWcgaXMgaXRzIG93bi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZWNvbnN0cnVjdF96ZXh0MzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZykKJiM0Mzt7CiYjNDM7CWVudW0gYnBmX3N1YnJlZyBzdWJyZWcgPSByZWctJmd0O3N1YnJlZzsKJiM0MzsKJiM0MzsJKnJlZyA9ICprbm93bl9yZWc7CiYjNDM7CXJlZy0mZ3Q7c3VicmVnID0gc3VicmVnOwomIzQzOwl6ZXh0XzMyX3RvXzY0KHJlZyk7CiYjNDM7CXJlZ19ib3VuZHNfc3luYyhyZWcpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBzaWduLWV4dGVuZGluZyBjb3VudGVycGFydC4gTm90ZSB0aGlzIGRyaXZlcyBvZmYgdGhlIGJhc2UmIzM5O3MgMzItYml0CiYjNDM7ICogcmFuZ2UsIG5vdCBjb2VyY2VfcmVnX3RvX3NpemVfc3goKTogYWZ0ZXIgYSAzMi1iaXQgY29tcGFyZSBpdCBpcyB0aGUgbG93CiYjNDM7ICogaGFsZiB0aGF0IGhhcyBiZWVuIG5hcnJvd2VkLCBhbmQgdGhlIDY0LWJpdCBib3VuZHMgc3RpbGwgZGVzY3JpYmUgdGhlCiYjNDM7ICogYmFzZSYjMzk7cyBoaWdoIGJpdHMsIHdoaWNoIGFyZSBub3Qgb3Vycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZWNvbnN0cnVjdF9zZXh0MzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZykKJiM0Mzt7CiYjNDM7CWVudW0gYnBmX3N1YnJlZyBzdWJyZWcgPSByZWctJmd0O3N1YnJlZzsKJiM0MzsKJiM0MzsJKnJlZyA9ICprbm93bl9yZWc7CiYjNDM7CXJlZy0mZ3Q7c3VicmVnID0gc3VicmVnOwomIzQzOwlzZXh0XzMyX3RvXzY0KHJlZyk7CiYjNDM7CXJlZ19ib3VuZHNfc3luYyhyZWcpOwomIzQzO30KJiM0MzsKIC8qIEZvciBhbGwgUiBpbiBsaW5rZWRfcmVncywgY29weSBrbm93bl9yZWcgcmFuZ2UgaW50byBSCiAgKiBpZiBSLSZndDtpZCA9PSBrbm93bl9yZWctJmd0O2lkLgogICovCkBAIC0xNzEzMSwxOCAmIzQzOzE3MjYzLDQ0IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zCiAJCQkJOiAmYW1wO3ZzdGF0ZS0mZ3Q7ZnJhbWVbZS0mZ3Q7ZnJhbWVub10tJmd0O3N0YWNrW2UtJmd0O3NwaV0uc3BpbGxlZF9wdHI7CiAJCWlmIChyZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZyA9PSBrbm93bl9yZWcpCiAJCQljb250aW51ZTsKLQkJaWYgKChyZWctJmd0O2lkICZhbXA7IH5CUEZfQUREX0NPTlNUKSAhPSAoa25vd25fcmVnLSZndDtpZCAmYW1wOyB+QlBGX0FERF9DT05TVCkpCiYjNDM7CQlpZiAocmVnLSZndDtpZCAhPSBrbm93bl9yZWctJmd0O2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgLSZndDtzdWJyZWcgcmVnaXN0ZXIgc2hhcmVzIG9ubHkgdGhlIGJhc2UmIzM5O3MgbG93IDMyIGJpdHMsIHNvIGl0CiYjNDM7CQkgKiBpcyByZWJ1aWx0IHJhdGhlciB0aGFuIGNvcGllZC4gTm90IG1vZGVsbGVkIHRvZ2V0aGVyIHdpdGggYQomIzQzOwkJICogZGVsdGEsIHNvIHNraXAgaWYgZWl0aGVyIHNpZGUgaGFzIG9uZSAoc291bmQsIGxlc3MgcHJlY2lzZSkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWctJmd0O3N1YnJlZykgewomIzQzOwkJCWlmIChyZWctJmd0O2FkZF9jb25zdCB8fCBrbm93bl9yZWctJmd0O2FkZF9jb25zdCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJaWYgKHJlZy0mZ3Q7c3VicmVnID09IFNVQlJFR19aRVhUKQomIzQzOwkJCQlyZWNvbnN0cnVjdF96ZXh0MzIocmVnLCBrbm93bl9yZWcpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmVjb25zdHJ1Y3Rfc2V4dDMyKHJlZywga25vd25fcmVnKTsKJiM0MzsJCQlpZiAoZS0mZ3Q7aXNfcmVnKQomIzQzOwkJCQltYXJrX3JlZ19zY3JhdGNoZWQoZW52LCBlLSZndDtyZWdubyk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQltYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgZS0mZ3Q7c3BpKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgcmV2ZXJzZToga25vd25fcmVnIGtub3dzIG9ubHkgaXRzIGxvdyAzMiBiaXRzLCB3aGljaCBzYXkKJiM0MzsJCSAqIG5vdGhpbmcgYWJvdXQgcmVnJiMzOTtzIGhpZ2ggaGFsZi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGtub3duX3JlZy0mZ3Q7c3VicmVnKQogCQkJY29udGludWU7CiAJCS8qCiAJCSAqIFNraXAgbWl4ZWQgMzIvNjQtYml0IGxpbmtzOiB0aGUgZGVsdGEgcmVsYXRpb25zaGlwIGRvZXNuJiMzOTt0CiAJCSAqIGhvbGQgYWNyb3NzIGRpZmZlcmVudCBBTFUgd2lkdGhzLgogCQkgKi8KLQkJaWYgKCgocmVnLSZndDtpZCBeIGtub3duX3JlZy0mZ3Q7aWQpICZhbXA7IEJQRl9BRERfQ09OU1QpID09IEJQRl9BRERfQ09OU1QpCiYjNDM7CQlpZiAocmVnLSZndDthZGRfY29uc3QgJmFtcDsmYW1wOyBrbm93bl9yZWctJmd0O2FkZF9jb25zdCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmVnLSZndDthZGRfY29uc3QgIT0ga25vd25fcmVnLSZndDthZGRfY29uc3QpCiAJCQljb250aW51ZTsKLQkJaWYgKCghKHJlZy0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkgJmFtcDsmYW1wOyAhKGtub3duX3JlZy0mZ3Q7aWQgJmFtcDsgQlBGX0FERF9DT05TVCkpIHx8CiYjNDM7CQlpZiAoKCFyZWctJmd0O2FkZF9jb25zdCAmYW1wOyZhbXA7ICFrbm93bl9yZWctJmd0O2FkZF9jb25zdCkgfHwKIAkJICAgIHJlZy0mZ3Q7ZGVsdGEgPT0ga25vd25fcmVnLSZndDtkZWx0YSkgewogCQkJKnJlZyA9ICprbm93bl9yZWc7CiAJCX0gZWxzZSB7CiYjNDM7CQkJZW51bSBicGZfYWRkX2NvbnN0IHNhdmVkX2FkZF9jb25zdCA9IHJlZy0mZ3Q7YWRkX2NvbnN0OwogCQkJczMyIHNhdmVkX29mZiA9IHJlZy0mZ3Q7ZGVsdGE7CiAJCQl1MzIgc2F2ZWRfaWQgPSByZWctJmd0O2lkOwogCkBAIC0xNzE1MiwxNiAmIzQzOzE3MzEwLDE4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zCiAJCQkvKiByZWcgPSBrbm93bl9yZWc7IHJlZyAmIzQzOz0gZGVsdGEgKi8KIAkJCSpyZWcgPSAqa25vd25fcmVnOwogCQkJLyoKLQkJCSAqIE11c3QgcHJlc2VydmUgb2ZmIGFuZCBpZCwgb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpCi0JCQkgKiB3aWxsIGJlIGluY29ycmVjdC4KJiM0MzsJCQkgKiBNdXN0IHByZXNlcnZlIG9mZiwgaWQgYW5kIGFkZF9jb25zdCwgb3RoZXJ3aXNlIGFub3RoZXIKJiM0MzsJCQkgKiBzeW5jX2xpbmtlZF9yZWdzKCkgd2lsbCBiZSBpbmNvcnJlY3QuCiAJCQkgKi8KIAkJCXJlZy0mZ3Q7ZGVsdGEgPSBzYXZlZF9vZmY7CiAJCQlyZWctJmd0O2lkID0gc2F2ZWRfaWQ7CiYjNDM7CQkJcmVnLSZndDthZGRfY29uc3QgPSBzYXZlZF9hZGRfY29uc3Q7CiAKIAkJCXNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgJmFtcDtmYWtlX3JlZyk7CiAJCQlzY2FsYXJfbWluX21heF9hZGQocmVnLCAmYW1wO2Zha2VfcmVnKTsKIAkJCXJlZy0mZ3Q7dmFyX29mZiA9IHRudW1fYWRkKHJlZy0mZ3Q7dmFyX29mZiwgZmFrZV9yZWcudmFyX29mZik7Ci0JCQlpZiAoKHJlZy0mZ3Q7aWQgfCBrbm93bl9yZWctJmd0O2lkKSAmYW1wOyBCUEZfQUREX0NPTlNUMzIpCiYjNDM7CQkJaWYgKHJlZy0mZ3Q7YWRkX2NvbnN0ID09IEFERF9DT05TVF8zMiB8fAomIzQzOwkJCSAgICBrbm93bl9yZWctJmd0O2FkZF9jb25zdCA9PSBBRERfQ09OU1RfMzIpCiAJCQkJemV4dF8zMl90b182NChyZWcpOwogCQkJcmVnX2JvdW5kc19zeW5jKHJlZyk7CiAJCX0KQEAgLTE4MjU1LDcgJiM0MzsxODQxNSw3IEBAIHZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJY29udGludWU7CiAJCWlmICghcmVnLSZndDtpZCkKIAkJCWNvbnRpbnVlOwotCQlpZHNldF9jbnRfaW5jKGlkc2V0LCByZWctJmd0O2lkICZhbXA7IH5CUEZfQUREX0NPTlNUKTsKJiM0MzsJCWlkc2V0X2NudF9pbmMoaWRzZXQsIHJlZy0mZ3Q7aWQpOwogCX0pKTsKIAogCWJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHN0LCBmdW5jLCByZWcsICh7CkBAIC0xODI2Myw3ICYjNDM7MTg0MjMsNyBAQCB2b2lkIGJwZl9jbGVhcl9zaW5ndWxhcl9pZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXJlZy0mZ3Q7aWQpCiAJCQljb250aW51ZTsKLQkJaWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy0mZ3Q7aWQgJmFtcDsgfkJQRl9BRERfQ09OU1QpID09IDEpCiYjNDM7CQlpZiAoaWRzZXRfY250X2dldChpZHNldCwgcmVnLSZndDtpZCkgPT0gMSkKIAkJCWNsZWFyX3NjYWxhcl9pZChyZWcpOwogCX0pKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKaW5kZXggZWI4OGQ5Y2U2YzM0OC4uNDViZmEwMmE1MzM4MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKQEAgLTI2OSw2ICYjNDM7MjY5LDE0IEBACiAjZGVmaW5lIENBTl9VU0VfQlBGX1NUCiAjZW5kaWYKIAomIzQzOyNpZiAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fAlcCiYjNDM7ICAgICAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSAmYW1wOyZhbXA7IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwJCVwKJiM0MzsgICAgIGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm0pIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fAlcCiYjNDM7ICAgICBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfbG9vbmdhcmNoKSkgJmFtcDsmYW1wOwkJCQlcCiYjNDM7CShfX2NsYW5nX21ham9yX18gJmd0Oz0gMTggfHwgZGVmaW5lZChfX0JQRl9GRUFUVVJFX01PVlNYKSkKJiM0MzsjZGVmaW5lIENBTl9VU0VfTU9WU1gKJiM0MzsjZW5kaWYKJiM0MzsKICNpZiBfX2NsYW5nX21ham9yX18gJmd0Oz0gMTggJmFtcDsmYW1wOyBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSAmYW1wOyZhbXA7CQlcCiAJKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwJCQkJXAogCSBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fAkJCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jCmluZGV4IGRmOGQ1MzA5NjU3ZTEuLmI0ZWFkYmQ4ODM1N2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmMKQEAgLTE1MTYsNyAmIzQzOzE1MTYsNyBAQCBfX25ha2VkIHZvaWQgc3ViMzJfZnVsbF9vdmVyZmxvdyh2b2lkKQogU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7MzItYml0IHN1YnRyYWN0aW9uLCBwYXJ0aWFsIG92ZXJmbG93LCByZXN1bHQgaW4gdW5ib3VuZGVkIHUzMiBib3VuZHMmIzM0OykKIF9fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQotX19tc2coJiMzNDszOiAoMWMpIHczIC09IHcyIHt7Lip9fSBSMz1zY2FsYXIoc21pbj0wLHNtYXg9dW1heD0weGZmZmZmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmZmZmZikpJiMzNDspCiYjNDM7X19tc2coJiMzNDszOiAoMWMpIHczIC09IHcyIHt7Lip9fSBSMz1zY2FsYXIoaWQ9e3tbMC05XSYjNDM7fX0tMS5sbzMyLHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKSYjMzQ7KQogX19yZXR2YWwoMCkKIF9fbmFrZWQgdm9pZCBzdWIzMl9wYXJ0aWFsX292ZXJmbG93KHZvaWQpCiB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jCmluZGV4IGQ1NzFmYmZjODZhM2EuLmNhNzQ3MWYwMjkzZGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jCkBAIC0zNDksOCAmIzQzOzM0OSw4IEBAIGwwXyU9OgkJCQkJCQlcCiB9CiAKIC8qCi0gKiBUZXN0IHRoYXQgc3luY19saW5rZWRfcmVncygpIGNoZWNrcyByZWctJmd0O2lkICh0aGUgbGlua2VkIHRhcmdldCByZWdpc3RlcikKLSAqIGZvciBCUEZfQUREX0NPTlNUMzIgcmF0aGVyIHRoYW4ga25vd25fcmVnLSZndDtpZCAodGhlIGJyYW5jaCByZWdpc3RlcikuCiYjNDM7ICogVGVzdCB0aGF0IHN5bmNfbGlua2VkX3JlZ3MoKSBjaGVja3MgdGhlIGxpbmtlZCB0YXJnZXQgcmVnaXN0ZXIgKHJlZykgZm9yCiYjNDM7ICogQUREX0NPTlNUXzMyIHJhdGhlciB0aGFuIHRoZSBicmFuY2ggcmVnaXN0ZXIgKGtub3duX3JlZykuCiAgKi8KIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19zdWNjZXNzCkBAIC0zNjAsNyAmIzQzOzM2MCw3IEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX3pleHRfbGlua2VkX3JlZyh2b2lkKQogCWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAogCXc2ID0gdzA7CQkvKiByNiBpbiBbMCwgMHhGRkZGRkZGRl0gKi8JXAogCXI3ID0gcjY7CQkvKiBsaW5rZWQ6IHNhbWUgaWQgYXMgcjYgKi8JXAotCXc3ICYjNDM7PSAxOwkJLyogYWx1MzI6IHI3LmlkIHw9IEJQRl9BRERfQ09OU1QzMiAqLyBcCiYjNDM7CXc3ICYjNDM7PSAxOwkJLyogQUREX0NPTlNUXzMyIGRlbHRhICovIFwKIAlyOCA9IDB4RkZGRmZmZmYgbGw7CQkJCQlcCiAJaWYgcjYgJmx0OyByOCBnb3RvIGwwXyU9OwkJCQkJXAogCS8qIHI2IGluIFsweEZGRkZGRkZGLCAweEZGRkZGRkZGXSAqLwkJCVwKQEAgLTM4MSw3ICYjNDM7MzgxLDcgQEAgbDBfJT06CQkJCQkJCQlcCiAKIC8qCiAgKiBUZXN0IHRoYXQgc3luY19saW5rZWRfcmVncygpIHNraXBzIHByb3BhZ2F0aW9uIHdoZW4gb25lIHJlZ2lzdGVyIHVzZWQKLSAqIGFsdTMyIChCUEZfQUREX0NPTlNUMzIpIGFuZCB0aGUgb3RoZXIgdXNlZCBhbHU2NCAoQlBGX0FERF9DT05TVDY0KS4KJiM0MzsgKiBhbHUzMiAoQUREX0NPTlNUXzMyKSBhbmQgdGhlIG90aGVyIHVzZWQgYWx1NjQgKEFERF9DT05TVF82NCkuCiAgKiBUaGUgZGVsdGEgcmVsYXRpb25zaGlwIGRvZXNuJiMzOTt0IGhvbGQgYWNyb3NzIGRpZmZlcmVudCBBTFUgd2lkdGhzLgogICovCiBTRUMoJiMzNDtzb2NrZXQmIzM0OykKQEAgLTM5MiwxMyAmIzQzOzM5MiwxMyBAQCBfX25ha2VkIHZvaWQgc2NhbGFyc19hbHUzMl9hbHU2NF9jcm9zc190eXBlKHZvaWQpCiAJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiAJdzYgPSB3MDsJCS8qIHI2IGluIFswLCAweEZGRkZGRkZGXSAqLwlcCiAJcjcgPSByNjsJCS8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqLwlcCi0JdzcgJiM0Mzs9IDE7CQkvKiBhbHUzMjogQlBGX0FERF9DT05TVDMyLCBkZWx0YSA9IDEgKi8gXAomIzQzOwl3NyAmIzQzOz0gMTsJCS8qIEFERF9DT05TVF8zMiBkZWx0YSAqLyBcCiAJcjggPSByNjsJCS8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqLwlcCi0JcjggJiM0Mzs9IDI7CQkvKiBhbHU2NDogQlBGX0FERF9DT05TVDY0LCBkZWx0YSA9IDIgKi8gXAomIzQzOwlyOCAmIzQzOz0gMjsJCS8qIEFERF9DT05TVF82NCBkZWx0YSAqLyBcCiAJcjkgPSAweEZGRkZmZmZmIGxsOwkJCQkJXAogCWlmIHI3ICZsdDsgcjkgZ290byBsMF8lPTsJCQkJCVwKIAkvKiByNyA9IDB4RkZGRkZGRkYgKi8JCQkJCVwKLQkvKiBzeW5jOiBrbm93bl9yZWc9cjcgKEFERF9DT05TVDMyKSwgcmVnPXI4IChBRERfQ09OU1Q2NCkgKi8gXAomIzQzOwkvKiBzeW5jOiBrbm93bl9yZWc9cjcgKEFERF9DT05TVF8zMiksIHJlZz1yOCAoQUREX0NPTlNUXzY0KSAqLyBcCiAJLyogV2l0aG91dCBmaXg6IHI4ID0gemV4dCgweEZGRkZGRkZGICYjNDM7IDEpID0gMCAqLwlcCiAJLyogV2l0aCBmaXg6IHI4IHN0YXlzIFsyLCAweDEwMDAwMDAwMV0gKHI4ICZndDs9IDIpICovCVwKIAlpZiByOCAmZ3Q7IDAgZ290byBsMV8lPTsJCQkJCVwKQEAgLTQxNiw3ICYjNDM7NDE2LDcgQEAgbDBfJT06CQkJCQkJCQlcCiAvKgogICogVGVzdCB0aGF0IHJlZ3NhZmUoKSBwcmV2ZW50cyBwcnVuaW5nIHdoZW4gdHdvIHBhdGhzIHJlYWNoIHRoZSBzYW1lIHByb2dyYW0KICAqIHBvaW50IHdpdGggbGlua2VkIHJlZ2lzdGVycyBjYXJyeWluZyBkaWZmZXJlbnQgQUREX0NPTlNUIGZsYWdzIChvbmUKLSAqIEJQRl9BRERfQ09OU1QzMiBmcm9tIGFsdTMyLCBhbm90aGVyIEJQRl9BRERfQ09OU1Q2NCBmcm9tIGFsdTY0KS4KJiM0MzsgKiBBRERfQ09OU1RfMzIgZnJvbSBhbHUzMiwgYW5vdGhlciBBRERfQ09OU1RfNjQgZnJvbSBhbHU2NCkuCiAgKi8KIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7ZGl2IGJ5IHplcm8mIzM0OykKQEAgLTQzMSwxMSAmIzQzOzQzMSwxMSBAQCBfX25ha2VkIHZvaWQgc2NhbGFyc19hbHUzMl9hbHU2NF9yZWdzYWZlX3BydW5pbmcodm9pZCkKIAljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKIAlpZiByMCAmZ3Q7IDAgZ290byBsX3BhdGhiXyU9OwkJCQlcCiAJLyogUGF0aCBBOiBhbHUzMiAqLwkJCQkJXAotCXc3ICYjNDM7PSAxOwkJLyogQlBGX0FERF9DT05TVDMyLCBkZWx0YSA9IDEgKi9cCiYjNDM7CXc3ICYjNDM7PSAxOwkJLyogQUREX0NPTlNUXzMyIGRlbHRhICovXAogCWdvdG8gbF9tZXJnZV8lPTsJCQkJCVwKIGxfcGF0aGJfJT06CQkJCQkJCVwKIAkvKiBQYXRoIEI6IGFsdTY0ICovCQkJCQlcCi0JcjcgJiM0Mzs9IDE7CQkvKiBCUEZfQUREX0NPTlNUNjQsIGRlbHRhID0gMSAqL1wKJiM0MzsJcjcgJiM0Mzs9IDE7CQkvKiBBRERfQ09OU1RfNjQgZGVsdGEgKi9cCiBsX21lcmdlXyU9OgkJCQkJCQlcCiAJLyogTWVyZ2UgcG9pbnQ6IHJlZ3NhZmUoKSBjb21wYXJlcyBwYXRoIEIgYWdhaW5zdCBjYWNoZWQgcGF0aCBBLiAqLyBcCiAJLyogTmFycm93IHI2IHRvIHRyaWdnZXIgc3luY19saW5rZWRfcmVncyBmb3IgcjcgKi8JXApAQCAtNTkzLDcgJiM0Mzs1OTMsNyBAQCBsX2V4aXRfJT06CQkJCQkJCVwKIH0KIAogLyoKLSAqIFRlc3QgdGhhdCBzdGFsZSBkZWx0YSBmcm9tIGEgY2xlYXJlZCBCUEZfQUREX0NPTlNUIGRvZXMgbm90IGxlYWsKJiM0MzsgKiBUZXN0IHRoYXQgc3RhbGUgZGVsdGEgZnJvbSBhIGNsZWFyZWQgQUREX0NPTlNUXyogZG9lcyBub3QgbGVhawogICogdGhyb3VnaCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoKSBpbnRvIGEgbmV3IGlkLCBjYXVzaW5nCiAgKiBzeW5jX2xpbmtlZF9yZWdzKCkgdG8gY29tcHV0ZSBhbiBpbmNvcnJlY3Qgb2Zmc2V0LgogICovCkBAIC02MDUsMTAgJiM0Mzs2MDUsMTAgQEAgX19uYWtlZCB2b2lkIHNjYWxhcnNfc3RhbGVfZGVsdGFfZnJvbV9jbGVhcmVkX2lkKHZvaWQpCiAJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKIAljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKIAlyNiA9IHIwOwkJLyogcjYgdW5rbm93biwgZ2V0cyBpZCBBICovCVwKLQlyNiAmIzQzOz0gNTsJCS8qIGlkIEF8QUREX0NPTlNULCBkZWx0YSA1ICovCVwKJiM0MzsJcjYgJiM0Mzs9IDU7CQkvKiBpZCBBLCBBRERfQ09OU1RfNjQgZGVsdGEgKi8JXAogCXI2IF49IDA7CQkvKiBpZCBjbGVhcmVkOyBkZWx0YSBzdGF5cyA1ICovCVwKIAlyOCA9IHI2OwkJLyogbmV3IGlkIEIsIHN0YWxlIGRlbHRhIDUgKi8JXAotCXI4ICYjNDM7PSAzOwkJLyogaWQgQnxBRERfQ09OU1QsIGRlbHRhIDMgKi8JXAomIzQzOwlyOCAmIzQzOz0gMzsJCS8qIGlkIEIsIEFERF9DT05TVF82NCBkZWx0YSAqLwlcCiAJcjkgPSByNjsJCS8qIGlkIEIsIHN0YWxlIGRlbHRhIDUgKi8JXAogCWlmIHI5ICE9IDEwIGdvdG8gbF9leGl0XyU9OwkJCQlcCiAJLyogQnVnOiByOCA9IDEwJiM0MzsoMy01KSA9IDg7IEZpeDogcjggPSAxMCYjNDM7KDMtMCkgPSAxMyAqLwlcCkBAIC02NDgsMTAgJiM0Mzs2NDgsMTAgQEAgbF9leGl0XyU9OgkJCQkJCQlcCiB9CiAKIC8qCi0gKiBUZXN0IHRoYXQgcmVnc2FmZSgpIHZlcmlmaWVzIGJhc2VfaWQgY29uc2lzdGVuY3kgZm9yIEJQRl9BRERfQ09OU1QKJiM0MzsgKiBUZXN0IHRoYXQgcmVnc2FmZSgpIHZlcmlmaWVzIGJhc2VfaWQgY29uc2lzdGVuY3kgZm9yIEFERF9DT05TVF8qCiAgKiBsaW5rZWQgc2NhbGFycyBkdXJpbmcgc3RhdGUgcHJ1bmluZy4KICAqCi0gKiBUaGUgZmFsc2UgYnJhbmNoIChleHBsb3JlZCBmaXJzdCkgbGlua3MgUjMgdG8gUjIgdmlhIEFERF9DT05TVC4KJiM0MzsgKiBUaGUgZmFsc2UgYnJhbmNoIChleHBsb3JlZCBmaXJzdCkgbGlua3MgUjMgdG8gUjIgdmlhIEFERF9DT05TVF82NC4KICAqIFRoZSB0cnVlIGJyYW5jaCAocnVudGltZSBwYXRoKSBsaW5rcyBSMyB0byBSNCAodW5yZWxhdGVkIGJhc2VfaWQpLgogICogQXQgdGhlIG1lcmdlIHBvaW50LCBwcnVuaW5nIG11c3QgZmFpbCBiZWNhdXNlIHRoZSBsaW5rYWdlIHRvcG9sb2d5CiAgKiBkaWZmZXJzLgpAQCAtNjc1LDcgJiM0Mzs2NzUsNyBAQCBfX25ha2VkIHZvaWQgYWRkX2NvbnN0X2Jhc2VfaWRfcHJ1bmluZyh2b2lkKQogCXIyID0gcjA7CQkJCQkJXAogCXIyICZhbXA7PSAweGZmOwkJLyogUjIgPSBzY2FsYXIoaWQ9QSkgWzAsMjU1XSAqLwlcCiAJcjMgPSByMjsJCS8qIFIzIGxpbmtlZCB0byBSMiAoaWQ9QSkgKi8JXAotCXIzICYjNDM7PSAxMDsJCS8qIFIzIGlkPUF8QUREX0NPTlNULCBkZWx0YT0xMCAqL1wKJiM0MzsJcjMgJiM0Mzs9IDEwOwkJLyogQUREX0NPTlNUXzY0IGRlbHRhICovXAogCXI2ID0gMDsJCQkJCQkJXAogCWdvdG8gbF9tZXJnZV8lPTsJCQkJCVwKIAkJCQkJCQkJXApAQCAtNjg3LDcgJiM0Mzs2ODcsNyBAQCBsX3RydWVfJT06CQkJCQkJCVwKIAlyNCA9IHIwOwkJCQkJCVwKIAlyNCAmYW1wOz0gMHhmZjsJCS8qIFI0ID0gc2NhbGFyIFswLDI1NV0sIGlkPTAgKi8JXAogCXIzID0gcjQ7CQkvKiBSMyBsaW5rZWQgdG8gUjQgKG5ldyBpZD1DKSAqL1wKLQlyMyAmIzQzOz0gMTA7CQkvKiBSMyBpZD1DfEFERF9DT05TVCwgZGVsdGE9MTAgKi9cCiYjNDM7CXIzICYjNDM7PSAxMDsJCS8qIEFERF9DT05TVF82NCBkZWx0YSAqL1wKIAlyNiA9IDA7CQkJCQkJCVwKIAkJCQkJCQkJXAogbF9tZXJnZV8lPToJCQkJCQkJXApAQCAtNzEwLDQgJiM0Mzs3MTAsNjIzIEBAIGxfZXhpdF8lPToJCQkJCQkJXAogCTogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEEgMzItYml0IG1vdiBmcm9tIGEgd2lkZSBzb3VyY2Ugc2hhcmVzIG9ubHkgdGhlIGxvdyAzMiBiaXRzLiBOYXJyb3dpbmcgdGhlCiYjNDM7ICogc291cmNlIG11c3QgcmVhY2ggdGhlIGRlc3RpbmF0aW9uIHRocm91Z2ggdGhhdCBsaW5rLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X21vdl9uYXJyb3dfc3JjKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXc3ID0gdzY7CQkvKiBmb3JtcyB0aGUgbGluayAqLwkJXAomIzQzOwlpZiB3NiAhPSAwIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXAomIzQzOwlpZiB3NyA9PSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHJldmVyc2UgZG9lcyBub3QgaG9sZDogbmFycm93aW5nIHRoZSBsb3ctMzIgbGluayBzYXlzIG5vdGhpbmcgYWJvdXQgdGhlCiYjNDM7ICogYmFzZSYjMzk7cyBoaWdoIGJpdHMsIHNvIHI2IG11c3Qgc3RheSB1bmtub3duIGFuZCB0aGUgZGl2IHN0YXlzIHJlYWNoYWJsZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19kc3Rfa2VlcHNfYmFzZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwl3NyA9IHc2OwkJLyogZm9ybXMgdGhlIGxpbmsgKi8JCVwKJiM0MzsJaWYgcjcgIT0gMCBnb3RvIDFmOwkvKiBuYXJyb3dzIHI3LCBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjYgKi8gXAomIzQzOwlpZiByNiA9PSAwIGdvdG8gMWY7CS8qIHRha2VuIG9ubHkgaWYgcjYgd3JvbmdseSBuYXJyb3dlZCAqLwlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBwcm92YWJseS11MzIgc291cmNlIHRha2VzIHRoZSBmdWxsLWVxdWFsaXR5IHBhdGgsIG5vdCB0aGUgbG93LTMyIG9uZToKJiM0MzsgKiBuYXJyb3dpbmcgdGhlIGRlc3RpbmF0aW9uIG11c3QgcmVhY2ggdGhlIHNvdXJjZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgemV4dF91MzJfc3JjX2lzX2Z1bGxfbGluayh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXc2ID0gdzA7CQkvKiByNiBwcm92YWJseSB1MzIgKi8JCVwKJiM0MzsJdzcgPSB3NjsJCS8qIGZ1bGwgbGluaywgbm90IGxvdy0zMiAqLwlcCiYjNDM7CWlmIHI3ICZndDsgMTAgZ290byAxZjsJLyogbmFycm93cyByNywgcHJvcGFnYXRlcyB0byByNiAqLyBcCiYjNDM7CWlmIHI2ICZndDsgMTAgZ290byAyZjsJCQkJCVwKJiM0MzsJZ290byAxZjsJCQkJCQlcCiYjNDM7MjoJCQkJCQkJCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIHNlbGYtbW92IGhhcyBub3RoaW5nIHRvIGxpbmssIHNvIGl0IG11c3Qgbm90IG1pbnQgYW4gaWQgZm9yIHI2LgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzOy8qIGFuIGlkIHdvdWxkIHByaW50IGFzIFI2PXNjYWxhcihpZD1OLmxvMzIsc21pbj0uLi4gKi8KJiM0MztfX21zZygmIzM0OyhiYykgdzYgPSB3NiB7ey4qfX0gUjY9c2NhbGFyKHNtaW49MCwmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9zZWxmX21vdl9ub19saW5rKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXI2IF49IDA7CQkvKiBkcm9wIHRoZSBpZCAqLwkJXAomIzQzOwl3NiA9IHc2OwkJLyogZm9ybXMgbm8gbGluayAqLwkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgbG93LTMyLWxpbmtlZCBzb3VyY2Uga2VlcHMgaXRzIGlkIGFuZCBmbGFnIGFjcm9zcyBhIGZ1cnRoZXIgMzItYml0IG1vdiwKJiM0MzsgKiBzbyBuYXJyb3dpbmcgdGhlIGJhc2Ugc3RpbGwgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBjaGFpbi4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgemV4dF9jaGFpbl9rZWVwc19saW5rKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXc3ID0gdzY7CQkvKiBmb3JtcyB0aGUgbGluayAqLwkJXAomIzQzOwl3OCA9IHc3OwkJLyogbGluayBzdXJ2aXZlcyB0aGUgMm5kIG1vdiAqLwlcCiYjNDM7CWlmIHc2ICE9IDAgZ290byAxZjsJLyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByOCAqLyBcCiYjNDM7CWlmIHc4ID09IDAgZ290byAxZjsJCQkJCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGRlbHRhIG9uIGVpdGhlciBzaWRlIGlzIG5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGEgbG93LTMyIGxpbmssIHNvIG5vCiYjNDM7ICogcmFuZ2UgcHJvcGFnYXRlczogaGVyZSB0aGUgYnJhbmNoIHJlZ2lzdGVyIGNhcnJpZXMgdGhlIGRlbHRhLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXc3ID0gdzY7CQkvKiBmb3JtcyB0aGUgbGluayAqLwkJXAomIzQzOwlyOCA9IHI2OwkJCQkJCVwKJiM0MzsJcjggJiM0Mzs9IDM7CQkvKiBkZWx0YSBvbiB0aGUgYnJhbmNoIHJlZyAqLwlcCiYjNDM7CWlmIHI4ICE9IDMgZ290byAxZjsJLyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI3ICovCVwKJiM0MzsJaWYgdzcgPT0gMCBnb3RvIDFmOwkJCQkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIC4uLiBhbmQgaGVyZSB0aGUgbG93LTMyIGxpbmsgaXMgdGhlIGJyYW5jaCByZWdpc3Rlciwgc28gdGhlIHJlZ2lzdGVyCiYjNDM7ICogY2FycnlpbmcgdGhlIGRlbHRhIG11c3Qgbm90IGJlIG5hcnJvd2VkIGVpdGhlci4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25vX3N5bmNfZnJvbV9zdWJyZWdfYmFzZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwl3NyA9IHc2OwkJLyogZm9ybXMgdGhlIGxpbmsgKi8JCVwKJiM0MzsJcjggPSByNjsJCQkJCQlcCiYjNDM7CXI4ICYjNDM7PSAzOwkJLyogZGVsdGEgb24gcjggKi8JCVwKJiM0MzsJaWYgdzcgIT0gMCBnb3RvIDFmOwkvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi8JXAomIzQzOwlpZiByOCA9PSAzIGdvdG8gMWY7CS8qIHRha2VuIG9ubHkgaWYgcjggd3JvbmdseSBuYXJyb3dlZCAqLwlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVHdvIGxvdy0zMiBsaW5rcyBvbiB0aGUgc2FtZSBiYXNlIGRvIHByb3BhZ2F0ZSB0byBlYWNoIG90aGVyOiBib3RoIGFyZSB0aGUKJiM0MzsgKiB6ZXJvLWV4dGVuc2lvbiBvZiB0aGUgc2FtZSBsb3cgMzIgYml0cy4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgemV4dF9zeW5jX2JldHdlZW5fdHdvX3N1YnJlZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJdzcgPSB3NjsJCS8qIHR3byBsaW5rcyBvbiBvbmUgYmFzZSAqLwlcCiYjNDM7CXc4ID0gdzY7CQkJCQkJXAomIzQzOwlpZiB3NyAhPSAwIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjcsIHByb3BhZ2F0ZXMgdG8gcjggKi8gXAomIzQzOwlpZiB3OCA9PSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT25seSBvbmUgb2YgdGhlIHR3byBwYXRocyBsaW5rcyByNyB0byByOCwgc28gdGhlIG5hcnJvd2luZyBvZiB3OCByZWFjaGVzIHI3CiYjNDM7ICogb24gb25lIGFuZCBub3QgdGhlIG90aGVyIGFuZCB0aGUgZGl2IHN0YXlzIHJlYWNoYWJsZS4gVGhpcyBjaGVja3MgdGhlCiYjNDM7ICogb3V0Y29tZSwgbm90IHRoZSBtZWNoYW5pc206IHRoZSB0d28gc3RhdGVzIGRpZmZlciBpbiB0aGVpciBpZHMgYW5kIGNvbnRlbnRzLAomIzQzOyAqIHNvIHJlZ3NhZmUoKSBoYXMgbWFueSByZWFzb25zIHRvIGtlZXAgdGhlbSBhcGFydCBhbmQgZGlzYWJsaW5nIGFueSBzaW5nbGUKJiM0MzsgKiBvbmUgb2YgaXRzIGNoZWNrcyBkb2VzIG5vdCBtYWtlIHRoaXMgZmFpbC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfdW5saW5rZWRfcGF0aF9zdGF5c19yZWFjaGFibGUodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjYgJmFtcDs9IDE7CQkJCQkJXAomIzQzOwlpZiByNiAmZ3Q7PSAxIGdvdG8gMmY7CQkJCQlcCiYjNDM7CS8qIGV4cGxvcmVkIGZpcnN0OiByNyBpcyBhIGxvdy0zMiBsaW5rIG9mIHI4ICovCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyOCA9IHIwOwkJCQkJCVwKJiM0MzsJdzcgPSB3ODsJCS8qIGZvcm1zIHRoZSBsaW5rICovCQlcCiYjNDM7CWdvdG8gMWY7CQkJCQkJXAomIzQzOzI6CQkJCQkJCQlcCiYjNDM7CS8qIHJ1bnRpbWUgcGF0aDogcjcgdW5yZWxhdGVkIHRvIHI4ICovCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjggPSByMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwl3NyA9IHcwOwkJLyogbm8gbGluayBoZXJlICovCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJaWYgdzggIT0gMCBnb3RvIDNmOwkvKiBwcm9wYWdhdGVzIHRvIHI3IG9ubHkgaWYgbGlua2VkICovIFwKJiM0MzsJaWYgdzcgPT0gMCBnb3RvIDNmOwkJCQkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzszOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZvcm1pbmcgdGhlIGxpbmsgY2FsbHMgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KCksIHdoaWNoIGRyb3BzIGEgZGVsdGEKJiM0MzsgKiBsaW5rIG9uIHRoZSBzb3VyY2UuIFRoYXQgaXMgd2hhdCB0aGUgbmFycm93LXNvdXJjZSBwYXRoIGhhcyBhbHdheXMgZG9uZSwKJiM0MzsgKiBzbyBhIHdpZGUgc291cmNlIGJlaGF2ZXMgdGhlIHNhbWU6IHI1IHN0b3BzIHRyYWNraW5nIHI2LgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbW92X2JyZWFrc19hZGRfY29uc3Rfc3JjKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXI1ID0gcjY7CQkvKiByNSwgcjYgbGlua2VkICovCQlcCiYjNDM7CXI1ICYjNDM7PSAzOwkJLyogcjUgPSBiYXNlICYjNDM7IDMgKi8JCVwKJiM0MzsJdzcgPSB3NTsJCS8qIGJyZWFrcyByNSYjMzk7cyBkZWx0YSBsaW5rICovCVwKJiM0MzsJaWYgcjYgJmd0OyA5IGdvdG8gMWY7CS8qIHI2IGluIFswLCA5XSAqLwkJXAomIzQzOwlpZiByNSAmbHQ7IDEzIGdvdG8gMWY7CS8qIHRha2VuIG9ubHkgaWYgcjUgc3RpbGwgbGlua2VkICovIFwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIG5hcnJvd2luZyBmaWxsIGtlZXBzIG9ubHkgdGhlIHNsb3QmIzM5O3MgbG93IDMyIGJpdHMsIHNvIGEgbGF0ZXIgbmFycm93aW5nIG9mCiYjNDM7ICogdGhlIHNwaWxsZWQgdmFsdWUgbXVzdCBzdGlsbCByZWFjaCB0aGUgZmlsbGVkIHJlZ2lzdGVyLiBTYW1lIHJlbGF0aW9uIGFzIGEKJiM0MzsgKiAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSwgd2l0aCB0aGUgc3RhY2sgc2xvdCBhcyB0aGUgYmFzZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgemV4dF9maWxsX25hcnJvd19mcm9tX3dpZGVfc3BpbGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXIwICZsdDsmbHQ7PSAzMjsJCQkJCQlcCiYjNDM7CXI2IHw9IHIwOwkJLyogcjYgPSBmdWxsIDY0LWJpdCB1bmtub3duICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByNjsJLyogc2xvdCBsaW5rZWQgdG8gcjYgKi8JCVwKJiM0MzsJcjIgPSAqKHUzMiAqKShyMTAgLSA4KTsJLyogbmFycm93aW5nIGZpbGwsIGZvcm1zIHRoZSBsaW5rICovIFwKJiM0MzsJaWYgdzYgIT0gMCBnb3RvIDFmOwkvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHIyICovIFwKJiM0MzsJaWYgcjIgPT0gMCBnb3RvIDFmOwkJCQkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgZnVsbC13aWR0aCBmaWxsIG9mIGEgd2lkZSBzbG90IGlzIGEgcGxhaW4gNjQtYml0IGVxdWFsaXR5LCBub3QgYSBsb3ctMzIKJiM0MzsgKiBsaW5rLCBzbyBpdCBtdXN0IGtlZXAgcHJvcGFnYXRpbmcgZXhhY3RseSBhcyBiZWZvcmUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfZmlsbF9mdWxsX3dpZHRoX2tlZXBzX2Z1bGxfbGluayh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjAgJmx0OyZsdDs9IDMyOwkJCQkJCVwKJiM0MzsJcjYgfD0gcjA7CQkJCQkJXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IHI2OwkJCQkJXAomIzQzOwlyMiA9ICoodTY0ICopKHIxMCAtIDgpOwkvKiBubyBuYXJyb3dpbmcgKi8JCVwKJiM0MzsJaWYgcjYgIT0gMCBnb3RvIDFmOwkJCQkJXAomIzQzOwlpZiByMiA9PSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBzdWItd29yZCBmaWxsIGlzIGJlbG93IHRoZSBsb3ctMzIgbW9kZWwsIHNvIG5vIGxpbmsgaXMgZm9ybWVkIGFuZCB0aGUKJiM0MzsgKiByZWxhdGlvbiBpcyBkcm9wcGVkIGFzIGJlZm9yZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2ZpbGxfYnl0ZV9mb3Jtc19ub19saW5rKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyMCAmbHQ7Jmx0Oz0gMzI7CQkJCQkJXAomIzQzOwlyNiB8PSByMDsJCQkJCQlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gcjY7CQkJCQlcCiYjNDM7CXIyID0gKih1OCAqKShyMTAgLSA4KTsJLyogMS1ieXRlIGZpbGw6IG5vIGxpbmsgKi8JXAomIzQzOwlpZiB3NiAhPSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CWlmIHIyID09IDAgZ290byAxZjsJLyogbm90IGRlZHVjZWQgKi8JCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIG5hcnJvd2luZyBzcGlsbCBzdG9yZXMgb25seSB0aGUgc291cmNlJiMzOTtzIGxvdyAzMiBiaXRzLCBzbyB0aGUgc2xvdCBpcyB0aGVpcgomIzQzOyAqIHplcm8tZXh0ZW5zaW9uLiBBIGxhdGVyIG5hcnJvd2luZyBvZiB0aGUgc291cmNlIG11c3Qgc3RpbGwgcmVhY2ggYW55dGhpbmcKJiM0MzsgKiBmaWxsZWQgYmFjayBvdXQgb2YgdGhhdCBzbG90LgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9rZWVwc19saW5rKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyMCAmbHQ7Jmx0Oz0gMzI7CQkJCQkJXAomIzQzOwlyNiB8PSByMDsJCS8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqLwlcCiYjNDM7CSoodTMyICopKHIxMCAtIDgpID0gcjY7CS8qIG5hcnJvd2luZyBzcGlsbCwgZm9ybXMgdGhlIGxpbmsgKi8gXAomIzQzOwlyMiA9ICoodTMyICopKHIxMCAtIDgpOwkvKiBmaWxsIGl0IGJhY2sgKi8JCVwKJiM0MzsJaWYgdzYgIT0gMCBnb3RvIDFmOwkvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHIyICovIFwKJiM0MzsJaWYgcjIgPT0gMCBnb3RvIDFmOwkJCQkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgc3ViLXdvcmQgc3BpbGwgaXMgYmVsb3cgdGhlIGxvdy0zMiBtb2RlbCwgc28gbm8gbGluayBpcyBmb3JtZWQgdGhlcmUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZGl2IGJ5IHplcm8mIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9uYXJyb3dpbmdfc3BpbGxfYnl0ZV9ub19saW5rKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyMCAmbHQ7Jmx0Oz0gMzI7CQkJCQkJXAomIzQzOwlyNiB8PSByMDsJCQkJCQlcCiYjNDM7CSoodTggKikocjEwIC0gOCkgPSByNjsJLyogMS1ieXRlIHNwaWxsOiBubyBsaW5rICovCVwKJiM0MzsJcjIgPSAqKHU4ICopKHIxMCAtIDgpOwkJCQkJXAomIzQzOwlpZiB3NiAhPSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CWlmIHIyID09IDAgZ290byAxZjsJLyogbm90IGRlZHVjZWQgKi8JCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENBTl9VU0VfTU9WU1gKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgMzItYml0IHNpZ24gZXh0ZW5zaW9uIGtlZXBzIHRoZSBsb3cgMzIgYml0cywgc28gbmFycm93aW5nIHRoZSBzb3VyY2UKJiM0MzsgKiByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbiB0aGUgc2FtZSB3YXkgaXQgZG9lcyBmb3IgYSB6ZXJvIGV4dGVuc2lvbi4gVGhlIGhpZ2gKJiM0MzsgKiBoYWxmIGZvbGxvd3MgdGhlIHNpZ24sIHNvIHRoZSB2YWx1ZSBzZWVuIGhlcmUgaXMgbmVnYXRpdmUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHNleHRfbW92X3dpZGVfc3JjKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXI3ID0gKHMzMilyNjsJCS8qIGZvcm1zIHRoZSBsaW5rICovCQlcCiYjNDM7CWlmIHc2ICE9IC0xIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXAomIzQzOwlpZiByNyA9PSAtMSBnb3RvIDFmOwkvKiBzaWduLWV4dGVuZGVkLCBub3QgMHhmZmZmZmZmZiAqLyBcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogcjAgPSAoczMyKXIwIGlzIGhvdyBhIHNpZ24tZXh0ZW5kZWQgaW50IHJldHVybiBsYW5kcy4gc3JjIGFuZCBkc3QgYXJlIHRoZQomIzQzOyAqIHNhbWUgcmVnaXN0ZXIsIGJ1dCByMCBpcyBhbHJlYWR5IGxpbmtlZCwgc28gdGhlcmUgaXMgYSBzZXQgZm9yIGl0IHRvIHN0YXkKJiM0MzsgKiBpbiBhbmQgdGhlIG5hcnJvd2luZyBzdGlsbCBwcm9wYWdhdGVzLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X2tlZXBzX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjcgPSByNjsJCS8qIHI2LCByNyBsaW5rZWQgKi8JCVwKJiM0MzsJcjcgPSAoczMyKXI3OwkJLyogc2VsZi1tb3YsIGtlZXBzIHRoZSBpZCAqLwlcCiYjNDM7CWlmIHc2ICE9IC0xIGdvdG8gMWY7CS8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXAomIzQzOwlpZiByNyA9PSAtMSBnb3RvIDFmOwkJCQkJXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBzYW1lIHNlbGYtbW92IG9uIGFuIHVubGlua2VkIHJlZ2lzdGVyIGhhcyBub3RoaW5nIHRvIGxpbmsgdG8sIHNvIGl0CiYjNDM7ICogbXVzdCBub3QgbWludCBhbiBpZCB0aGF0IHdvdWxkIGxlYXZlIHI2IGRlc2NyaWJpbmcgaXRzZWxmLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzOy8qIGFuIGlkIHdvdWxkIHByaW50IGFzIFI2PXNjYWxhcihpZD1OLmxvMzJzeCxzbWluPS4uLiAqLwomIzQzO19fbXNnKCYjMzQ7KGJmKSByNiA9IChzMzIpcjYge3suKn19IFI2PXNjYWxhcihzbWluPSYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjYgXj0gMDsJCS8qIGRyb3AgdGhlIGlkICovCQlcCiYjNDM7CXI2ID0gKHMzMilyNjsJCS8qIGZvcm1zIG5vIGxpbmsgKi8JCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnaXN0ZXIgaXMgbm90IG1vZGVsbGVkIHRvZ2V0aGVyIHdpdGggYSBsb3ctMzIKJiM0MzsgKiBsaW5rLCBzbyB0aGUgcHJvcGFnYXRpb24gaXMgc2tpcHBlZCByYXRoZXIgdGhhbiBndWVzc2VkIGF0LgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHNleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXI3ID0gKHMzMilyNjsJCS8qIGZvcm1zIHRoZSBsaW5rICovCQlcCiYjNDM7CXI4ID0gcjY7CQkJCQkJXAomIzQzOwlyOCAmIzQzOz0gMzsJCS8qIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnICovCVwKJiM0MzsJaWYgcjggIT0gMyBnb3RvIDFmOwkvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjcgKi8JXAomIzQzOwlpZiByNyA9PSAwIGdvdG8gMWY7CQkJCQlcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzE6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogLi4uIGFuZCB3aXRoIHRoZSBsaW5rIGFzIHRoZSBicmFuY2ggcmVnaXN0ZXIgdGhlIHByb3BhZ2F0aW9uIG11c3Qgbm90IHJ1bgomIzQzOyAqIGJhY2t3YXJkczogYSAtJmd0O3N1YnJlZyByZWdpc3RlciBrbm93cyBub3RoaW5nIGFib3V0IHRoZSBiYXNlJiMzOTtzIGhpZ2ggaGFsZiwgc28KJiM0MzsgKiBuYXJyb3dpbmcgaXQgbXVzdCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgc2V0IGFsb25lLiBXZXJlIHRoZSBndWFyZCBtaXNzaW5nLAomIzQzOyAqIHI4IHdvdWxkIGJlIHJlYnVpbHQgYXMgcjcgJiM0MzsgMyA9PSAyLCB0cmVhdGluZyByNyBhcyBpZiBpdCB3ZXJlIHRoZSBiYXNlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RpdiBieSB6ZXJvJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHNleHRfbm9fc3luY19mcm9tX3N1YnJlZ19iYXNlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCQlcCiYjNDM7CXI3ID0gKHMzMilyNjsJCS8qIGZvcm1zIHRoZSBsaW5rICovCQlcCiYjNDM7CXI4ID0gcjY7CQkJCQkJXAomIzQzOwlyOCAmIzQzOz0gMzsJCS8qIGRlbHRhIG9uIHI4ICovCQlcCiYjNDM7CWlmIHI3ICE9IC0xIGdvdG8gMWY7CS8qIG11c3Qgbm90IHByb3BhZ2F0ZSB0byByOCAqLwlcCiYjNDM7CWlmIHI4ID09IDIgZ290byAxZjsJLyogdGFrZW4gb25seSBpZiByOCB3cm9uZ2x5IG5hcnJvd2VkICovCVwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgdHdvIGtpbmRzIHJlYnVpbGQgdGhlIGhpZ2ggaGFsZiBkaWZmZXJlbnRseTogdGhlIHNhbWUgbG93IGhhbGYgcmVhY2hlcwomIzQzOyAqIC0xIHRocm91Z2ggYSBzaWduIGV4dGVuc2lvbiBhbmQgMHhmZmZmZmZmZiB0aHJvdWdoIGEgemVybyBleHRlbnNpb24sIHNvIG9ubHkKJiM0MzsgKiBvbmUgcGF0aCBjbGVhcnMgdGhlIGd1YXJkLiBBcyBhYm92ZSB0aGlzIGNoZWNrcyB0aGUgb3V0Y29tZSAtLSB0aGUgZGlmZmVyaW5nCiYjNDM7ICogcmFuZ2VzIGtlZXAgdGhlIHN0YXRlcyBhcGFydCBvbiB0aGVpciBvd24uCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZGl2IGJ5IHplcm8mIzM0OykKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO19fbmFrZWQgdm9pZCBzZXh0X2tpbmRzX3JlYWNoX2RpZmZlcmVudF92YWx1ZXModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJCVwKJiM0MzsJcjYgJmFtcDs9IDE7CQkJCQkJXAomIzQzOwlpZiByNiAmZ3Q7PSAxIGdvdG8gMmY7CQkJCQlcCiYjNDM7CS8qIGV4cGxvcmVkIGZpcnN0OiByNyBpcyBhIHNpZ24tZXh0ZW5kZWQgbGluayBvZiByOCAqLwlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyOCA9IHIwOwkJCQkJCVwKJiM0MzsJcjcgPSAoczMyKXI4OwkJCQkJCVwKJiM0MzsJZ290byAxZjsJCQkJCQlcCiYjNDM7MjoJCQkJCQkJCVwKJiM0MzsJLyogcnVudGltZSBwYXRoOiByNyBpcyBhIHplcm8tZXh0ZW5kZWQgbGluayBvZiByOCAqLwlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyOCA9IHIwOwkJCQkJCVwKJiM0MzsJdzcgPSB3ODsJCQkJCQlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJaWYgdzggIT0gLTEgZ290byAzZjsJCQkJCVwKJiM0MzsJaWYgcjcgPT0gLTEgZ290byAzZjsJLyogb25seSB0aGUgc2lnbi1leHRlbmRlZCBwYXRoICovIFwKJiM0MzsJcjAgLz0gMDsJCQkJCQlcCiYjNDM7MzoJCQkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgc2lnbi1leHRlbmRpbmcgY291bnRlcnBhcnQ6IHRoZSBmaWxsZWQgcmVnaXN0ZXIgaXMgdGhlIHNpZ24gZXh0ZW5zaW9uIG9mCiYjNDM7ICogdGhlIHNsb3QmIzM5O3MgbG93IDMyIGJpdHMsIHNvIGEgbmFycm93aW5nIG9mIHRob3NlIGJpdHMgYXJyaXZlcyBzaWduLWV4dGVuZGVkLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbmFrZWQgdm9pZCBzZXh0X2ZpbGxfbmFycm93X2Zyb21fd2lkZV9zcGlsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJCVwKJiM0MzsJcjAgJmx0OyZsdDs9IDMyOwkJCQkJCVwKJiM0MzsJcjYgfD0gcjA7CQkvKiByNiA9IGZ1bGwgNjQtYml0IHVua25vd24gKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IHI2OwkvKiBzbG90IGxpbmtlZCB0byByNiAqLwkJXAomIzQzOwlyMiA9ICooczMyICopKHIxMCAtIDgpOwkvKiBuYXJyb3dpbmcgc3ggZmlsbCAqLwkJXAomIzQzOwlpZiB3NiAhPSAtMSBnb3RvIDFmOwkvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHIyICovIFwKJiM0MzsJaWYgcjIgPT0gLTEgZ290byAxZjsJLyogc2lnbi1leHRlbmRlZCwgbm90IDB4ZmZmZmZmZmYgKi8gXAomIzQzOwlyMCAvPSAwOwkJCQkJCVwKJiM0MzsxOgkJCQkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBzYW1lLCBmb3IgdGhlIHR3byBmaWxsIGtpbmRzIG9mZiBvbmUgc2xvdC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkaXYgYnkgemVybyYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19uYWtlZCB2b2lkIGZpbGxfa2luZHNfcmVhY2hfZGlmZmVyZW50X3ZhbHVlcyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQkJXAomIzQzOwlyNiAmYW1wOz0gMTsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQkJXAomIzQzOwlyOCA9IHIwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCQlcCiYjNDM7CXIwICZsdDsmbHQ7PSAzMjsJCQkJCQlcCiYjNDM7CXI4IHw9IHIwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByODsJCQkJCVwKJiM0MzsJaWYgcjYgJmd0Oz0gMSBnb3RvIDJmOwkJCQkJXAomIzQzOwlyMiA9ICooczMyICopKHIxMCAtIDgpOwkvKiBzaWduLWV4dGVuZGluZyBmaWxsICovCVwKJiM0MzsJZ290byAxZjsJCQkJCQlcCiYjNDM7MjoJCQkJCQkJCVwKJiM0MzsJcjIgPSAqKHUzMiAqKShyMTAgLSA4KTsJLyogemVyby1leHRlbmRpbmcgZmlsbCAqLwlcCiYjNDM7MToJCQkJCQkJCVwKJiM0MzsJaWYgdzggIT0gLTEgZ290byAzZjsJCQkJCVwKJiM0MzsJaWYgcjIgPT0gLTEgZ290byAzZjsJLyogb25seSB0aGUgc2lnbi1leHRlbmRpbmcgcGF0aCAqLyBcCiYjNDM7CXIwIC89IDA7CQkJCQkJXAomIzQzOzM6CQkJCQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZiAvKiBDQU5fVVNFX01PVlNYICovCiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jCmluZGV4IDE5NWIyN2E1MTIyNGYuLjNhMGU2N2ViYjk2M2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jCkBAIC0yMDIsNiAmIzQzOzIwMiw1NyBAQCBsMF8lPToJCQkJCQkJXAogCTogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEEgcmFuZ2UgdGhhdCBhbHJlYWR5IGZpdHMgdGhlIGZpZWxkIGlzIHVuY2hhbmdlZCBieSB0aGUgc2lnbiBleHRlbnNpb24uCiYjNDM7ICogQm90aCBvZiB0aGVzZSBzdHJhZGRsZSB6ZXJvLCBzbyB0aGUgaGlnaCBiaXRzIG9mIHNtaW4gYW5kIHNtYXggZGlmZmVyIGFuZAomIzQzOyAqIHRoZSB0b3BfcypfdmFsdWUgdGVzdCBhbG9uZSB3b3VsZCBmYWxsIGJhY2sgdG8gdGhlIGZ1bGwgZmllbGQgcmFuZ2UuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O01PVjY0U1gsIFMzMiwgbmVnYXRpdmUgcmFuZ2UgaXMgcHJlc2VydmVkJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fc3VjY2Vzc191bnByaXYgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIHZvaWQgbW92NjRzeF9zMzJfbmVnYXRpdmVfcmFuZ2Uodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzAgJmFtcDs9IDB4ZmZmOwkJCQkJXAomIzQzOwlyMCAtPSAweGZmZjsJCQkJCVwKJiM0MzsJLyogcjAgaXMgWy00MDk1LCAwXSwgYWxyZWFkeSBhIHZhbGlkIHMzMiAqLwlcCiYjNDM7CXIwID0gKHMzMilyMDsJCQkJCVwKJiM0MzsJaWYgcjAgcyZsdDsgLTB4ZmZmIGdvdG8gbDBfJT07CQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MztsMF8lPToJCQkJCQkJXAomIzQzOwkvKiB1bnJlYWNoYWJsZSB1bmxlc3MgdGhlIHJhbmdlIHdhcyB3aWRlbmVkICovCVwKJiM0MzsJcjAgLz0gMDsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtNT1Y2NFNYLCBTOCwgbmVnYXRpdmUgcmFuZ2UgaXMgcHJlc2VydmVkJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fc3VjY2Vzc191bnByaXYgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIHZvaWQgbW92NjRzeF9zOF9uZWdhdGl2ZV9yYW5nZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwl3MCAmYW1wOz0gMHgzZjsJCQkJCVwKJiM0MzsJcjAgLT0gMHgzZjsJCQkJCVwKJiM0MzsJLyogcjAgaXMgWy02MywgMF0sIGFscmVhZHkgYSB2YWxpZCBzOCAqLwlcCiYjNDM7CXIwID0gKHM4KXIwOwkJCQkJXAomIzQzOwlpZiByMCBzJmx0OyAtMHgzZiBnb3RvIGwwXyU9OwkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7bDBfJT06CQkJCQkJCVwKJiM0MzsJLyogdW5yZWFjaGFibGUgdW5sZXNzIHRoZSByYW5nZSB3YXMgd2lkZW5lZCAqLwlcCiYjNDM7CXIwIC89IDA7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19kZXNjcmlwdGlvbigmIzM0O01PVjY0U1gsIFMxNiwgUjEwIFNpZ24gRXh0ZW5zaW9uJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSB0eXBlPXNjYWxhciBleHBlY3RlZD1mcCwgcGt0LCBwa3RfbWV0YSwgbWFwX2tleSwgbWFwX3ZhbHVlLCBtZW0sIHJpbmdidWZfbWVtLCBidWYsIHRydXN0ZWRfcHRyXyYjMzQ7KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jCmluZGV4IGRjMWQ4YzMwZmIwZWUuLjM0MjE0ZWM5MjY3MDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yZWdfZXF1YWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmVnX2VxdWFsLmMKQEAgLTMxLDIzICYjNDM7MzEsMjMgQEAgbDFfJT06CWV4aXQ7CQkJCQkJXAogfQogCiBTRUMoJiMzNDtzb2NrZXQmIzM0OykKLV9fZGVzY3JpcHRpb24oJiMzNDtjaGVjayB3IHJlZyBub3QgZXF1YWwgaWYgciByZWcgdXBwZXIzMiBiaXRzIG5vdCAwJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSAhcmVhZF9vayYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjaGVjayB3IHJlZyBlcXVhbCBpZiByIHJlZyB1cHBlcjMyIGJpdHMgbm90IDAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKIF9fbmFrZWQgdm9pZCBzdWJyZWdfZXF1YWxpdHlfMih2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKIAljYWxsICVbYnBmX2t0aW1lX2dldF9uc107CQkJXAogCXIyID0gcjA7CQkJCQlcCi0JLyogVXBwZXIgNC1ieXRlcyBvZiByMiBtYXkgbm90IGJlIDAsIHRodXMgaW5zbglcCi0JICogdzMgPSB3MiBzaG91bGQgbm90IHByb3BhZ2F0ZSByZWcgaWQsCWFuZAlcCi0JICogdzIgJmx0OyA5IGNvbXBhcmlzb24gc2hvdWxkIG5vdCBwcm9wYWdhdGUJXAotCSAqIHRoZSByYW5nZSBmb3IgcjMgZWl0aGVyLgkJCVwKJiM0MzsJLyogVXBwZXIgNC1ieXRlcyBvZiByMiBtYXkgbm90IGJlIDAsIHNvIHIzIGRvZXMJXAomIzQzOwkgKiBub3QgZXF1YWwgcjIuIEl0IGRvZXMgc2hhcmUgcjImIzM5O3MgbG93IDMyIGJpdHMJXAomIzQzOwkgKiB0aG91Z2gsIHNvIHcyICZsdDsgOSBzdGlsbCBib3VuZHMgcjM6IHRoZQlcCiYjNDM7CSAqIHplcm8tZXh0ZW5kaW5nIG1vdiBsZWF2ZXMgbm90aGluZyBhYm92ZSB0aGVtLlwKIAkgKi8JCQkJCQlcCiAJdzMgPSB3MjsJCQkJCVwKIAlpZiB3MiAmbHQ7IDkgZ290byBsMF8lPTsJCQkJXAogCWV4aXQ7CQkJCQkJXAogbDBfJT06CWlmIHIzICZsdDsgOSBnb3RvIGwxXyU9OwkJCQlcCi0JLyogcjEgcmVhZCBpcyBpbGxlZ2FsIGF0IHRoaXMgcG9pbnQgKi8JCVwKJiM0MzsJLyogdW5yZWFjaGFibGUsIHNvIHRoZSByMSByZWFkIGlzIG5ldmVyIG1hZGUgKi8JXAogCXIwIC09IHIxOwkJCQkJXAogbDFfJT06CWV4aXQ7CQkJCQkJXAogJiMzNDsJOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMKaW5kZXggMzlhMTc2NmRhZTNmMS4uMTA0Mjg1NmI5N2MyNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jCkBAIC00NjQsOSAmIzQzOzQ2NCwxMyBAQCBsMF8lPToJcjEgJmd0OyZndDs9IDE2OwkJCQkJXAogU0VDKCYjMzQ7cmF3X3RwJiMzNDspCiBfX2xvZ19sZXZlbCgyKQogX19zdWNjZXNzCi1fX21zZygmIzM0O2ZwLTg9MG0/P3NjYWxhcigpJiMzNDspCi1fX21zZygmIzM0O2ZwLTE2PTAwbW0/P3NjYWxhcigpJiMzNDspCi1fX21zZygmIzM0O2ZwLTI0PTAwbW0/Pz9zY2FsYXIoKSYjMzQ7KQomIzQzOy8qCiYjNDM7ICogVGhlIHNsb3QgcmVjb3JkcyB3aGF0IHRoZSBzdG9yZSBwdXQgdGhlcmUsIG5vdCB0aGUgd2lkZXIgc291cmNlIGl0IGNhbWUKJiM0MzsgKiBmcm9tLCBzbyBlYWNoIHNjYWxhciBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIGl0cyBzcGlsbC4KJiM0MzsgKi8KJiM0MztfX21zZygmIzM0O2ZwLTg9MG0/P3NjYWxhcihpZD17e1swLTldJiM0Mzt9fS5sbzMyLHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7ZnAtMTY9MDBtbT8/c2NhbGFyKHNtaW49c21pbjMyPTAsc21heD11bWF4PXNtYXgzMj11bWF4MzI9MHhmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmKSkmIzM0OykKJiM0MztfX21zZygmIzM0O2ZwLTI0PTAwbW0/Pz9zY2FsYXIoc21pbj1zbWluMzI9MCxzbWF4PXVtYXg9c21heDMyPXVtYXgzMj0yNTUsdmFyX29mZj0oMHgwOyAweGZmKSkmIzM0OykKIF9fbmFrZWQgdm9pZCBzcGlsbF9zdWJyZWdzX3ByZXNlcnZlX3N0YWNrX3plcm8odm9pZCkKIHsKIAlhc20gdm9sYXRpbGUgKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3NTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBmaXJlIHVwIGEgZGVkaWNhdGVkIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgc2Vzc2lvbiBmb3IgaXQuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGZvY3VzZWQgd2l0aGluIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHN1YnN5c3RlbS4gTG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZyB3aXRoaW4gdGhlIHZlcmlmaWVyLgoKRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBmaWxlcyBhZmZlY3RlZDogYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBgaW5jbHVkZS9saW51eC90bnVtLmhgLCBga2VybmVsL2JwZi90bnVtLmNgLCBga2VybmVsL2JwZi9sb2cuY2AsIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCBzb21lIHNlbGZ0ZXN0cyB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuIFRoZSBtb2RpZmljYXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCBzZWVtIHRvIGJlIGludHJvZHVjaW5nIHRoZSBgZW51bSBicGZfYWRkX2NvbnN0YCBhbmQgYGVudW0gYnBmX3N1YnJlZ2AgZmllbGRzIHdpdGhpbiB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYml0ZmllbGRzIHVzZWQgdG8gdHJhY2sgc29tZSBmb3JtIG9mIGNvbnN0YW50IGFkZGl0aW9uIGFuZCBzdWJyZWdpc3RlciBwcm9wZXJ0aWVzLCByZXNwZWN0aXZlbHkuIFRoZSByZW1vdmFsIG9mIHRoZSBgI2RlZmluZSBCUEZfQUREX0NPTlNUKmAgbWFjcm9zIHN1Z2dlc3RzIGEgc2hpZnQgdG93YXJkcyB1c2luZyBhbiBlbnVtZXJhdGlvbiBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5IGFuZCBjbGFyaXR5LCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UuCgpUaGUgaW5jbHVzaW9uIG9mIGB0bnVtX3NleHRgIGluIGBpbmNsdWRlL2xpbnV4L3RudW0uaGAgYW5kIGBrZXJuZWwvYnBmL3RudW0uY2AgbGlrZWx5IHJlbGF0ZXMgdG8gYSBzaWduZWQgZXh0ZW5zaW9uIG9mIHRhZ2dlZCBudW1iZXJzIGFuZCBuZWVkcyBjbG9zZSBpbnNwZWN0aW9uLiBMb2dnaW5nIHVwZGF0ZXMgaW4gYGtlcm5lbC9icGYvbG9nLmNgIGFsd2F5cyBtYWtlcyBtZSB0aGluayBvZiBwb3NzaWJsZSBpbmZvLWxlYWtzLCBhbmQgSSB3YW50IHRvIHZlcmlmeSB0aGF0LiBBbmQsIG9mIGNvdXJzZSwgdXBkYXRlcyB0byBga2VybmVsL2JwZi9zdGF0ZXMuY2AgaW4gYGNoZWNrX3NjYWxhcl9pZHNgLCBgcmVnc19leGFjdGAsIGFuZCBgcmVnc2FmZWAgaXMgY3J1Y2lhbCBhbmQgbmVlZCB0byByZXZpZXcgY2xvc2VseSB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdCBvZiB0aGlzIG9uIGhvdyB0aGVzZSByZWdpc3RlcnMgYXJlIG1hbmFnZWQuIFRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2l0aCB2ZXJpZmllciByZWdpc3RlciB0cmFja2luZywgc3VicmVnaXN0ZXIgbGlua2luZyAoZm9yIHplcm8tZXh0ZW5zaW9uIGFuZCBzaWduLWV4dGVuc2lvbiksIGFuZCBzdGFjayBoYW5kbGluZyBiZWluZyB0aGUga2V5IGFyZWFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV3IGBhZGRfY29uc3RgIGFuZCBgc3VicmVnYCBwcm9wZXJ0aWVzIGludGVyYWN0IHdpdGggc3RhY2sgbWVtb3J5IGFuZCBpZiB0aGV5IGFyZSBoYW5kbGVkIHNhZmVseS4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGVyZSBhcmUgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm8ga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLCBubyB1bmV4cGVjdGVkIHBhZGRpbmcgaXNzdWVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCByZWFkcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgY29tbW9uIGluIGNvbXBsZXggY29kZSB3aXRoIG5ldyBzdGF0ZSBtYW5hZ2VtZW50LgoKU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGlzIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWA6CgpgYGBjCnN0cnVjdCBicGZfcmVnX3N0YXRlIHsKLi4uCgllbnVtIGJwZl9hZGRfY29uc3QgYWRkX2NvbnN0OjI7CgllbnVtIGJwZl9zdWJyZWcgc3VicmVnOjI7Cn07CmBgYAoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoZXJlIGFuZCBob3cgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXAgZm9yIGBicGZfcmVnX3N0YXRlYCBhbGxvY2F0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb25zIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkgdG8gdHJhY2sgdGhpcyBkb3duLCBhbmQgbG9vayBmb3IgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkgd2lsbCBjYXJlZnVsbHkgc2NydXRpbml6ZSBhbGwgdGhlIHVzZXMgb2YgYGFkZF9jb25zdGAgYW5kIGBzdWJyZWdgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGNvdWxkIGJlIGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nIG9uY2UgSSB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3NfZXhhY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTQ1Nj1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00NzItXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ3MzpzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy00NzQtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ5MT1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDk1LVx0aWYgKGV4YWN0ID09IEVYQUNUKVxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTY6XHRcdHJldHVybiByZWdzX2V4YWN0KHJvbGQsIHJjdXIsIGlkbWFwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDk3LVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNTMxLVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo1MzI6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy01MzMtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTYzMC1cdFx0ICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjYzMTpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApIFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02MzItXHRjYXNlIFBUUl9UT19BUkVOQTpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTYzNy1cdGRlZmF1bHQ6XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjYzODpcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02MzktXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwMTY9c3RhdGljIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmZpbmRfcHJldl9lbnRyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQxLSAqIENoZWNrIGlmIHNjYWxhciByZWdpc3RlcnMgYXJlIGV4YWN0IGZvciB0aGUgcHVycG9zZSBvZiBub3Qgd2lkZW5pbmcuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODA0MjogKiBNb3JlIGxlbmllbnQgdGhhbiByZWdzX2V4YWN0KClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQzLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgQlBGIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEJQRiBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgemVybyBpbiBvbiB0aGUgYHJlZ3NfZXhhY3RgIHZhcmlhYmxlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIGlzIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGZpbmVyIHBvaW50cyBvZiBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBleGVjdXRpb24gZW52aXJvbm1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHRcdHJldHVybiAwO1xuIDQ3MTpcdH1cbiA0NzI6XHRcbiA0NzM6XHRzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIDQ3NDpcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXG4gNDc1Olx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiA0NzY6XHR7XG4gNDc3Olx0XHRyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgXHUwMDI2XHUwMDI2XG4gNDc4Olx0XHQgICAgICAgcm9sZC1cdTAwM2VhZGRfY29uc3QgPT0gcmN1ci1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2XG4gNDc5Olx0XHQgICAgICAgcm9sZC1cdTAwM2VzdWJyZWcgPT0gcmN1ci1cdTAwM2VzdWJyZWcgXHUwMDI2XHUwMDI2XG4gNDgwOlx0XHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSBcdTAwMjZcdTAwMjZcbiA0ODE6XHRcdCAgICAgICBjaGVja19pZHMocm9sZC1cdTAwM2VwYXJlbnRfaWQsIHJjdXItXHUwMDNlcGFyZW50X2lkLCBpZG1hcCk7XG4gNDgyOlx0fVxuIDQ4MzpcdFxuIDQ4NDpcdGVudW0gZXhhY3RfbGV2ZWwge1xuIDQ4NTpcdFx0Tk9UX0VYQUNULFxuIDQ4NjpcdFx0RVhBQ1QsXG4gNDg3Olx0XHRSQU5HRV9XSVRISU5cbiA0ODg6XHR9O1xuIDQ4OTpcdFxuIDQ5MDpcdC8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xuIDQ5MTpcdHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gNDkyOlx0XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG4gNDkzOlx0XHRcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuIDQ5NDpcdHtcbiA0OTU6XHRcdGlmIChleGFjdCA9PSBFWEFDVClcbiA0OTY6XHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0aWYgKHJvbGQtXHUwMDNldHlwZSA9PSBOT1RfSU5JVClcbiA0OTk6XHRcdFx0LyogZXhwbG9yZWQgc3RhdGUgY2FuJiMzOTt0IGhhdmUgdXNlZCB0aGlzICovXG4gNTAwOlx0XHRcdHJldHVybiB0cnVlO1xuIDUwMTpcdFxuIDUwMjpcdFx0LyogRW5mb3JjZSB0aGF0IHJlZ2lzdGVyIHR5cGVzIGhhdmUgdG8gbWF0Y2ggZXhhY3RseSwgaW5jbHVkaW5nIHRoZWlyXG4gNTAzOlx0XHQgKiBtb2RpZmllcnMgKGxpa2UgUFRSX01BWUJFX05VTEwsIE1FTV9SRE9OTFksIGV0YyksIGFzIGEgZ2VuZXJhbFxuIDUwNDpcdFx0ICogcnVsZS5cbiA1MDU6XHRcdCAqXG4gNTA2Olx0XHQgKiBPbmUgY2FuIG1ha2UgYSBwb2ludCB0aGF0IHVzaW5nIGEgcG9pbnRlciByZWdpc3RlciBhcyB1bmJvdW5kZWRcbiA1MDc6XHRcdCAqIFNDQUxBUiB3b3VsZCBiZSB0ZWNobmljYWxseSBhY2NlcHRhYmxlLCBidXQgdGhpcyBjb3VsZCBsZWFkIHRvXG4gNTA4Olx0XHQgKiBwb2ludGVyIGxlYWtzIGJlY2F1c2Ugc2NhbGFycyBhcmUgYWxsb3dlZCB0byBsZWFrIHdoaWxlIHBvaW50ZXJzXG4gNTA5Olx0XHQgKiBhcmUgbm90LiBXZSBjb3VsZCBtYWtlIHRoaXMgc2FmZSBpbiBzcGVjaWFsIGNhc2VzIGlmIHJvb3QgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyOTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyJiMzOTtzIFJlZ2lzdGVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHJlZ2lzdGVyIHN0YXRlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBXaGVyZSBpcyB0aGF0IGxvY2F0ZWQgYWdhaW4/IEFoLCByaWdodCwgaW4gYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBUaW1lIHRvIG9wZW4gdGhhdCB1cCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMgb2YgaG93IHJlZ2lzdGVyIHN0YXRlIGlzIG1vZGVsZWQgd2l0aGluIHRoZSB2ZXJpZmllci4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGZpZWxkcyB0aGF0IGRpY3RhdGUgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgdGhlIHBvc3NpYmxlIHZhbHVlcywgcmFuZ2VzLCBhbmQgdHlwZXMgdGhhdCByZWdpc3RlcnMgY2FuIGhvbGQgdGhyb3VnaG91dCB0aGUgQlBGIHByb2dyYW0mIzM5O3MgZXhlY3V0aW9uLiBHb3R0YSBnZXQgdGhpcyBzdHJhaWdodCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHQgKiByZXN1bHQgaW4gYSBiYWQgYWNjZXNzLlxuIDE0MTpcdFx0ICogVGhlc2UgcmVmZXIgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdmFyX29mZiwgbm90IG5lY2Vzc2FyaWx5IHRoZSBhY3R1YWxcbiAxNDI6XHRcdCAqIGNvbnRlbnRzIG9mIHRoZSByZWdpc3Rlci5cbiAxNDM6XHRcdCAqL1xuIDE0NDpcdFx0c3RydWN0IGNudW02NCByNjQ7IC8qIDY0LWJpdCByYW5nZSBhcyBjaXJjdWxhciBudW1iZXIgKi9cbiAxNDU6XHRcdHN0cnVjdCBjbnVtMzIgcjMyOyAvKiAzMi1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTQ2Olx0XHQvKiBGb3IgUFRSX1RPX1BBQ0tFVCwgdXNlZCB0byBmaW5kIG90aGVyIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgdmFyaWFibGVcbiAxNDc6XHRcdCAqIG9mZnNldCwgc28gdGhleSBjYW4gc2hhcmUgcmFuZ2Uga25vd2xlZGdlLlxuIDE0ODpcdFx0ICogRm9yIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggbWFwIHZhbHVlIHdlXG4gMTQ5Olx0XHQgKiBjYW1lIGZyb20sIHdoZW4gb25lIGlzIHRlc3RlZCBmb3IgIT0gTlVMTC5cbiAxNTA6XHRcdCAqIEZvciBQVFJfVE9fTUVNX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IG1lbW9yeSBhbGxvY2F0aW9uXG4gMTUxOlx0XHQgKiBmb3IgdGhlIHB1cnBvc2Ugb2YgdHJhY2tpbmcgdGhhdCBpdCYjMzk7cyBmcmVlZC5cbiAxNTI6XHRcdCAqIEZvciBQVFJfVE9fU09DS0VUIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBwb2ludGVycyByZXRhaW4gdGhlXG4gMTUzOlx0XHQgKiBzYW1lIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0LCB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDE1NDpcdFx0ICogRm9yIHN0YWNrIHNsb3RzIHRoYXQgYXJlIGR5bnB0cnMsIHRoaXMgaXMgdXNlZCB0byB0cmFjayByZWZlcmVuY2VzIHRvXG4gMTU1Olx0XHQgKiB0aGUgZHlucHRyIHRvIGRldGVybWluZSBwcm9wZXIgcmVmZXJlbmNlIGZyZWVpbmcuXG4gMTU2Olx0XHQgKiBTaW1pbGFybHkgdG8gZHlucHRycywgd2UgdXNlIElEIHRvIHRyYWNrIFwmIzM0O2JlbG9uZ2luZ1wmIzM0OyBvZiBhIHJlZmVyZW5jZVxuIDE1NzpcdFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cbiAxNTg6XHRcdCAqL1xuIDE1OTpcdFx0LypcbiAxNjA6XHRcdCAqIFJlZ2lzdGVycyBzaGFyaW5nIGFuIC1cdTAwM2VpZCBhcmUgXCYjMzQ7bGlua2VkXCYjMzQ7OlxuIDE2MTpcdFx0ICogcjEgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjEtXHUwMDNlaWQgPT0gcjItXHUwMDNlaWQgPT0gTlxuIDE2MjpcdFx0ICovXG4gMTYzOlx0XHR1MzIgaWQ7XG4gMTY0Olx0XHQvKlxuIDE2NTpcdFx0ICogVHJhY2tzIHRoZSBwYXJlbnQgb2JqZWN0IHRoaXMgcmVnaXN0ZXIgd2FzIGRlcml2ZWQgZnJvbS5cbiAxNjY6XHRcdCAqIFVzZWQgZm9yIGNhc2NhZGluZyBpbnZhbGlkYXRpb246IHdoZW4gdGhlIHBhcmVudCBvYmplY3QgaXNcbiAxNjc6XHRcdCAqIHJlbGVhc2VkIG9yIGludmFsaWRhdGVkLCBhbGwgcmVnaXN0ZXJzIHdpdGggbWF0Y2hpbmcgcGFyZW50X2lkXG4gMTY4Olx0XHQgKiBhcmUgYWxzbyBpbnZhbGlkYXRlZC4gRm9yIGV4YW1wbGUsIGEgc2xpY2UgZnJvbSBicGZfZHlucHRyX2RhdGEoKVxuIDE2OTpcdFx0ICogZ2V0cyBwYXJlbnRfaWQgc2V0IHRvIHRoZSBkeW5wdHImIzM5O3MgaWQuXG4gMTcwOlx0XHQgKi9cbiAxNzE6XHRcdHUzMiBwYXJlbnRfaWQ7XG4gMTcyOlx0XHQvKiBJbnNpZGUgdGhlIGNhbGxlZSB0d28gcmVnaXN0ZXJzIGNhbiBiZSBib3RoIFBUUl9UT19TVEFDSyBsaWtlXG4gMTczOlx0XHQgKiBSMT1mcC04IGFuZCBSMj1mcC04LCBidXQgb25lIG9mIHRoZW0gcG9pbnRzIHRvIHRoaXMgZnVuY3Rpb24gc3RhY2tcbiAxNzQ6XHRcdCAqIHdoaWxlIGFub3RoZXIgdG8gdGhlIGNhbGxlciYjMzk7cyBzdGFjay4gVG8gZGlmZmVyZW50aWF0ZSB0aGVtICYjMzk7ZnJhbWVubyYjMzk7XG4gMTc1Olx0XHQgKiBpcyB1c2VkIHdoaWNoIGlzIGFuIGluZGV4IGluIGJwZl92ZXJpZmllcl9zdGF0ZS1cdTAwM2VmcmFtZVtdIGFycmF5XG4gMTc2Olx0XHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cbiAxNzc6XHRcdCAqL1xuIDE3ODpcdFx0dTMyIGZyYW1lbm87XG4gMTc5Olx0XHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gMTgwOlx0XHRib29sIHByZWNpc2U7XG4gMTgxOlx0XHQvKlxuIDE4MjpcdFx0ICogSG93IHRoaXMgcmVnaXN0ZXIgcmVsYXRlcyB0byB0aGUgb3RoZXJzIHNoYXJpbmcgaXRzIC1cdTAwM2VpZC5cbiAxODM6XHRcdCAqIE5vbi16ZXJvIG9ubHkgaWYgLVx1MDAzZWlkIGlzLlxuIDE4NDpcdFx0ICovXG4gMTg1Olx0XHRlbnVtIGJwZl9hZGRfY29uc3QgYWRkX2NvbnN0OjI7XG4gMTg2Olx0XHRlbnVtIGJwZl9zdWJyZWcgc3VicmVnOjI7XG4gMTg3Olx0fTtcbiAxODg6XHRcbiAxODk6XHRzdGF0aWMgaW5saW5lIHM2NCByZWdfc21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDE5MDpcdHtcbiAxOTE6XHRcdHJldHVybiBjbnVtNjRfc21pbihyZWctXHUwMDNlcjY0KTtcbiAxOTI6XHR9XG4gMTkzOlx0XG4gMTk0Olx0c3RhdGljIGlubGluZSBzNjQgcmVnX3NtYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciYjMzk7cyBNZW1vcnkgQ29tcGFyaXNvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY21wYCBjYWxsOiBgbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpYC4gVGhpcyBpcyBjb21wYXJpbmcgc29tZSBtZW1vcnkgcmVnaW9ucywgYHJvbGRgIGFuZCBgcmN1cmAsIHVwIHRvIGEgY2VydGFpbiBvZmZzZXQuIFRoZSBvZmZzZXQgaXMgZGVmaW5lZCBieSBgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKWAuIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIHdlJiMzOTtyZSBjb21wYXJpbmcgZXZlcnl0aGluZyAqYmVmb3JlKiB0aGUgYGlkYCBtZW1iZXIgd2l0aGluIHRoZSBgYnBmX3JlZ19zdGF0ZWAgc3RydWN0LiAKCldoYXQgZXhhY3RseSAqaXMqIGJlZm9yZSBgaWRgIGluIHRoYXQgc3RydWN0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNvbXBhcmVkIGhlcmUuIE15IGd1dCBzYXlzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBzdGF0ZSB0cmFja2luZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHN0cnVjdCBkZWZpbml0aW9uLCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZC4KClRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDQwIHRvIDE0NSwgYXMgdGhhdCBzaG91bGQgY29udGFpbiB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3JlZ19zdGF0ZWAgYW5kIHJlbGF0ZWQgc3RydWN0dXJlIGRlZmluaXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBjb21wYXJlZCBpbiB0aGlzIGNyaXRpY2FsIG1lbW9yeSBjb21wYXJpc29uLiBJdCYjMzk7cyBwcm9iYWJseSBrZXkgdG8gaG93IHRoZSB2ZXJpZmllciYjMzk7cyBzdGF0ZSBpcyBiZWluZyB0cmFja2VkIGFuZCBjb21wYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBpdGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTU6XHRcdFNVQlJFR19aRVhULFx0XHQvKiBoaWdoIGJpdHMgYXJlIHplcm8gKDMyLWJpdCB6ZXJvLWV4dGVuZGluZyBtb3YpICovXG4gIDU2Olx0XHRTVUJSRUdfU0VYVCxcdFx0LyogaGlnaCBiaXRzIHJlcGVhdCBiaXQgMzEgKDMyLWJpdCBzaWduLWV4dGVuZGluZyBtb3YpICovXG4gIDU3Olx0fTtcbiAgNTg6XHRcbiAgNTk6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gIDYwOlx0XHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuICA2MTpcdFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiAgNjI6XHRcdC8qXG4gIDYzOlx0XHQgKiBDb25zdGFudCBkZWx0YSBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0OyBzY2FsYXJzIHdpdGggdGhlIHNhbWUgSUQuXG4gIDY0Olx0XHQgKi9cbiAgNjU6XHRcdHMzMiBkZWx0YTtcbiAgNjY6XHRcdHVuaW9uIHtcbiAgNjc6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IFBUUl9UT19QQUNLRVQgKi9cbiAgNjg6XHRcdFx0aW50IHJhbmdlO1xuICA2OTpcdFxuICA3MDpcdFx0XHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxuICA3MTpcdFx0XHQgKiAgIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTFxuICA3MjpcdFx0XHQgKi9cbiAgNzM6XHRcdFx0c3RydWN0IHtcbiAgNzQ6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbiAgNzU6XHRcdFx0XHQvKiBUbyBkaXN0aW5ndWlzaCBtYXAgbG9va3VwcyBmcm9tIG91dGVyIG1hcFxuICA3NjpcdFx0XHRcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcbiAgNzc6XHRcdFx0XHQgKiBwb2ludGluZyB0byBpbm5lciBtYXBzLlxuICA3ODpcdFx0XHRcdCAqL1xuICA3OTpcdFx0XHRcdHUzMiBtYXBfdWlkO1xuICA4MDpcdFx0XHR9O1xuICA4MTpcdFxuICA4MjpcdFx0XHQvKiBmb3IgUFRSX1RPX0JURl9JRCAqL1xuICA4MzpcdFx0XHRzdHJ1Y3Qge1xuICA4NDpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgODU6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA4NjpcdFx0XHR9O1xuICA4NzpcdFxuICA4ODpcdFx0XHRzdHJ1Y3QgeyAvKiBmb3IgUFRSX1RPX01FTSB8IFBUUl9UT19NRU1fT1JfTlVMTCAqL1xuICA4OTpcdFx0XHRcdHUzMiBtZW1fc2l6ZTtcbiAgOTA6XHRcdFx0fTtcbiAgOTE6XHRcbiAgOTI6XHRcdFx0LyogRm9yIGR5bnB0ciBzdGFjayBzbG90cyAqL1xuICA5MzpcdFx0XHRzdHJ1Y3Qge1xuICA5NDpcdFx0XHRcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4gIDk1Olx0XHRcdFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cbiAgOTY6XHRcdFx0XHQgKiBXZSBuZWVkIHRvIHRyYWNrIHdoaWNoIHNsb3QgaXMgdGhlIGZpcnN0IHNsb3RcbiAgOTc6XHRcdFx0XHQgKiB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IHRyeSB0b1xuICA5ODpcdFx0XHRcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXG4gIDk5Olx0XHRcdFx0ICogZHlucHRyLlxuIDEwMDpcdFx0XHRcdCAqL1xuIDEwMTpcdFx0XHRcdGJvb2wgZmlyc3Rfc2xvdDtcbiAxMDI6XHRcdFx0fSBkeW5wdHI7XG4gMTAzOlx0XG4gMTA0Olx0XHRcdC8qIEZvciBicGZfaXRlciBzdGFjayBzbG90cyAqL1xuIDEwNTpcdFx0XHRzdHJ1Y3Qge1xuIDEwNjpcdFx0XHRcdC8qIEJURiBjb250YWluZXIgYW5kIEJURiB0eXBlIElEIGRlc2NyaWJpbmdcbiAxMDc6XHRcdFx0XHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXHUwMDNjdHlwZVx1MDAzZSBvZiBhbiBpdGVyYXRvciBzdGF0ZVxuIDEwODpcdFx0XHRcdCAqL1xuIDEwOTpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAxMTA6XHRcdFx0XHR1MzIgYnRmX2lkO1xuIDExMTpcdFx0XHRcdC8qIHBhY2tpbmcgZm9sbG93aW5nIHR3byBmaWVsZHMgdG8gZml0IGl0ZXIgc3RhdGUgaW50byAxNiBieXRlcyAqL1xuIDExMjpcdFx0XHRcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcbiAxMTM6XHRcdFx0XHRpbnQgZGVwdGg6MzA7XG4gMTE0Olx0XHRcdH0gaXRlcjtcbiAxMTU6XHRcbiAxMTY6XHRcdFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xuIDExNzpcdFx0XHRzdHJ1Y3Qge1xuIDExODpcdFx0XHRcdGVudW0ge1xuIDExOTpcdFx0XHRcdFx0SVJRX05BVElWRV9LRlVOQyxcbiAxMjA6XHRcdFx0XHRcdElSUV9MT0NLX0tGVU5DLFxuIDEyMTpcdFx0XHRcdH0ga2Z1bmNfY2xhc3M7XG4gMTIyOlx0XHRcdH0gaXJxO1xuIDEyMzpcdFxuIDEyNDpcdFx0XHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXG4gMTI1Olx0XHRcdHN0cnVjdCB7XG4gMTI2Olx0XHRcdFx0dW5zaWduZWQgbG9uZyByYXcxO1xuIDEyNzpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MjtcbiAxMjg6XHRcdFx0fSByYXc7XG4gMTI5Olx0XG4gMTMwOlx0XHRcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xuIDEzMTpcdFx0fTtcbiAxMzI6XHRcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXG4gMTMzOlx0XHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxuIDEzNDpcdFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XG4gMTM1Olx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xuIDEzNjpcdFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cbiAxMzc6XHRcdCAqL1xuIDEzODpcdFx0c3RydWN0IHRudW0gdmFyX29mZjtcbiAxMzk6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gYHN0cnVjdCBicGZfcmVnX3N0YXRlYCoqCgpPa2F5LCBzbyB0aGV5IHRhY2tlZCBgYWRkX2NvbnN0OjJgIGFuZCBgc3VicmVnOjJgIG9udG8gdGhlIGVuZCBvZiBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLCByaWdodCBhZnRlciBgcHJlY2lzZWAuIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgYmVpbmcgdXNlZC4gSW4gYHJlZ3NfZXhhY3RgLCB0aGV5JiMzOTtyZSBkb2luZyB0aGlzIGNhcmVmdWwgY29tcGFyaXNvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB1c2luZyBgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKWAgaW4gYG1lbWNtcGAuIFRoYXQgbWVhbnMgdGhlIGBtZW1jbXBgIG9ubHkgbG9va3MgYXQgdGhlIGZpZWxkcyB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBpZGAgKHNvIGB0eXBlYCwgYGRlbHRhYCwgYHVuaW9uYCwgYHZhcl9vZmZgLCBgcjY0YCwgYHIzMmApLiBUaGVuLCB0aGV5IGV4cGxpY2l0bHkgY29tcGFyZSBgYWRkX2NvbnN0YCwgYHN1YnJlZ2AsIGBpZGAsIGFuZCBgcGFyZW50X2lkYC4KCkhtbSwgaXMgYGZyYW1lbm9gIG9yIGBwcmVjaXNlYCBwYXJ0IG9mIHRoZSBgcmVnc19leGFjdGAgY2hlY2s/IE5vLCB3YWl0LCBgcmVnc19leGFjdGAgaXMganVzdCBjb21wYXJpbmcgdGhlICpiYXJlIG1pbmltdW0qIGl0IG5lZWRzLCBhbmQgYHJlZ3NhZmVgIGRvZXMgYSBjaGVjazoKCmBgYGMKY2FzZSBQVFJfVE9fU1RBQ0s6CiAgICByZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCkgJmFtcDsmYW1wOyByb2xkLSZndDtmcmFtZW5vID09IHJjdXItJmd0O2ZyYW1lbm87CmBgYAoKSW50ZXJlc3RpbmcuIFNvLCBgZnJhbWVub2AgKmlzKiBjb21wYXJlZCBpbiBgcmVnc2FmZWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGVyZSBgYnBmX3JlZ19zdGF0ZWAgaXMgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkLCBvciB1c2VkIGJ5IGBjbGVhbl9mdW5jX3N0YXRlYCBvciBgX19jbGVhbl9mdW5jX3N0YXRlYC4gVGhhdCYjMzk7cyB3aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBiZSBsdXJraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NsZWFuX2Z1bmNfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTM3Mz1zdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMzgyLVxua2VybmVsL2JwZi9zdGF0ZXMuYzozODM6c3RhdGljIHZvaWQgX19jbGVhbl9mdW5jX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM4NC1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ1Nj1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00NjctXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ2ODpcdFx0X19jbGVhbl9mdW5jX3N0YXRlKGVudiwgc3QtXHUwMDNlZnJhbWVbaV0sIGxpdmVfcmVncywgaSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ2OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwMTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYF9fY2xlYW5fZnVuY19zdGF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBfX2NsZWFuX2Z1bmNfc3RhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBpcyB3aXBpbmcgY2xlYW4uIEkgc3VzcGVjdCBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgZnVuY3Rpb24gZXhlY3V0aW9uLCBidXQgdGhlIGRldGFpbHMgYXJlIGNydWNpYWwuIEtub3dpbmcgcHJlY2lzZWx5IHdoYXQgaXQmIzM5O3MgY2xlYXJpbmcgaXMgZnVuZGFtZW50YWwgdG8gZ3Jhc3BpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgaXRzIGFwcGxpY2F0aW9uLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggc3lzdGVtcy4gSSBuZWVkIHRvIHNlZSBpZiBpdOKAmXMgcmVzZXR0aW5nIHZhcmlhYmxlcywgZGVsZXRpbmcgb2JqZWN0cywgbW9kaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIFVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgJiMzNDtjbGVhbmluZyYjMzQ7IHByb2Nlc3Mgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyBzdGF0ZSBpcyBtYW5hZ2VkIGFuZCBwcmVzZXJ2ZWQgKG9yIG5vdCBwcmVzZXJ2ZWQpIGJldHdlZW4gZnVuY3Rpb24gY2FsbHMuIFRoaXMgaXMgY29yZSB0byBzdGFiaWxpdHkgYW5kIHByZWRpY3RhYmxlIGJlaGF2aW9yIOKAkyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHRyZXR1cm4gY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCk7XG4gMzgxOlx0fVxuIDM4MjpcdFxuIDM4MzpcdHN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDM4NDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0LFxuIDM4NTpcdFx0XHRcdCAgICAgICB1MTYgbGl2ZV9yZWdzLCBpbnQgZnJhbWUpXG4gMzg2Olx0e1xuIDM4NzpcdFx0aW50IGksIGo7XG4gMzg4Olx0XG4gMzg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCUEZfUkVHX0ZQOyBpJiM0MzsmIzQzOykge1xuIDM5MDpcdFx0XHQvKiBsaXZlbmVzcyBtdXN0IG5vdCB0b3VjaCB0aGlzIHJlZ2lzdGVyIGFueW1vcmUgKi9cbiAzOTE6XHRcdFx0aWYgKCEobGl2ZV9yZWdzIFx1MDAyNiBCSVQoaSkpKVxuIDM5MjpcdFx0XHRcdC8qIHNpbmNlIHRoZSByZWdpc3RlciBpcyB1bnVzZWQsIGNsZWFyIGl0cyBzdGF0ZVxuIDM5MzpcdFx0XHRcdCAqIHRvIG1ha2UgZnVydGhlciBjb21wYXJpc29uIHNpbXBsZXJcbiAzOTQ6XHRcdFx0XHQgKi9cbiAzOTU6XHRcdFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZzdC1cdTAwM2VyZWdzW2ldKTtcbiAzOTY6XHRcdH1cbiAzOTc6XHRcbiAzOTg6XHRcdC8qXG4gMzk5Olx0XHQgKiBDbGVhbiBkZWFkIDQtYnl0ZSBoYWx2ZXMgd2l0aGluIGVhY2ggU1BJIGluZGVwZW5kZW50bHkuXG4gNDAwOlx0XHQgKiBoYWxmX3NwaSAyKmkgICDihpIgbG93ZXIgaGFsZjogc2xvdF90eXBlWzAuLjNdIChjbG9zZXIgdG8gRlApXG4gNDAxOlx0XHQgKiBoYWxmX3NwaSAyKmkmIzQzOzEg4oaSIHVwcGVyIGhhbGY6IHNsb3RfdHlwZVs0Li43XSAoZmFydGhlciBmcm9tIEZQKVxuIDQwMjpcdFx0ICovXG4gNDAzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdC1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4gNDA0Olx0XHRcdGJvb2wgbG9fbGl2ZSA9IGJwZl9zdGFja19zbG90X2FsaXZlKGVudiwgZnJhbWUsIGkgKiAyKTtcbiA0MDU6XHRcdFx0Ym9vbCBoaV9saXZlID0gYnBmX3N0YWNrX3Nsb3RfYWxpdmUoZW52LCBmcmFtZSwgaSAqIDIgJiM0MzsgMSk7XG4gNDA2Olx0XG4gNDA3Olx0XHRcdGlmICghaGlfbGl2ZSB8fCAhbG9fbGl2ZSkge1xuIDQwODpcdFx0XHRcdGludCBzdGFydCA9ICFsb19saXZlID8gMCA6IEJQRl9SRUdfU0laRSAvIDI7XG4gNDA5Olx0XHRcdFx0aW50IGVuZCA9ICFoaV9saXZlID8gQlBGX1JFR19TSVpFIDogQlBGX1JFR19TSVpFIC8gMjtcbiA0MTA6XHRcdFx0XHR1OCBzdHlwZSA9IHN0LVx1MDAzZXN0YWNrW2ldLnNsb3RfdHlwZVs3XTtcbiA0MTE6XHRcbiA0MTI6XHRcdFx0XHQvKlxuIDQxMzpcdFx0XHRcdCAqIERvbiYjMzk7dCBjbGVhciBzcGVjaWFsIHNsb3RzLlxuIDQxNDpcdFx0XHRcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoKSBuZWVkcyBTVEFDS19EWU5QVFIgdG9cbiA0MTU6XHRcdFx0XHQgKiBkZXRlY3Qgb3ZlcndyaXRlcyBhbmQgaW52YWxpZGF0ZSBhc3NvY2lhdGVkIGRhdGEgc2xpY2VzLlxuIDQxNjpcdFx0XHRcdCAqIGlzX2l0ZXJfcmVnX3ZhbGlkX3VuaW5pdCgpIGFuZCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfdW5pbml0KClcbiA0MTc6XHRcdFx0XHQgKiBjaGVjayBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBzbG90IHR5cGVzIHRvIGRldGVjdCBkb3VibGUtY3JlYXRlLlxuIDQxODpcdFx0XHRcdCAqL1xuIDQxOTpcdFx0XHRcdGlmIChzdHlwZSA9PSBTVEFDS19EWU5QVFIgfHwgc3R5cGUgPT0gU1RBQ0tfSVRFUiB8fFxuIDQyMDpcdFx0XHRcdCAgICBzdHlwZSA9PSBTVEFDS19JUlFfRkxBRylcbiA0MjE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDQyMjpcdFxuIDQyMzpcdFx0XHRcdC8qXG4gNDI0Olx0XHRcdFx0ICogT25seSBzY2FsYXIgc3BpbGxzIGNhbiBiZSBkZWdyYWRlZCB0byByYXcgc3RhY2sgYnl0ZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwNjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgYnBmX21hcmtfcmVnX25vdF9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9tYXJrX3JlZ19ub3RfaW5pdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgcHVycG9zZS4gQmFzZWQgb24gdGhlIG5hbWUsIGl0IHNlZW1zIHRvIGZsYWcgb3Igc29tZWhvdyBtYXJrIHJlZ2lzdGVycyB0aGF0IGhhdmVuJiMzOTt0IGJlZW4gaW5pdGlhbGl6ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHN0YXRpYyBhbmFseXNpcyBvciBydW50aW1lIHNhZmV0eSBjaGVja3MgdG8gcHJldmVudCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBhIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdHkgdG8gYXZvaWQuIEnigJltIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGNvbnRleHQg4oCTIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnM/IElzIGl0IHBhcnQgb2YgYSBicm9hZGVyIGZyYW1ld29yayBmb3IgQlBGIHJlZ2lzdGVyIHRyYWNraW5nLCBvciBpcyBpdCBtb3JlIG9mIGEgbG9jYWxpemVkIGNoZWNrPyBEb2VzIGl0IGludGVncmF0ZSB3aXRoIG90aGVyIEJQRiB2ZXJpZmllciBjb21wb25lbnRzPyBLbm93aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGVmZmljYWN5IGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB1bmluaXRpYWxpemVkIHJlZ2lzdGVyIG1hcmtlcnMgYXJlIHVzZWQsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG9zc2libGUgd2F5cyB0byBieXBhc3MgdGhlIGNoZWNrcywgYW5kIHRoZSBjb25zZXF1ZW5jZXMgb2YgYW55IGJ5cGFzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcmtfcmVnX25vdF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz0zODM9c3RhdGljIHZvaWQgX19jbGVhbl9mdW5jX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0zOTQtXHRcdFx0ICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjM5NTpcdFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZzdC1cdTAwM2VyZWdzW2ldKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzk2LVx0fVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDQ3LVx0XHRcdFx0fVxua2VybmVsL2JwZi9zdGF0ZXMuYzo0NDg6XHRcdFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBzcGlsbCk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ0OS1cdFx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4Mz1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5MjpcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnN0YWNrWzBdLnNwaWxsZWRfcHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTM6XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZzdGFja1sxXS5zcGlsbGVkX3B0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk0LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE5PXN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODIxLVx0aWYgKCFlbnYtXHUwMDNlYWxsb3dfcHRyX2xlYWtzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMjpcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjMtXHRlbHNlXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTk9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzY6XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIHN0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM3LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTQyPXN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk4Olx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTktXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIyNjA9c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjc5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyODA6dm9pZCBicGZfbWFya19yZWdfbm90X2luaXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjgxLVx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIzMTY9c3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjMyMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfUkVHOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIzMjM6XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbaV0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIzMjQtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk3NTg9c3RhdGljIHZvaWQgY2xlYXJfY2FsbGVyX3NhdmVkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTc2Ni1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk3Njc6XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTc2OC1cdFx0X19jaGVja19yZWdfYXJnKGVudiwgcmVncywgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk3NzI9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk3NzgtXHRcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrX2FyZ19yZWdzW2ldLCBCUEZfRElBR19NT0RfQ0FMTEVSX1NBVkVEKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5Nzc5Olx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja19hcmdfcmVnc1tpXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTc4MC1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyMDI9aW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDIyNi1cdC8qIHVudXNlZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjI3Olx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR181XSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyMjgtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyNzE9c3RhdGljIGludCBzZXRfbG9vcF9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI4My1cdC8qIHVudXNlZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjg0Olx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAyODU6XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDI4NjpcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNV0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjg3LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDI5Mz1zdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMxOS1cdC8qIHVudXNlZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzIwOlx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzMjE6XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzVdKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMyMi1cdGNhbGxlZS1cdTAwM2Vpbl9hc3luY19jYWxsYmFja19mbiA9IHRydWU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzI3PXN0YXRpYyBpbnQgc2V0X2ZpbmRfdm1hX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzQ3LVx0LyogdW51c2VkICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNDg6XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM0OTpcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNV0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzUwLVx0Y2FsbGVlLVx1MDAzZWluX2NhbGxiYWNrX2ZuID0gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTU9c3RhdGljIGludCBzZXRfdXNlcl9yaW5nYnVmX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzYzLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNjQ6XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzBdKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2NS1cdG1hcmtfZHlucHRyX2NiX3JlZyhlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfMV0sIEJQRl9EWU5QVFJfVFlQRV9MT0NBTCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzY4LVx0LyogdW51c2VkICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNjk6XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM3MDpcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzcxOlx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR181XSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNzItXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzc4PXN0YXRpYyBpbnQgc2V0X3JidHJlZV9hZGRfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MDM6XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwNDpcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDA1Olx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR181XSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MDYtXHRjYWxsZWUtXHUwMDNlaW5fY2FsbGJhY2tfZm4gPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDQxMT1zdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzctXHQvKiB1bnVzZWQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQzODpcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDM5Olx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR181XSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0NDAtXHRjYWxsZWUtXHUwMDNlaW5fYXN5bmNfY2FsbGJhY2tfZm4gPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTAwOD1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI3OTpcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI4MC1cdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDA2MT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEyMC1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTIxOlx0XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxMjItXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MzA4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MzA5Olx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW3JlZ25vXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQzMTAtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzI3PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3ODUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzc4NjpcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc4Ny1cdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBhIHBvdGVudGlhbCBpc3N1ZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9tYXJrX3JlZ19ub3RfaW5pdGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgY2hlY2tpbmcgdGhpcyBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGFuZCBwdXJwb3NlLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHNwZWNpZmljIGhlcmUgdGhhdCBuZWVkcyBjbGFyaWZ5aW5nLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyBvciBmbGFncyB1bmluaXRpYWxpemVkIHJlZ2lzdGVycy4gVGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwaWVjZSBvZiB0aGUgb3ZlcmFsbCB2ZXJpZmljYXRpb24gcHV6emxlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGFuZCB3aHkgaXQmIzM5O3MgdXNlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjgwOlx0dm9pZCBicGZfbWFya19yZWdfbm90X2luaXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyODE6XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuMjI4MjpcdHtcbjIyODM6XHRcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZyk7XG4yMjg0Olx0XHRyZWctXHUwMDNldHlwZSA9IE5PVF9JTklUO1xuMjI4NTpcdH1cbjIyODY6XHRcbjIyODc6XHRzdGF0aWMgaW50IG1hcmtfYnRmX2xkX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjI4ODpcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXG4yMjg5Olx0XHRcdFx0ICAgZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUsXG4yMjkwOlx0XHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkLFxuMjI5MTpcdFx0XHRcdCAgIGVudW0gYnBmX3R5cGVfZmxhZyBmbGFnKVxuMjI5MjpcdHtcbjIyOTM6XHRcdHN3aXRjaCAocmVnX3R5cGUpIHtcbjIyOTQ6XHRcdGNhc2UgU0NBTEFSX1ZBTFVFOlxuMjI5NTpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xuMjI5NjpcdFx0XHRyZXR1cm4gMDtcbjIyOTc6XHRcdGNhc2UgUFRSX1RPX0JURl9JRDpcbjIyOTg6XHRcdFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIHJlZ25vKTtcbjIyOTk6XHRcdFx0cmVnc1tyZWdub10udHlwZSA9IFBUUl9UT19CVEZfSUQgfCBmbGFnO1xuMjMwMDpcdFx0XHRyZWdzW3JlZ25vXS5idGYgPSBidGY7XG4yMzAxOlx0XHRcdHJlZ3NbcmVnbm9dLmJ0Zl9pZCA9IGJ0Zl9pZDtcbjIzMDI6XHRcdFx0aWYgKHR5cGVfbWF5X2JlX251bGwoZmxhZykpXG4yMzAzOlx0XHRcdFx0cmVnc1tyZWdub10uaWQgPSAmIzQzOyYjNDM7ZW52LVx1MDAzZWlkX2dlbjtcbjIzMDQ6XHRcdFx0cmV0dXJuIDA7XG4yMzA1Olx0XHRjYXNlIFBUUl9UT19NRU06XG4yMzA2Olx0XHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCByZWdubyk7XG4yMzA3Olx0XHRcdHJlZ3NbcmVnbm9dLnR5cGUgPSBQVFJfVE9fTUVNIHwgZmxhZztcbjIzMDg6XHRcdFx0cmVnc1tyZWdub10ubWVtX3NpemUgPSAwO1xuMjMwOTpcdFx0XHRyZXR1cm4gMDtcbjIzMTA6XHRcdGRlZmF1bHQ6XG4yMzExOlx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O3VuZXhwZWN0ZWQgcmVnX3R5cGUgJWQgaW4gJXNcXG5cJiMzNDssIHJlZ190eXBlLCBfX2Z1bmNfXyk7XG4yMzEyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjMxMzpcdFx0fVxuMjMxNDpcdH1cbjIzMTU6XHRcbjIzMTY6XHRzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjMxNzpcdFx0XHRcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXG4yMzE4Olx0e1xuMjMxOTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBzdGF0ZS1cdTAwM2VyZWdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjQzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBfX21hcmtfcmVnX3Vua25vd25gIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgX19tYXJrX3JlZ191bmtub3duYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBTZWVpbmcgdGhpcyBuYW1lLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGl0cyByb2xlIGluIHJlZ2lzdGVyIG1hbmFnZW1lbnQgb3IgdHJhY2tpbmcuIFRoZSAmIzM0O3Vua25vd24mIzM0OyBwYXJ0IGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHJlZ2lzdGVycyB3aG9zZSBzdGF0ZSBpc24mIzM5O3QgcHJlY2lzZWx5IGRlZmluZWQgYXQgYSBjZXJ0YWluIHBvaW50LCBvciBwZXJoYXBzIGluaXRpYWxpemF0aW9uLCBvciB3aXRoaW4gYSBzcGVjaWZpYyBjb250cm9sIGZsb3cuCgpJJiMzOTttIHRoaW5raW5nLCB0aGlzIGlzIHByb2JhYmx5IGltcGxlbWVudGVkIGF0IGEgZmFpcmx5IGxvdyBsZXZlbC4gV2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggdGhpbmdzIGxpa2Ugb3B0aW1pemluZyBjb21waWxlciBwYXNzZXMsIG9yIHBlcmhhcHMgZXZlbiBpbiB0aGUgY29yZSBvZiBhbiBlbXVsYXRvciBvciB2aXJ0dWFsIG1hY2hpbmUuIEdpdmVuIHRoZSBlbXBoYXNpcyBvbiAmIzM0O21hcmssJiMzNDsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgb3IgYml0bWFzayB0byBiZSBtYW5pcHVsYXRlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSByZWdpc3RlciYjMzk7cyBjb250ZW50cyBhcmUgaW5kZXRlcm1pbmF0ZSBvciBpbnZhbGlkIGZvciBhIHBhcnRpY3VsYXIgb3BlcmF0aW9uLgoKVGhlIGtleSBxdWVzdGlvbnMgaW1tZWRpYXRlbHkgZm9ybWluZyBpbiBteSBoZWFkIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIG1hcmtpbmc/IElzIGl0IGR1ZSB0byBjb250cm9sIGZsb3cgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBwZXJoYXBzIHJlZ2lzdGVyIGFsaWFzaW5nIHRoYXQgaXNuJiMzOTt0IGNsZWFubHkgaGFuZGxlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciByZWdpc3RlciBhbmFseXNpcyB0ZWNobmlxdWVzIGxpa2UgbGl2ZW5lc3MgYW5hbHlzaXMgb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbj8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgb2Z0ZW4sIGlzIGl0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgcm91dGluZXMsIGUuZy4gYF9fdW5tYXJrX3JlZ19rbm93bmA/IElzIHRoZXJlIGEgY29udGV4dCBzd2l0Y2gsIG9yIGZ1bmN0aW9uIGNhbGwgaGVyZT8gSG93IGFyZSB0aGVzZSByZWdpc3RlcnMgbGF0ZXIgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHJ1bnRpbWUgY2hlY2tzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgZ2VuZXJhdGUgY29tcGlsZSB0aW1lIGVycm9ycz8gSXMgaXQgZ2VuZXJhdGluZyBhIHdhcm5pbmc/IFRoaXMgbXVzdCBiZSBpbXBvcnRhbnQuCgpJbiBzaG9ydCwgbXkgbWluZCBpcyBhbHJlYWR5IGZvcm11bGF0aW5nIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgYWNjdXJhY3ksIGFuZCBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoYXRldmVyIHN5c3RlbSBvciB0b29sIHdlJiMzOTtyZSBleGFtaW5pbmcuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21hcmtfcmVnX3Vua25vd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzk2PXN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODE2OnN0YXRpYyB2b2lkIF9fbWFya19yZWdfdW5rbm93bihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNy1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxOT1zdGF0aWMgdm9pZCBtYXJrX3JlZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMy1cdGVsc2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MjQ6XHRcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI1LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjIzNj12b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjQ2LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIyNDc6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI0OC1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjI1ND1zdGF0aWMgdm9pZCBtYXJrX3JlZ191bmtub3duKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIyNTYte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIyNTc6XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICYjNDM7IHJlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjU4LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjI4MD12b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjgyLXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMjgzOlx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjg0LVx0cmVnLVx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzA1Mz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JhbmdlX2luaXRpYWxpemVkKFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTQzLVx0XHRcdGlmIChjbG9iYmVyKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzE0NDpcdFx0XHRcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTcxNDUtXHRcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGomIzQzOyYjNDM7KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MDUwPXN0YXRpYyB2b2lkIG1heWJlX3dpZGVuX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDU4LVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODA1OTpcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJjdXIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNjAtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDkwMD1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5MjItXHRcdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTIzOlx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkyNC1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI5LVx0XHRpZiAob3Bjb2RlID09IEJQRl9TVUIgXHUwMDI2XHUwMDI2IGVudi1cdTAwM2VhbGxvd19wdHJfbGVha3MpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDkzMDpcdFx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzMS1cdFx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5MDE9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTkxMS1cdGlmICghaXNfc2FmZV90b19jb21wdXRlX2RzdF9yZWdfcmFuZ2UoaW5zbiwgXHUwMDI2c3JjX3JlZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTkxMjpcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5MTMtXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzU5MD1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Njc1LVx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9BUkVOQSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Njc2Olx0XHRcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Njc3LVx0XHRcdGRzdF9yZWctXHUwMDNlbWFwX3B0ciA9IG1hcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxNDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIEJQRiBSZWdpc3RlciBUcmFja2luZyoqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHJlZ2lzdGVyIHRyYWNraW5nLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGhvdyBpdCBkZWFscyB3aXRoIHVua25vd25zIGFuZCBpbXByZWNpc2lvbi4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMsIGBfX21hcmtfcmVnX3Vua25vd25gIGFuZCBgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYCwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agc3BlY2lmaWNhbGx5LCBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSByZWdpc3RlciBjb250ZW50IGlzIHVuY2VydGFpbi4gSSBleHBlY3QgdGhlIGZpcnN0IGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgYSByZWdpc3RlcnMgdmFsdWUgaXMgZW50aXJlbHkgdW5rbm93biwgd2hlcmVhcyB0aGUgbGF0dGVyIGlzIGZvciBzaXR1YXRpb25zIHdoZXJlIHdlIGtub3cgKnNvbWV0aGluZyosIGJ1dCBub3QgZXZlcnl0aGluZy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSBpbnRlcnBsYXkuIFRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBCUEYgdmVyaWZpZXIgYXJlIHNpZ25pZmljYW50IHdoZW4geW91IGNhbiYjMzk7dCBiZSBwcmVjaXNlIGFib3V0IHRoZSBzdGF0ZSBvZiBhIHJlZ2lzdGVyIOKAkyBkb2VzIGl0IGRlZmF1bHQgdG8gc2FmZSBhc3N1bXB0aW9ucz8gRG9lcyBpdCBpbnRyb2R1Y2UgbW9yZSBjb25zZXJ2YXRpdmUgY29uc3RyYWludHMgb24gd2hhdCYjMzk7cyBhbGxvd2VkIGluIHRoZSBCUEYgcHJvZ3JhbT8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIGVmZmVjdGl2ZW5lc3MgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucywgZXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgYXQgb3B0aW1pemF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgY29udHJpYnV0ZSB0byBjb3JyZWN0bmVzcyBhbmQgc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjMwOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjIzMTpcdFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcbjIyMzI6XHRcdHJldHVybiAwO1xuMjIzMzpcdH1cbjIyMzQ6XHRcbjIyMzU6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xuMjIzNjpcdHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4yMjM3Olx0e1xuMjIzODpcdFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbjIyMzk6XHRcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuMjI0MDpcdFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4yMjQxOlx0XHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuMjI0MjpcdH1cbjIyNDM6XHRcbjIyNDQ6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLFxuMjI0NTpcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cbjIyNDY6XHQgKi9cbjIyNDc6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIyNDg6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIyNDk6XHR7XG4yMjUwOlx0XHRicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UocmVnKTtcbjIyNTE6XHRcdHJlZy1cdTAwM2VwcmVjaXNlID0gIWVudi1cdTAwM2VicGZfY2FwYWJsZTtcbjIyNTI6XHR9XG4yMjUzOlx0XG4yMjU0Olx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjI1NTpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubylcbjIyNTY6XHR7XG4yMjU3Olx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICYjNDM7IHJlZ25vKTtcbjIyNTg6XHR9XG4yMjU5Olx0XG4yMjYwOlx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjI2MTpcdFx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4yMjYyOlx0XHRcdFx0XHR1MzIgcmVnbm8sXG4yMjYzOlx0XHRcdFx0XHRzMzIgczMyX21pbixcbjIyNjQ6XHRcdFx0XHRcdHMzMiBzMzJfbWF4KVxuMjI2NTpcdHtcbjIyNjY6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdzICYjNDM7IHJlZ25vO1xuMjI2NzpcdFxuMjI2ODpcdFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXG4yMjY5Olx0XHRcdFx0IG1heF90KHMzMiwgcmVnX3MzMl9taW4ocmVnKSwgczMyX21pbiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTA1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlZ2lzdGVyIE1hcmtpbmcgaW4gQlBGKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgdXNpbmcgYG1lbXNldChyZWcsIDAsIHNpemVvZigqcmVnKSlgLiBUaGlzIG1lYW5zIHRoZSBlbnRpcmUgcmVnaXN0ZXIgc3RydWN0dXJlIGlzIGJlaW5nIHplcm9lZCBvdXQuIFRoYXQmIzM5O3MgZ29vZCwgaXQgbWFrZXMgdGhlIGNvZGUgcHJlZGljdGFibGUuIEl0IGFsc28gbWVhbnMgdGhhdCBmaWVsZHMgbGlrZSBgYWRkX2NvbnN0OjJgIGFuZCBgc3VicmVnOjJgLCB3aGljaCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBvZiAwLCB3aGljaCBhbHNvIHRyYW5zbGF0ZXMgdG8gYE5PTkVgLCBhcmUgZ3VhcmFudGVlZCB0byBiZSByZXNldC4gVGhpcyBtYWtlcyB0aGUgbG9naWMgbW9yZSByZWxpYWJsZSwgYW5kIEkgbGlrZSB0aGF0IGl0IGNsZWFycyBldmVyeXRoaW5nIHRvIGEga25vd24gc3RhdGUuCgpOb3csIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgX19tYXJrX3JlZ19rbm93bmAgdG8gc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHJlZ2lzdGVyIHplcm9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTAwOlx0LyogTWFyayB0aGUgdW5rbm93biBwYXJ0IG9mIGEgcmVnaXN0ZXIgKHZhcmlhYmxlIG9mZnNldCBvciBzY2FsYXIgdmFsdWUpIGFzXG4xOTAxOlx0ICoga25vd24gdG8gaGF2ZSB0aGUgdmFsdWUgQGltbS5cbjE5MDI6XHQgKi9cbjE5MDM6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX2tub3duKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHU2NCBpbW0pXG4xOTA0Olx0e1xuMTkwNTpcdFx0LyogQ2xlYXIgb2ZmIGFuZCB1bmlvbihtYXBfcHRyLCByYW5nZSkgKi9cbjE5MDY6XHRcdG1lbXNldCgoKHU4ICopcmVnKSAmIzQzOyBzaXplb2YocmVnLVx1MDAzZXR5cGUpLCAwLFxuMTkwNzpcdFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCB2YXJfb2ZmKSAtIHNpemVvZihyZWctXHUwMDNldHlwZSkpO1xuMTkwODpcdFx0cmVnLVx1MDAzZWlkID0gMDtcbjE5MDk6XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSAwO1xuMTkxMDpcdFx0cmVnLVx1MDAzZWFkZF9jb25zdCA9IEFERF9DT05TVF9OT05FO1xuMTkxMTpcdFx0cmVnLVx1MDAzZXN1YnJlZyA9IFNVQlJFR19OT05FO1xuMTkxMjpcdFx0X19fbWFya19yZWdfa25vd24ocmVnLCBpbW0pO1xuMTkxMzpcdH1cbjE5MTQ6XHRcbjE5MTU6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnMzJfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcbjE5MTY6XHR7XG4xOTE3Olx0XHRyZWctXHUwMDNldmFyX29mZiA9IHRudW1fY29uc3Rfc3VicmVnKHJlZy1cdTAwM2V2YXJfb2ZmLCBpbW0pO1xuMTkxODpcdFx0cmVnLVx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3VyYW5nZSgodTMyKWltbSwgKHUzMilpbW0pO1xuMTkxOTpcdH1cbjE5MjA6XHRcbjE5MjE6XHQvKiBNYXJrIHRoZSAmIzM5O3ZhcmlhYmxlIG9mZnNldCYjMzk7IHBhcnQgb2YgYSByZWdpc3RlciBhcyB6ZXJvLiAgVGhpcyBzaG91bGQgYmVcbjE5MjI6XHQgKiB1c2VkIG9ubHkgb24gcmVnaXN0ZXJzIGhvbGRpbmcgYSBwb2ludGVyIHR5cGUuXG4xOTIzOlx0ICovXG4xOTI0Olx0c3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bl96ZXJvKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODczCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgUmVnaXN0ZXIgU3RhdGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIHplcm9lcyBvdXQgdGhlIGBpZGAsIGBkZWx0YWAsIGFuZCBgYWRkX2NvbnN0YCBtZW1iZXJzIG9mIGEgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdCwgYW5kIGFsc28gcmVzZXRzIGBzdWJyZWdgIHRvIGBTVUJSRUdfTk9ORWAuIFRoYXQmIzM5O3MgZ29vZCwgYnV0IGl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGlzIGlzIHRoZSAqb25seSogcGxhY2Ugd2hlcmUgdGhlc2UgZmllbGRzIG1pZ2h0IGJlIG9ubHkgKnBhcnRpYWxseSogaW5pdGlhbGl6ZWQsIGNvcGllZCwgb3IgY29tcGFyZWQuIEl0JiMzOTtzIGNydWNpYWwgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LgoKU28sIEkgbmVlZCB0byBleHBhbmQgbXkgdmlldy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIHJlZ2lzdGVycyBhcmUgYmVpbmcgaGFuZGxlZCB0aHJvdWdob3V0IHRoZSBCUEYgc3Vic3lzdGVtIGFuZCBoZWxwIG1lIGlkZW50aWZ5IG90aGVyIGFyZWFzIHRoYXQgbWlnaHQgbmVlZCBzaW1pbGFyIGNsZWFudXAgb3IgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIHRvIGF2b2lkIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBvciBpbXByb3Blcmx5IG1hbmFnZWQgcmVnaXN0ZXIgc3RhdGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBkZXNpZ24gaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCByZWx5IG9uIGFzc3VtcHRpb25zIGFib3V0IGltcGxpY2l0IGRlZmF1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmVnX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE2MzQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9Njc5PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNjgyLVx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpmdW5jO1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzo2ODM6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xua2VybmVsL2JwZi9iYWNrdHJhY2suYy02ODQtXHRpbnQgaSwgajtcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jPTgxMz1pbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy04MjQtXHRib29sIHRtcCwgc2tpcF9maXJzdCA9IHRydWU7XG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjgyNTpcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTgyNi1cdGludCBpLCBmciwgZXJyO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NzQxMD1pbnQgYnRmX3N0cnVjdF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvYnRmLmM6NzQxMTpcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvYnRmLmMtNzQxMi1cdFx0ICAgICAgaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGF0eXBlIF9fbWF5YmVfdW51c2VkLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTgyNz1ib29sIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL2J0Zi5jOjk4Mjg6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi9idGYuYy05ODI5LVx0XHRcdFx0Y29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZCwgY29uc3QgY2hhciAqc3VmZml4KVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yMDc9c3RydWN0IGJwZl9kaWFnX21vZF9zY29wZSB7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MjA4Olx0c3RydWN0IGJwZl9yZWdfc3RhdGUgdGFyZ2V0X3JlZ19zbmFwc2hvdDtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMDktXHRzdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCB0YXJnZXQ7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTEyMzI9dm9pZCBicGZfZGlhZ19pbnZhbGlkX2RlcmVmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgaW50IHJlZ25vLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjEyMzM6XHRcdFx0ICAgIGNvbnN0IGNoYXIgKnJlZ19uYW1lLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTEyMzQtXHRcdFx0ICAgIGVudW0gYnBmX2RpYWdfaW52YWxpZF9kZXJlZl9raW5kIGtpbmQsIHM2NCBvZmZzZXQpXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE0NDE9c3RhdGljIHZvaWQgZGlhZ19zbmFwc2hvdF9yZWcoc3RydWN0IGJwZl9kaWFnX3JlZ19zbmFwc2hvdCAqc25hcHNob3QsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTQ0MjpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NDMte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNTEyPXN0YXRpYyB2b2lkIGRpYWdfcmVjb3JkX21vZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1MTQtXHRcdFx0ICAgIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTUxNTpcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9yZWcsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTUxNjpcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm5ld19yZWcsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTUxNy1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgKm9yaWdpbilcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU0Ny1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNTQ4OnN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdGFyZ2V0X3RvX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NDktXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0ICp0YXJnZXQpXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NzgtXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTU3OTpzdGF0aWMgYm9vbCByZWdfdG9fdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU4MC1cdFx0XHQgIHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0ICp0YXJnZXQpXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE2MTktXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTYyMDp2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjE6XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbilcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjIyLXtcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTYzNj12b2lkIGJwZl9kaWFnX21vZF9lbmQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYzOC1cdHN0cnVjdCBicGZfZGlhZyAqZGlhZyA9IGVudi1cdTAwM2VkaWFnO1xua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2Mzk6XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbmV3X3JlZztcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjQwLVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjU1LVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2NTY6dm9pZCBicGZfZGlhZ19yZWNvcmRfc2NydWIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjU3LVx0XHRcdCAgIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE5MzI9c3RhdGljIGNvbnN0IGNoYXIgKmRpYWdfYWNjZXNzX29mZnNldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE5MzM6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE5MzQte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xOTUyPXZvaWQgYnBmX2RpYWdfbWVtX2JvdW5kcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xOTUzLVx0XHRcdCBjb25zdCBjaGFyICpyZWdfbmFtZSwgY29uc3QgY2hhciAqdHlwZV9uYW1lLCBjb25zdCBjaGFyICpwcm9vZixcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxOTU0Olx0XHRcdCBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTMyIG1lbV9zaXplLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE5NTUte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaD0xMz1zdHJ1Y3QgYnBmX2Z1bmNfc3RhdGU7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6MTQ6c3RydWN0IGJwZl9yZWdfc3RhdGU7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtMTUtc3RydWN0IGJwZl92ZXJpZmllcl9lbnY7XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTYwPXZvaWQgYnBmX2RpYWdfaW52YWxpZF9kZXJlZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaDo2MTpcdFx0XHQgICAgY29uc3QgY2hhciAqcmVnX25hbWUsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtNjItXHRcdFx0ICAgIGVudW0gYnBmX2RpYWdfaW52YWxpZF9kZXJlZl9raW5kIGtpbmQsIHM2NCBvZmZzZXQpO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaD02OT12b2lkIGJwZl9kaWFnX21lbV9ib3VuZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBpbnQgcmVnbm8sXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtNzAtXHRcdFx0IGNvbnN0IGNoYXIgKnJlZ19uYW1lLCBjb25zdCBjaGFyICp0eXBlX25hbWUsIGNvbnN0IGNoYXIgKnByb29mLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oOjcxOlx0XHRcdCBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTMyIG1lbV9zaXplLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC03Mi12b2lkIGJwZl9kaWFnX3JlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoYXIgKnByb2JsZW0sXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaDo5ODp2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oOjk5Olx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvcmlnaW4sIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pO1xua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oLTEwMC12b2lkIGJwZl9kaWFnX21vZF9lbmQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6MTAxOnZvaWQgYnBmX2RpYWdfcmVjb3JkX3NjcnViKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtMTAyLVx0XHRcdCAgIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pO1xuLS1cbmtlcm5lbC9icGYvbG9nLmM9NTUzPXN0YXRpYyB2b2lkIHByaW50X3NjYWxhcl9yYW5nZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbG9nLmM6NTU0Olx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvbG9nLmMtNTU1LVx0XHRcdFx0Y29uc3QgY2hhciAqKnNlcClcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTYyND1zdGF0aWMgdm9pZCBwcmludF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbG9nLmMtNjI1LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxua2VybmVsL2JwZi9sb2cuYzo2MjY6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL2xvZy5jLTYyNy17XG4tLVxua2VybmVsL2JwZi9sb2cuYz03MDQ9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG4tLVxua2VybmVsL2JwZi9sb2cuYy03MDctXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gdnN0YXRlLVx1MDAzZWZyYW1lW2ZyYW1lbm9dO1xua2VybmVsL2JwZi9sb2cuYzo3MDg6XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xua2VybmVsL2JwZi9sb2cuYy03MDktXHRpbnQgaTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTIyNz1zdGF0aWMgaW50IGFkZF9zY2NfYmFja2VkZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTI1NC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MjU1Oi8qIGJwZl9yZWdfc3RhdGUtXHUwMDNlbGl2ZSBtYXJrcyBmb3IgcmVnaXN0ZXJzIGluIGEgc3RhdGUgQHN0IGFyZSBpbmNvbXBsZXRlLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNTYtICogaWYgc3RhdGUgQHN0IGlzIGluIHNvbWUgU0NDIGFuZCBub3QgYWxsIGV4ZWN1dGlvbiBwYXRocyBzdGFydGluZyBhdCB0aGlzXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0yNzM9aW50IGJwZl91cGRhdGVfYnJhbmNoX2NvdW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwMS0vKiBjaGVjayAlY3VyJiMzOTtzIHJhbmdlIHNhdGlzZmllcyAlb2xkJiMzOTtzICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjMwMjpzdGF0aWMgYm9vbCByYW5nZV93aXRoaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MzAzOlx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMDQte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MzgzPXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDI5LVx0XHRcdGlmICghaGlfbGl2ZSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzA6XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3BpbGwgPSBcdTAwMjZzdC1cdTAwM2VzdGFja1tpXS5zcGlsbGVkX3B0cjtcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMxLVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NDU2PXN0YXRpYyBpbnQgY2xlYW5fdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ3Mi1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDczOnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ3NDpcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYy00NzUtXHRcdCAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDc2LXtcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDc3Olx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy00NzgtXHQgICAgICAgcm9sZC1cdTAwM2VhZGRfY29uc3QgPT0gcmN1ci1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz00ODQ9ZW51bSBleGFjdF9sZXZlbCB7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTAtLyogUmV0dXJucyB0cnVlIGlmIChyb2xkIHNhZmUgaW1wbGllcyByY3VyIHNhZmUpICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ5MTpzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTI6XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5My1cdFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy01NjEtXHRcdCAqIEZpcnN0IHZlcmlmaWNhdGlvbiBwYXRoIGlzIFsxLTZdOlxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NjI6XHRcdCAqIC0gYXQgKDQpIHNhbWUgYnBmX3JlZ19zdGF0ZTo6aWQgKGIpIHdvdWxkIGJlIGFzc2lnbmVkIHRvIHI2IGFuZCByNztcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTYzLVx0XHQgKiAtIGF0ICg1KSByNiB3b3VsZCBiZSBtYXJrZWQgXHUwMDNjPSBYLCBzeW5jX2xpbmtlZF9yZWdzKCkgd291bGQgYWxzbyBtYXJrXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy02MDAtXHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo2MDE6XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpKSA9PSAwIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy02MDItXHRcdCAgICAgICByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy02MzQtXHRjYXNlIFBUUl9UT19JTlNOOlxua2VybmVsL2JwZi9zdGF0ZXMuYzo2MzU6XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpKSA9PSAwIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy02MzYtXHRcdCAgICAgICByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2IHRudW1faW4ocm9sZC1cdTAwM2V2YXJfb2ZmLCByY3VyLVx1MDAzZXZhcl9vZmYpO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQxLVxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NDI6c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlIHVuYm91bmRfcmVnO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02NDMtXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz02NTc9c3RhdGljIGJvb2wgaXNfc3RhY2tfbWlzY19hZnRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNjcyLVxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NzM6c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9zdGF0ZXMuYy02NzQtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaywgaW50IGltKVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9Njg1PXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY5NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9sZC1cdTAwM2VhbGxvY2F0ZWRfc3RhY2s7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY5NjpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9yZWcsICpjdXJfcmVnO1xua2VybmVsL2JwZi9zdGF0ZXMuYy02OTctXHRcdGludCBpbSA9IGkgJSBCUEZfUkVHX1NJWkU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03NjktXHRcdFx0ICogRXg6IGV4cGxvcmVkIHNhZmUgcGF0aCBjb3VsZCBoYXZlIHN0b3JlZFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NzA6XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC04fVxua2VybmVsL2JwZi9zdGF0ZXMuYy03NzEtXHRcdFx0ICogYnV0IGN1cnJlbnQgcGF0aCBoYXMgc3RvcmVkOlxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NzI6XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC0xNn1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzczLVx0XHRcdCAqIHN1Y2ggdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudC5cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTgzMD1zdGF0aWMgYm9vbCBzdGFja19hcmdfc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zbG90czsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODM4Olx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkX2FyZywgKmN1cl9hcmc7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjgzOTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgbm90X2luaXQgPSB7IC50eXBlID0gTk9UX0lOSVQgfTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtODQwLVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTAwND1zdGF0aWMgaW50IHByb3BhZ2F0ZV9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDgte1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDA5Olx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0YXRlX3JlZztcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMC1cdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMDk3PXN0YXRpYyBib29sIHN0YXRlc19tYXliZV9sb29waW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExMDktXHRcdGlmIChtZW1jbXAoXHUwMDI2Zm9sZC1cdTAwM2VyZWdzW2ldLCBcdTAwMjZmY3VyLVx1MDAzZXJlZ3NbaV0sXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExMTA6XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGZyYW1lbm8pKSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTExMS1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTczPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExNzQte1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMTc1Olx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNsb3QsICpjdXJfc2xvdDtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE3Ni1cdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTk3PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE5OS1cdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqZnVuYztcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIwMDpcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMDEtXHRpbnQgaSwgajtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMjI9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMTctXHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyX2ZyYW1lO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzE4Olx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqaXRlcl9zdGF0ZSwgKml0ZXJfcmVnO1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzE5LVx0XHRcdFx0XHRpbnQgc3BpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTY9c3RhdGljIGludCByZWZfc2V0X25vbl9vd25pbmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTc6XHRcdFx0ICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE4OnN0YXRpYyBib29sIGlzX3RydXN0ZWRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxOS1zdGF0aWMgaW5saW5lIGJvb2wgaW5fc2xlZXBhYmxlX2NvbnRleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjIwPXN0YXRpYyBjb25zdCBjaGFyICpub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjIxOnN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjIyOnN0YXRpYyB2b2lkIHNjYWxhcl9taW5fbWF4X2FkZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIyMy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjM0PXN0YXRpYyB2b2lkIGJwZl9tYXBfa2V5X3N0b3JlKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4LCB1NjQgc3RhdGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTI0MS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyNDI6c3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmooc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNDMte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjc9c3RhdGljIHZvaWQgdmVyYm9zZV9pbnZhbGlkX3NjYWxhcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyODpcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI5LVx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IGNoYXIgKmN0eCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0ODpzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDkte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzc2OnN0YXRpYyBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVnX2J0Zl9yZWNvcmQoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzcte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODM9c3RhdGljIGJvb2wgc3VicHJvZ19pc19leGNfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODg6c3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODkte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01ODg9c3RhdGljIGJvb2wgaXNfc3BpX2JvdW5kc192YWxpZChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpLCBpbnQgbnJfc2xvdHMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwMS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDI6c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAzLVx0XHRcdCAgICAgICAgICBjb25zdCBjaGFyICpvYmpfa2luZCwgaW50IG5yX3Nsb3RzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI5OnN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM0OnN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzUte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5OnN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY4ND1zdGF0aWMgYm9vbCBkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODk6c3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTAtXHRcdFx0ICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjkzPXN0YXRpYyB2b2lkIG1hcmtfZHlucHRyX3N0YWNrX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTQ6XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzEsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njk1Olx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyZWcyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5Ni1cdFx0XHRcdCAgIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsIGludCBwYXJlbnRfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcwND1zdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9jYl9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MDU6XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzA2LVx0XHRcdCAgICAgICBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MTE9c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTQ6c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxNS1cdFx0XHRcdCAgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlLCBpbnQgaW5zbl9pZHgsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4Mz1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5NjpzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTcte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MTY9c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODE3Olx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODE5OnN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04Mjc9c3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgzMC1cdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODMxOlx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzItXHRpbnQgcmVmX2NudCA9IDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg0Nj1zdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODg3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjg4ODpzdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg4OS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkxNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MTY6c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0NTpzdGF0aWMgZW51bSBicGZfZHlucHRyX3R5cGUgZHlucHRyX3JlZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ2LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk2MDpzdGF0aWMgYm9vbCBpc19keW5wdHJfdHlwZV9leHBlY3RlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk2MS1cdFx0XHRcdCAgICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTY5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk3MDpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX2tub3duX3plcm8oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTcxLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NzY9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NzctXHRcdFx0XHQgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk3ODpcdFx0XHRcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgaW5zbl9pZHgsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTc5LVx0XHRcdFx0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCwgaW50IG5yX3Nsb3RzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTMtXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSBpXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5OTQ6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdCA9IFx1MDAyNnNsb3QtXHUwMDNlc3BpbGxlZF9wdHI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk1LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE5PXN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDIwOlx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjEte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMwLVx0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpIC0gaV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzMTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMyLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDQ3PXN0YXRpYyBib29sIGlzX2l0ZXJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDg6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQ5LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDc0OnN0YXRpYyBpbnQgaXNfaXRlcl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNzUtXHRcdFx0XHQgICBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsIGludCBucl9zbG90cylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4NS1cdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaSAtIGldO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwODY6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdCA9IFx1MDAyNnNsb3QtXHUwMDNlc3BpbGxlZF9wdHI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4Ny1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwOT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdF9pcnFfZmxhZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTAtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTExOlx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgaW5zbl9pZHgsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMi1cdFx0XHRcdCAgICAgaW50IGtmdW5jX2NsYXNzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE1LVx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE2Olx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTctXHRpbnQgc3BpLCBpLCBpZDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQyOnN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQzLVx0XHRcdFx0ICAgICAgaW50IGtmdW5jX2NsYXNzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQ2LVx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQ3Olx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDgtXHRpbnQgc3BpLCBpLCBlcnI7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIwNzpzdGF0aWMgYm9vbCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwOC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIzMTpzdGF0aWMgaW50IGlzX2lycV9mbGFnX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzMi17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzQtXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMzU6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3Q7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzNi1cdGludCBzcGksIGk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzODc9c3RhdGljIGludCBjb3B5X3N0YWNrX3N0YXRlKHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqZHN0LCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnNyYylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMS1cdFx0ZHN0LVx1MDAzZXN0YWNrX2FyZ19yZWdzID0gY29weV9hcnJheShkc3QtXHUwMDNlc3RhY2tfYXJnX3JlZ3MsIHNyYy1cdTAwM2VzdGFja19hcmdfcmVncywgbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDAyOlx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUpLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDMtXHRcdFx0XHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NTA9c3RhdGljIGludCBncm93X3N0YWNrX2FyZ19zbG90cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDU4LVx0c3RhdGUtXHUwMDNlc3RhY2tfYXJnX3JlZ3MgPSByZWFsbG9jX2FycmF5KHN0YXRlLVx1MDAzZXN0YWNrX2FyZ19yZWdzLCBvbGRfbiwgY250LFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NTk6XHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjAtXHRpZiAoIXN0YXRlLVx1MDAzZXN0YWNrX2FyZ19yZWdzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTU3PXN0YXRpYyBib29sIGZpbmRfcmVmZXJlbmNlX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlLCBpbnQgaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3MTpzdGF0aWMgYm9vbCByZWdfaXNfcmVmZXJlbmNlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODgxPXN0YXRpYyB2b2lkIGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgyOlx0XHRcdFx0XHQgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4My17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4OTItLyogVGhpcyBoZWxwZXIgZG9lc24mIzM5O3QgY2xlYXIgcmVnLVx1MDAzZWlkICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzpzdGF0aWMgdm9pZCBfX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4OTQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAyLSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDM6c3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA2LVx0bWVtc2V0KCgodTggKilyZWcpICYjNDM7IHNpemVvZihyZWctXHUwMDNldHlwZSksIDAsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwNzpcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikgLSBzaXplb2YocmVnLVx1MDAzZXR5cGUpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA4LVx0cmVnLVx1MDAzZWlkID0gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTE1OnN0YXRpYyB2b2lkIF9fbWFya19yZWczMl9rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTIzLSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MjQ6c3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bl96ZXJvKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkyNS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkyOTpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX2NvbnN0X3plcm8oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTMwLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzOT1zdGF0aWMgdm9pZCBtYXJrX3JlZ19rbm93bl96ZXJvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MDpcdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0NTpzdGF0aWMgdm9pZCBfX21hcmtfZHlucHRyX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDYtXHRcdFx0ICAgICAgYm9vbCBmaXJzdF9zbG90LCBpbnQgaWQsIGludCBwYXJlbnRfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjQtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2NTpzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODc6c3RhdGljIHZvaWQgbWFya19wdHJfbm90X251bGxfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4OC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk5MjpzdGF0aWMgdm9pZCBtYXJrX3JlZ19ncmFwaF9ub2RlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5My1cdFx0XHRcdHN0cnVjdCBidGZfZmllbGRfZ3JhcGhfcm9vdCAqZHNfaGVhZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwMC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDAxOnN0YXRpYyBib29sIHJlZ19pc19wa3RfcG9pbnRlcihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDY6c3RhdGljIGJvb2wgcmVnX2lzX3BrdF9wb2ludGVyX2FueShjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDcte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDExLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTI6c3RhdGljIGJvb2wgcmVnX2lzX2R5bnB0cl9zbGljZV9wa3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDEzLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOS0vKiBVbm1vZGlmaWVkIFBUUl9UT19QQUNLRVRbX01FVEEsX0VORF0gcmVnaXN0ZXIgZnJvbSBjdHggYWNjZXNzLiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjA6c3RhdGljIGJvb2wgcmVnX2lzX2luaXRfcGt0X3BvaW50ZXIoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxLVx0XHRcdFx0ICAgIGVudW0gYnBmX3JlZ190eXBlIHdoaWNoKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzI6c3RhdGljIHZvaWQgX19tYXJrX3JlZzMyX3VuYm91bmRlZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzMte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzc6c3RhdGljIHZvaWQgX19tYXJrX3JlZzY0X3VuYm91bmRlZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQyLS8qIFJlc2V0IHRoZSBtaW4vbWF4IGJvdW5kcyBvZiBhIHJlZ2lzdGVyICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA0MzpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3VuYm91bmRlZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQ4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDk6c3RhdGljIHZvaWQgcmVzZXRfcmVnNjRfYW5kX3RudW0oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUwLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDU1OnN0YXRpYyB2b2lkIHJlc2V0X3JlZzMyX2FuZF90bnVtKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNzM9c3RhdGljIHN0cnVjdCBjbnVtNjQgY251bTY0X2Zyb21fdG51bShzdHJ1Y3QgdG51bSB0bnVtKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODQ6c3RhdGljIHZvaWQgX191cGRhdGVfcmVnMzJfYm91bmRzKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4OTpzdGF0aWMgdm9pZCBfX3VwZGF0ZV9yZWc2NF9ib3VuZHMoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDkwLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTI0OnN0YXRpYyB2b2lkIF9fdXBkYXRlX3JlZ19ib3VuZHMoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI1LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTMwOnN0YXRpYyB2b2lkIGRlZHVjZV9ib3VuZHNfMzJfZnJvbV82NChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDM3CgkJCQkJCQlvdXRwdXQ6IDI2MgoJCQkJCQkJdGhvdWdodHM6IDk5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSByZWZhY3RvcmluZyBob3cgdGhlIEJQRiB2ZXJpZmllciB0cmFja3MgbGlua2VkIHJlZ2lzdGVycyBhbmQgaGFuZGxlcyBzdWItcmVnaXN0ZXIgb3BlcmF0aW9ucy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5czogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgcG9zc2liaWxpdHkgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZiBpbiB3YXlzIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgZGV0ZWN0YWJsZSBieSBLTVNBTj8KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5naW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpbnZvbHZlczoKCjEuICAqKlJlcGxhY2luZyB0aGUgT2xkIEVuY29kaW5nOioqICBQcmV2aW91c2x5LCBsaW5rZWQgY29uc3RhbnRzIHdlcmUgZW5jb2RlZCB3aXRoaW4gdGhlIGByZWctJmd0O2lkYC4gVGhlIHBhdGNoIGlzIG1vdmluZyBhd2F5IGZyb20gdGhhdCBvYmZ1c2NhdGlvbi4gSSYjMzk7dmUgc2VlbiBlbm91Z2ggdmVyaWZpZXIgY29kZSB0byBrbm93IHRob3NlIGJpdHdpc2UgbWFuaXB1bGF0aW9ucyBjYW4gYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uIGFuZCBzdWJ0bGUgYnVncy4KMi4gICoqSW50cm9kdWNpbmcgQml0ZmllbGRzOioqIEV4cGxpY2l0IGJpdGZpZWxkcyAoYGFkZF9jb25zdGAsIGBzdWJyZWdgKSB3aXRoaW4gYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gVGhpcyBpcyBjbGVhbmVyIGFuZCBtb3JlIGV4cGxpY2l0LiAgSXQmIzM5O3MgYSBnb29kIHN0ZXAsIG1ha2luZyB0aGUgaW50ZW50IGNsZWFyZXIuCjMuICAqKkltcHJvdmVkIFRyYWNraW5nOioqICBUaGUgcGF0Y2ggaW1wcm92ZXMgc3ViLXJlZ2lzdGVyIHRyYWNraW5nIGZvciBvcGVyYXRpb25zIGxpa2UgemVyby1leHRlbnNpb24gKGBaRVhUYCkgYW5kIHNpZ24tZXh0ZW5zaW9uIChgU0VYVGApLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgY29ycmVjdG5lc3MuCjQuICAqKmB0bnVtX3NleHRgOioqICBUaGUgYWRkaXRpb24gb2YgYHRudW1fc2V4dGAgc2VlbXMgcmVsYXRlZCB0byBzaWduIGV4dGVuc2lvbiB3aXRoaW4gdGhlIGB0bnVtYCAodHJhY2tlZCBudW1iZXIpIHJlcHJlc2VudGF0aW9uLiAgVGhlIGNvZGUgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLgo1LiAgKipWZXJpZmllciBDb2RlIENoYW5nZXM6KiogU2V2ZXJhbCBjaGFuZ2VzIGFyZSBldmlkZW50IGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBTcGVjaWZpY2FsbHksIHRoZXNlIGNoYW5nZXM6CiAgICAqICAgRXhwbGljaXRseSBjb21wYXJlIHRoZSBuZXcgZmllbGRzIGluIGByZWdzX2V4YWN0YCBhbmQgYHJlZ3NhZmVgCiAgICAqICAgUmVzZXQgYGFkZF9jb25zdGAgYW5kIGBzdWJyZWdgIGluIGBjbGVhcl9zY2FsYXJfaWRgIGFuZCBgX19tYXJrX3JlZ19rbm93bmAuCiAgICAqICAgTWVtc2V0IHRoZSBlbnRpcmUgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdCB0byAwIGluIGBfX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYC4KICAgICogICBVc2UgdGhlIG5ldyBmaWVsZHMgaW4gYHN5bmNfbGlua2VkX3JlZ3NgIGR1cmluZyB6ZXh0L3NleHQgcmVjb25zdHJ1Y3Rpb24uCiAgICAqICAgVXBkYXRlIHN0YWNrIHNwaWxsL2ZpbGwgbG9naWMuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgS01TQU4gY3JpdGVyaWE6CgoqICAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlOioqICBUaGUgYGJwZl9yZWdfc3RhdGVgIGlzIHB1cmVseSBpbnRlcm5hbC4gIEl0JiMzOTtzIG9ubHkgdXNlZCB3aXRoaW4gdGhlIHZlcmlmaWVyLiBUaGVyZSBpcyBubyBjb3B5LXRvLXVzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0IG9wdGlvbiwgb3IgQlBGIGJ1ZmZlciBpbnZvbHZlZC4gVGhlIHZlcmlmaWVyIGxvZyBidWZmZXIgKGB2ZXJib3NlKClgKSB3aGljaCBsb2dzIGZyb20gYGtlcm5lbC9icGYvbG9nLmNgIGlzIG9ubHkgZm9ybWF0dGluZywgbm90IGFuIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgaXMgdGhlIGZpcnN0IGFuZCBtb3N0IGNyaXRpY2FsIHRlc3QuIFBBU1MuCiogICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzOioqIGBicGZfcmVnX3N0YXRlYCBzdHJ1Y3RzIGFyZSB6ZXJvLWluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24gb3Igd2hlbiBtYXJrZWQgYXMgJiMzNDt1bmtub3duJiMzNDsuIFRoZSBrZXkgZmllbGRzIChgYWRkX2NvbnN0YCBhbmQgYHN1YnJlZ2ApIGFyZSBleHBsaWNpdGx5IHJlc2V0IGluIHNldmVyYWwgcGxhY2VzIHdpdGhpbiB0aGUgdmVyaWZpZXIgbG9naWMgKGBjbGVhcl9zY2FsYXJfaWRgLCBgX19tYXJrX3JlZ19rbm93bmAsIGFuZCBgX19tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZWApLiBUaGUgcmVsZXZhbnQgY29kZSBsb29rcyBjbGVhbi4gUEFTUy4KICAgICogICBUaGUgYHRudW1fc2V4dGAgYW5kIGByZWNvbnN0cnVjdF96ZXh0MzJgL2ByZWNvbnN0cnVjdF9zZXh0MzJgIGFyZSBsb2NhbCBjYWxjdWxhdGlvbnMgb3Igc3RydWN0LWNvcHkvZmllbGQtbW9kaWZpY2F0aW9uLiBObyBzaWduIG9mIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCiogICAqKkJQRiBSdW50aW1lL0tlcm5lbC10by1Vc2VyIENvcHkgSW1wYWN0OioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgKnZlcmlmaWVyKiBvbmx5LCB3aGljaCBpcyBzdGF0aWMgYW5hbHlzaXMuICBUaGlzIGlzIG5vdCBpbXBhY3RpbmcgYW55IHJ1bnRpbWUga2VybmVsLXRvLXVzZXIgY29waWVzLiBQQVNTLgoqICAgKipCb3VuZHMgQ2hlY2tzL1Vuc2FmZSBCUEYgUHJvZ3JhbSBJbXBhY3RzOioqICBXaGlsZSBhbnkgdmVyaWZpZXIgYnVnIGNvdWxkIGxlYWQgdG8gYW4gdW5zYWZlIHByb2dyYW0sIHRob3NlIGFyZSBjbGFzc2ljYWwgQlBGIHZ1bG5lcmFiaWxpdGllcyBjYXVnaHQgYnkgS0FTQU4vdmVyaWZpZXIgdGVzdGluZywgbm90IEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGVycm9ycyBvciBpbmZvcm1hdGlvbiBsZWFrcy4KClRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGFib3ZlIGFuYWx5c2lzLCB0aGVyZSBhcmUgKm5vKiBpbmRpY2F0aW9ucyBvZiBLTVNBTi1yZWxldmFudCB2dWxuZXJhYmlsaXRpZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiAgVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGUgdmVyaWZpZXImIzM5O3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYy4gVGhlIG5ldyBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGFuZCByZXNldCBjb25zaXN0ZW50bHkuIFRoZSBwYXRjaCBhdm9pZHMgaW50cm9kdWNpbmcgYW55IGNvZGUgcGF0aHMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgaW5mb3JtYXRpb24gbGVha3MgdmlhIGludGVybmFsIHJlYWRzLiBUaGUgZXhpc3RpbmcgdmVyaWZpZXIgdGVzdCBzdWl0ZXMsIGFsb25nIHdpdGggc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOLCBhcmUgdGhlIGFwcHJvcHJpYXRlIHRlc3RpbmcgdG9vbHMgaGVyZS4KCioqTmVlZHNLTVNBTj1mYWxzZS4qKiAgVGhhdCYjMzk7cyBteSBmaW5hbCBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGFuZCBlbmhhbmNlcyByZWdpc3RlciByZWxhdGlvbnNoaXAgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHNjYWxhciBzdWJyZWdpc3RlciByZWxhdGlvbnMgbGlrZSAzMi1iaXQgemVyby0gYW5kIHNpZ24tZXh0ZW5zaW9ucywgbmFycm93IHN0YWNrIHNwaWxscy9maWxscywgYW5kIG1vdmluZyBhZGQtY29uc3QgZmxhZ3MgZnJvbSByZWdpc3RlciBJRHMgaW50byBkZWRpY2F0ZWQgc3RydWN0IGZpZWxkcykuXG5cbi0gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlIChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhlIEJQRiB2ZXJpZmllciBkdXJpbmcgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuXG4tIFJlZ2lzdGVyIHN0YXRlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkICh2aWEgbWVtc2V0IGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSBvciBleHBsaWNpdCBhc3NpZ25tZW50IGluIF9fbWFya19yZWdfa25vd24gYW5kIGNsZWFyX3NjYWxhcl9pZCksIHNvIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkLlxuLSBQdXJlIGFyaXRobWV0aWMgaGVscGVycyBsaWtlIHRudW1fc2V4dCBvcGVyYXRlIGVudGlyZWx5IG9uIHBhc3MtYnktdmFsdWUgc3RydWN0cyB3aXRoIGluaXRpYWxpemVkIGFyZ3VtZW50cy5cbi0gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHJhbmdlIHRyYWNraW5nIG9yIHJlZ2lzdGVyIHN5bmNocm9uaXphdGlvbiBjb3VsZCBsZWFkIHRvIHVuc291bmQgdmVyaWZpZXIgbG9naWMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBhbmQgS0FTQU4sIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlzayBpbnRyb2R1Y2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBhbmQgZW5oYW5jZXMgcmVnaXN0ZXIgcmVsYXRpb25zaGlwIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKHNwZWNpZmljYWxseSBoYW5kbGluZyBzY2FsYXIgc3VicmVnaXN0ZXIgcmVsYXRpb25zIGxpa2UgMzItYml0IHplcm8tIGFuZCBzaWduLWV4dGVuc2lvbnMsIG5hcnJvdyBzdGFjayBzcGlsbHMvZmlsbHMsIGFuZCBtb3ZpbmcgYWRkLWNvbnN0IGZsYWdzIGZyb20gcmVnaXN0ZXIgSURzIGludG8gZGVkaWNhdGVkIHN0cnVjdCBmaWVsZHMpLlxuXG4tIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZSAoc3RydWN0IGJwZl9yZWdfc3RhdGUpIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBCUEYgdmVyaWZpZXIgZHVyaW5nIHByb2dyYW0gdmVyaWZpY2F0aW9uIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuLSBSZWdpc3RlciBzdGF0ZSBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCAodmlhIG1lbXNldCBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Ugb3IgZXhwbGljaXQgYXNzaWdubWVudCBpbiBfX21hcmtfcmVnX2tub3duIGFuZCBjbGVhcl9zY2FsYXJfaWQpLCBzbyBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC5cbi0gUHVyZSBhcml0aG1ldGljIGhlbHBlcnMgbGlrZSB0bnVtX3NleHQgb3BlcmF0ZSBlbnRpcmVseSBvbiBwYXNzLWJ5LXZhbHVlIHN0cnVjdHMgd2l0aCBpbml0aWFsaXplZCBhcmd1bWVudHMuXG4tIEFueSBwb3RlbnRpYWwgYnVncyBpbiB2ZXJpZmllciByYW5nZSB0cmFja2luZyBvciByZWdpc3RlciBzeW5jaHJvbml6YXRpb24gY291bGQgbGVhZCB0byB1bnNvdW5kIHZlcmlmaWVyIGxvZ2ljIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBleGVjdXRpb24sIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgYW5kIEtBU0FOLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2sgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MDkuNDQ4MDQwMzY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTczODA3NzgxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInN5bmNfbGlua2VkX3JlZ3NcIixcbiAgICBcImNoZWNrX2FsdV9vcFwiLFxuICAgIFwiY2hlY2tfbWVtX2FjY2Vzc1wiLFxuICAgIFwiYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHNcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNvZXJjZV9yZWdfdG9fc2l6ZV9zeFwiLFxuICAgIFwidG51bV9zZXh0XCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICAgIFwiYnBmX2NsZWFyX3Npbmd1bGFyX2lkc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBhbmQgZW5oYW5jZXMgcmVnaXN0ZXIgcmVsYXRpb25zaGlwIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKHNwZWNpZmljYWxseSBoYW5kbGluZyBzY2FsYXIgc3VicmVnaXN0ZXIgcmVsYXRpb25zIGxpa2UgMzItYml0IHplcm8tIGFuZCBzaWduLWV4dGVuc2lvbnMsIG5hcnJvdyBzdGFjayBzcGlsbHMvZmlsbHMsIGFuZCBtb3ZpbmcgYWRkLWNvbnN0IGZsYWdzIGZyb20gcmVnaXN0ZXIgSURzIGludG8gZGVkaWNhdGVkIHN0cnVjdCBmaWVsZHMpLlxcblxcbi0gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlIChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhlIEJQRiB2ZXJpZmllciBkdXJpbmcgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuXFxuLSBSZWdpc3RlciBzdGF0ZSBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCAodmlhIG1lbXNldCBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Ugb3IgZXhwbGljaXQgYXNzaWdubWVudCBpbiBfX21hcmtfcmVnX2tub3duIGFuZCBjbGVhcl9zY2FsYXJfaWQpLCBzbyBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC5cXG4tIFB1cmUgYXJpdGhtZXRpYyBoZWxwZXJzIGxpa2UgdG51bV9zZXh0IG9wZXJhdGUgZW50aXJlbHkgb24gcGFzcy1ieS12YWx1ZSBzdHJ1Y3RzIHdpdGggaW5pdGlhbGl6ZWQgYXJndW1lbnRzLlxcbi0gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHJhbmdlIHRyYWNraW5nIG9yIHJlZ2lzdGVyIHN5bmNocm9uaXphdGlvbiBjb3VsZCBsZWFkIHRvIHVuc291bmQgdmVyaWZpZXIgbG9naWMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBhbmQgS0FTQU4sIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrIGludHJvZHVjZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZm9yIHNjYWxhciByZWdpc3RlciBsaW5rYWdlLCBpbnRyb2R1Y2luZyBzdWJyZWcgdHJhY2tpbmcgKFNVQlJFR19aRVhULCBTVUJSRUdfU0VYVCkgZm9yIDMyLWJpdCBuYXJyb3dpbmcgb3BlcmF0aW9ucywgc2lnbi1leHRlbnNpb24gdG51bSBoZWxwZXJzICh0bnVtX3NleHQpLCBzdGFjayBzcGlsbC9maWxsIHNjYWxhciB0cmFja2luZywgYW5kIHVwZGF0aW5nIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcyAocmVnc2FmZSkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIGFuZCBib3VuZHMgdHJhY2tpbmcgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MDkuNDQ4MDQ3MzI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzEzOTQxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2Zjk1YTEzZjU2ZDg2MmZkYjU3OGVmYTEwZDBjMjhmYzNmMTZmZWQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDE4OjMwOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggOTcyN2RmNWFmODNhYi4uOTIwYzk0OTBlY2M4MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC0zNSw2ICszNSwyNyBAQCBlbnVtIGJwZl9pdGVyX3N0YXRlIHtcXG4gXFx0QlBGX0lURVJfU1RBVEVfRFJBSU5FRCxcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFJlY29yZHMgdGhhdCBhIHJlZ2lzdGVyIGlzIChiYXNlICsgLVxcdTAwM2VkZWx0YSkgd2l0aGluIGl0cyAtXFx1MDAzZWlkIHNldDpcXG4rICogcjEgKz0gMTA7ICAgcjEgZ2V0cyBBRERfQ09OU1RfNjQgZGVsdGFcXG4rICogdzMgKz0gMTA7ICAgcjMgZ2V0cyBBRERfQ09OU1RfMzIgZGVsdGFcXG4rICovXFxuK2VudW0gYnBmX2FkZF9jb25zdCB7XFxuK1xcdEFERF9DT05TVF9OT05FID0gMCxcXG4rXFx0QUREX0NPTlNUXzMyLFxcdFxcdC8qIGRlbHRhIHdhcyBhZGRlZCB3aXRoIGEgMzItYml0IEFMVSBvcCAqL1xcbitcXHRBRERfQ09OU1RfNjQsXFx0XFx0LyogLi4uIHdpdGggYSA2NC1iaXQgQUxVIG9wICovXFxuK307XFxuK1xcbisvKlxcbisgKiBSZWNvcmRzIHRoYXQgYSByZWdpc3RlciBzaGFyZXMgb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2Ugb2YgaXRzXFxuKyAqIC1cXHUwMDNlaWQgc2V0LCBhbmQgaG93IGl0cyBoaWdoIGJpdHMgZm9sbG93IGZyb20gdGhlbS5cXG4rICovXFxuK2VudW0gYnBmX3N1YnJlZyB7XFxuK1xcdFNVQlJFR19OT05FID0gMCxcXG4rXFx0U1VCUkVHX1pFWFQsXFx0XFx0LyogaGlnaCBiaXRzIGFyZSB6ZXJvICgzMi1iaXQgemVyby1leHRlbmRpbmcgbW92KSAqL1xcbitcXHRTVUJSRUdfU0VYVCxcXHRcXHQvKiBoaWdoIGJpdHMgcmVwZWF0IGJpdCAzMSAoMzItYml0IHNpZ24tZXh0ZW5kaW5nIG1vdikgKi9cXG4rfTtcXG4rXFxuIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gXFx0LyogT3JkZXJpbmcgb2YgZmllbGRzIG1hdHRlcnMuICBTZWUgc3RhdGVzX2VxdWFsKCkgKi9cXG4gXFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcXG5AQCAtMTM2LDE2ICsxNTcsOSBAQCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XFxuIFxcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXFxuIFxcdCAqL1xcbiBcXHQvKlxcbi1cXHQgKiBVcHBlciBiaXQgb2YgSUQgaXMgdXNlZCB0byByZW1lbWJlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBcXFwibGlua2VkXFxcIlxcbi1cXHQgKiByZWdpc3RlcnMuIEV4YW1wbGU6XFxuK1xcdCAqIFJlZ2lzdGVycyBzaGFyaW5nIGFuIC1cXHUwMDNlaWQgYXJlIFxcXCJsaW5rZWRcXFwiOlxcbiBcXHQgKiByMSA9IHIyOyAgICBib3RoIHdpbGwgaGF2ZSByMS1cXHUwMDNlaWQgPT0gcjItXFx1MDAzZWlkID09IE5cXG4tXFx0ICogcjEgKz0gMTA7ICAgcjEtXFx1MDAzZWlkID09IE4gfCBCUEZfQUREX0NPTlNUIGFuZCByMS1cXHUwMDNlZGVsdGEgPT0gMTBcXG4tXFx0ICogcjMgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjMtXFx1MDAzZWlkID09IHIyLVxcdTAwM2VpZCA9PSBOXFxuLVxcdCAqIHczICs9IDEwOyAgIHIzLVxcdTAwM2VpZCA9PSBOIHwgQlBGX0FERF9DT05TVDMyIGFuZCByMy1cXHUwMDNlZGVsdGEgPT0gMTBcXG4gXFx0ICovXFxuLSNkZWZpbmUgQlBGX0FERF9DT05TVDY0ICgxVSBcXHUwMDNjXFx1MDAzYyAzMSlcXG4tI2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVIFxcdTAwM2NcXHUwMDNjIDMwKVxcbi0jZGVmaW5lIEJQRl9BRERfQ09OU1QgKEJQRl9BRERfQ09OU1Q2NCB8IEJQRl9BRERfQ09OU1QzMilcXG4gXFx0dTMyIGlkO1xcbiBcXHQvKlxcbiBcXHQgKiBUcmFja3MgdGhlIHBhcmVudCBvYmplY3QgdGhpcyByZWdpc3RlciB3YXMgZGVyaXZlZCBmcm9tLlxcbkBAIC0xNjQsNiArMTc4LDEyIEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gXFx0dTMyIGZyYW1lbm87XFxuIFxcdC8qIGlmICghcHJlY2lzZSBcXHUwMDI2XFx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXFxuIFxcdGJvb2wgcHJlY2lzZTtcXG4rXFx0LypcXG4rXFx0ICogSG93IHRoaXMgcmVnaXN0ZXIgcmVsYXRlcyB0byB0aGUgb3RoZXJzIHNoYXJpbmcgaXRzIC1cXHUwMDNlaWQuXFxuK1xcdCAqIE5vbi16ZXJvIG9ubHkgaWYgLVxcdTAwM2VpZCBpcy5cXG4rXFx0ICovXFxuK1xcdGVudW0gYnBmX2FkZF9jb25zdCBhZGRfY29uc3Q6MjtcXG4rXFx0ZW51bSBicGZfc3VicmVnIHN1YnJlZzoyO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBzNjQgcmVnX3NtaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90bnVtLmggYi9pbmNsdWRlL2xpbnV4L3RudW0uaFxcbmluZGV4IGNhMmNmZWM4ZGUwOGEuLjg2NjgwM2RlNTg0MTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC90bnVtLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3RudW0uaFxcbkBAIC02Myw2ICs2Myw5IEBAIHN0cnVjdCB0bnVtIHRudW1fdW5pb24oc3RydWN0IHRudW0gdDEsIHN0cnVjdCB0bnVtIHQyKTtcXG4gLyogUmV0dXJuIEBhIHdpdGggYWxsIGJ1dCB0aGUgbG93ZXN0IEBzaXplIGJ5dGVzIGNsZWFyZWQgKi9cXG4gc3RydWN0IHRudW0gdG51bV9jYXN0KHN0cnVjdCB0bnVtIGEsIHU4IHNpemUpO1xcbiBcXG4rLyogUmV0dXJuIHRoZSBsb3dlc3QgQHNpemUgYnl0ZXMgb2YgQGEgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzICovXFxuK3N0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKTtcXG4rXFxuIC8qIFN3YXAgdGhlIGJ5dGVzIG9mIGEgdG51bSAqL1xcbiBzdHJ1Y3QgdG51bSB0bnVtX2Jzd2FwMTYoc3RydWN0IHRudW0gYSk7XFxuIHN0cnVjdCB0bnVtIHRudW1fYnN3YXAzMihzdHJ1Y3QgdG51bSBhKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9sb2cuYyBiL2tlcm5lbC9icGYvbG9nLmNcXG5pbmRleCBmYjAzMmRmZGMwZGVlLi5iNjdiYmQ0ZDU3ZjQ2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvbG9nLmNcXG4rKysgYi9rZXJuZWwvYnBmL2xvZy5jXFxuQEAgLTY1MSw5ICs2NTEsMTMgQEAgc3RhdGljIHZvaWQgcHJpbnRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXNcXFwiLCBidGZfdHlwZV9uYW1lKHJlZy1cXHUwMDNlYnRmLCByZWctXFx1MDAzZWJ0Zl9pZCkpO1xcbiBcXHR2ZXJib3NlKGVudiwgXFxcIihcXFwiKTtcXG4gXFx0aWYgKHJlZy1cXHUwMDNlaWQpXFxuLVxcdFxcdHZlcmJvc2VfYShcXFwiaWQ9JWRcXFwiLCByZWctXFx1MDAzZWlkIFxcdTAwMjYgfkJQRl9BRERfQ09OU1QpO1xcbi1cXHRpZiAocmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpXFxuK1xcdFxcdHZlcmJvc2VfYShcXFwiaWQ9JWRcXFwiLCByZWctXFx1MDAzZWlkKTtcXG4rXFx0aWYgKHJlZy1cXHUwMDNlYWRkX2NvbnN0KVxcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUrZFxcXCIsIHJlZy1cXHUwMDNlZGVsdGEpO1xcbitcXHRpZiAocmVnLVxcdTAwM2VzdWJyZWcgPT0gU1VCUkVHX1pFWFQpXFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiLmxvMzJcXFwiKTtcXG4rXFx0ZWxzZSBpZiAocmVnLVxcdTAwM2VzdWJyZWcgPT0gU1VCUkVHX1NFWFQpXFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiLmxvMzJzeFxcXCIpO1xcbiBcXHRpZiAocmVnLVxcdTAwM2VwYXJlbnRfaWQpXFxuIFxcdFxcdHZlcmJvc2VfYShcXFwicGFyZW50X2lkPSVkXFxcIiwgcmVnLVxcdTAwM2VwYXJlbnRfaWQpO1xcbiBcXHRpZiAodHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjE2MThjNzcxMDVhYjAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5AQCAtMzY5LDEzICszNjksNiBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuICAqIGFuZCByNy5pZD0wIChib3RoIGluZGVwZW5kZW50KSwgd2l0aG91dCB0ZW1wIElEcyBib3RoIHdvdWxkIG1hcCBvbGRfaWQ9WFxcbiAgKiB0byBjdXJfaWQ9MCBhbmQgcGFzcy4gV2l0aCB0ZW1wIElEczogcjYgbWFwcyBYLVxcdTAwM2V0ZW1wMSwgcjcgdHJpZXMgdG8gbWFwXFxuICAqIFgtXFx1MDAzZXRlbXAyLCBidXQgWCBpcyBhbHJlYWR5IG1hcHBlZCB0byB0ZW1wMSwgc28gdGhlIGNoZWNrIGZhaWxzIGNvcnJlY3RseS5cXG4tICpcXG4tICogV2hlbiBvbGRfaWQgaGFzIEJQRl9BRERfQ09OU1Qgc2V0LCB0aGUgY29tcG91bmQgaWQgKGJhc2UgfCBmbGFnKSBhbmQgdGhlXFxuLSAqIGJhc2UgaWQgKGZsYWcgc3RyaXBwZWQpIG11c3QgYm90aCBtYXAgY29uc2lzdGVudGx5LiBFeGFtcGxlOiBvbGQgaGFzXFxuLSAqIHIyLmlkPUEsIHIzLmlkPUF8ZmxhZyAocjMgPSByMiArIGRlbHRhKSwgY3VyIGhhcyByMi5pZD1CLCByMy5pZD1DfGZsYWdcXG4tICogKHIzIGRlcml2ZWQgZnJvbSB1bnJlbGF0ZWQgcjQpLiBXaXRob3V0IHRoZSBiYXNlIGNoZWNrLCBpZG1hcCBnZXRzIHR3b1xcbi0gKiBpbmRlcGVuZGVudCBlbnRyaWVzIEEtXFx1MDAzZUIgYW5kIEF8ZmxhZy1cXHUwMDNlQ3xmbGFnLCBtaXNzaW5nIHRoYXQgQS1cXHUwMDNlQyBjb25mbGljdHNcXG4tICogd2l0aCBBLVxcdTAwM2VCLiBUaGUgYmFzZSBJRCBjcm9zcy1jaGVjayBjYXRjaGVzIHRoaXMuXFxuICAqL1xcbiBzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbiB7XFxuQEAgLTM4NCwxNSArMzc3LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfc2NhbGFyX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gXFxuIFxcdGN1cl9pZCA9IGN1cl9pZCA/IGN1cl9pZCA6ICsraWRtYXAtXFx1MDAzZXRtcF9pZF9nZW47XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2lkcyhvbGRfaWQsIGN1cl9pZCwgaWRtYXApKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdGlmIChvbGRfaWQgXFx1MDAyNiBCUEZfQUREX0NPTlNUKSB7XFxuLVxcdFxcdG9sZF9pZCBcXHUwMDI2PSB+QlBGX0FERF9DT05TVDtcXG4tXFx0XFx0Y3VyX2lkIFxcdTAwMjY9IH5CUEZfQUREX0NPTlNUO1xcbi1cXHRcXHRpZiAoIWNoZWNrX2lkcyhvbGRfaWQsIGN1cl9pZCwgaWRtYXApKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBjaGVja19pZHMob2xkX2lkLCBjdXJfaWQsIGlkbWFwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19jbGVhbl9mdW5jX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuQEAgLTQ5MCw2ICs0NzUsOCBAQCBzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIHtcXG4gXFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICByb2xkLVxcdTAwM2VhZGRfY29uc3QgPT0gcmN1ci1cXHUwMDNlYWRkX2NvbnN0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICByb2xkLVxcdTAwM2VzdWJyZWcgPT0gcmN1ci1cXHUwMDNlc3VicmVnIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAgICBjaGVja19pZHMocm9sZC1cXHUwMDNlaWQsIHJjdXItXFx1MDAzZWlkLCBpZG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVxcdTAwM2VwYXJlbnRfaWQsIHJjdXItXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xcbiB9XFxuQEAgLTU0Miw4ICs1MjksNyBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiBcXHRcXHRcXHQvKiBleHBsb3JlX2FsdV9saW1pdHMgZGlzYWJsZXMgdG51bV9pbigpIGFuZCByYW5nZV93aXRoaW4oKVxcbiBcXHRcXHRcXHQgKiBsb2dpYyBhbmQgcmVxdWlyZXMgZXZlcnl0aGluZyB0byBiZSBzdHJpY3RcXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgICAgY2hlY2tfc2NhbGFyX2lkcyhyb2xkLVxcdTAwM2VpZCwgcmN1ci1cXHUwMDNlaWQsIGlkbWFwKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICghcm9sZC1cXHUwMDNlcHJlY2lzZSBcXHUwMDI2XFx1MDAyNiBleGFjdCA9PSBOT1RfRVhBQ1QpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC01NTEsNyArNTM3LDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4gXFx0XFx0ICogTGlua2VkIHJlZ2lzdGVyIHRyYWNraW5nIHVzZXMgcm9sZC1cXHUwMDNlaWQgdG8gZGV0ZWN0IHJlbGF0aW9uc2hpcHMuXFxuIFxcdFxcdCAqIFdoZW4gcm9sZC1cXHUwMDNlaWQgPT0gMCwgdGhlIHJlZ2lzdGVyIGlzIGluZGVwZW5kZW50IGFuZCBhbnkgbGlua2luZ1xcbiBcXHRcXHQgKiBpbiByY3VyIG9ubHkgYWRkcyBjb25zdHJhaW50cy4gV2hlbiByb2xkLVxcdTAwM2VpZCAhPSAwLCB3ZSBtdXN0IHZlcmlmeVxcbi1cXHRcXHQgKiBpZCBtYXBwaW5nIGFuZCAoZm9yIEJQRl9BRERfQ09OU1QpIG9mZnNldCBjb25zaXN0ZW5jeS5cXG4rXFx0XFx0ICogaWQgbWFwcGluZyBhbmQgdGhhdCB0aGUgbGluayBraW5kcyBhZ3JlZSwgYWxvbmcgd2l0aCBhbnkgZGVsdGFcXG4rXFx0XFx0ICogdGhleSBjYXJyeS5cXG4gXFx0XFx0ICpcXG4gXFx0XFx0ICogKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xcbiBcXHRcXHQgKiB8ICAgICAgICAgICAgICAgICAgfCByb2xkLVxcdTAwM2VpZCAgfCByb2xkICsgQUREX0NPTlNUIHwgcm9sZC1cXHUwMDNlaWQgPT0gMCB8XFxuQEAgLTU4NywxNyArNTc0LDE2IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxuIFxcdFxcdCAqL1xcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogQUREX0NPTlNUIGZsYWdzIG11c3QgbWF0Y2ggZXhhY3RseTogQlBGX0FERF9DT05TVDMyIGFuZFxcbi1cXHRcXHQgKiBCUEZfQUREX0NPTlNUNjQgaGF2ZSBkaWZmZXJlbnQgbGlua2luZyBzZW1hbnRpY3MgaW5cXG4tXFx0XFx0ICogc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsIGFsdTY0IGRvZXMgbm90KSxcXG4tXFx0XFx0ICogc28gcHJ1bmluZyBhY3Jvc3MgZGlmZmVyZW50IGZsYWcgdHlwZXMgaXMgdW5zYWZlLlxcbitcXHRcXHQgKiBUaGUgbGluayBraW5kcyBtdXN0IG1hdGNoOiBhbHUzMiBhbmQgYWx1NjQgYWRkcyBoYXZlIGRpZmZlcmVudFxcbitcXHRcXHQgKiBsaW5raW5nIHNlbWFudGljcyBpbiBzeW5jX2xpbmtlZF9yZWdzKCkgKGFsdTMyIHplcm8tZXh0ZW5kcyxcXG4rXFx0XFx0ICogYWx1NjQgZG9lcyBub3QpLCBzbyBwcnVuaW5nIGFjcm9zcyB0aGVtIGlzIHVuc2FmZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChyb2xkLVxcdTAwM2VpZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgKHJvbGQtXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkgIT0gKHJjdXItXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVCkpXFxuK1xcdFxcdGlmIChyb2xkLVxcdTAwM2VpZCBcXHUwMDI2XFx1MDAyNiAocm9sZC1cXHUwMDNlYWRkX2NvbnN0ICE9IHJjdXItXFx1MDAzZWFkZF9jb25zdCB8fFxcbitcXHRcXHRcXHRcXHQgcm9sZC1cXHUwMDNlc3VicmVnICE9IHJjdXItXFx1MDAzZXN1YnJlZykpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdFxcdC8qIEJvdGggaGF2ZSBvZmZzZXQgbGlua2FnZTogb2Zmc2V0cyBtdXN0IG1hdGNoICovXFxuLVxcdFxcdGlmICgocm9sZC1cXHUwMDNlaWQgXFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcXHUwMDI2XFx1MDAyNiByb2xkLVxcdTAwM2VkZWx0YSAhPSByY3VyLVxcdTAwM2VkZWx0YSlcXG4rXFx0XFx0aWYgKHJvbGQtXFx1MDAzZWFkZF9jb25zdCBcXHUwMDI2XFx1MDAyNiByb2xkLVxcdTAwM2VkZWx0YSAhPSByY3VyLVxcdTAwM2VkZWx0YSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0XFx0aWYgKCFjaGVja19zY2FsYXJfaWRzKHJvbGQtXFx1MDAzZWlkLCByY3VyLVxcdTAwM2VpZCwgaWRtYXApKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RudW0uYyBiL2tlcm5lbC9icGYvdG51bS5jXFxuaW5kZXggZWM5YzMxMGNmNWQ3Zi4uZTFkYzU3YWZkM2QzMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3RudW0uY1xcbisrKyBiL2tlcm5lbC9icGYvdG51bS5jXFxuQEAgLTIwMCw2ICsyMDAsMjEgQEAgc3RydWN0IHRudW0gdG51bV9jYXN0KHN0cnVjdCB0bnVtIGEsIHU4IHNpemUpXFxuIFxcdHJldHVybiBhO1xcbiB9XFxuIFxcbitzdHJ1Y3QgdG51bSB0bnVtX3NleHQoc3RydWN0IHRudW0gYSwgdTggc2l6ZSlcXG4re1xcbitcXHR1OCBzaGlmdCA9IDY0IC0gc2l6ZSAqIDg7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTaGlmdGluZyB0aGUgZmllbGQgdXAgdG8gdGhlIHRvcCBhbmQgYmFjayBkb3duIGFyaXRobWV0aWNhbGx5XFxuK1xcdCAqIHJlcGxpY2F0ZXMgaXRzIHNpZ24gYml0IHRocm91Z2ggdGhlIGhpZ2ggaGFsZi4gQXBwbHlpbmcgdGhhdCB0byB0aGVcXG4rXFx0ICogbWFzayBhcyB3ZWxsIGNhcnJpZXMgb3ZlciB3aGV0aGVyIHRoZSBzaWduIHdhcyBrbm93bjogYW4gdW5rbm93blxcbitcXHQgKiBzaWduIGJpdCBsZWF2ZXMgZXZlcnkgaGlnaCBiaXQgdW5rbm93bi5cXG4rXFx0ICovXFxuK1xcdGEgPSB0bnVtX2Nhc3QoYSwgc2l6ZSk7XFxuK1xcdHJldHVybiBUTlVNKChzNjQpKGEudmFsdWUgXFx1MDAzY1xcdTAwM2Mgc2hpZnQpIFxcdTAwM2VcXHUwMDNlIHNoaWZ0LFxcbitcXHRcXHQgICAgKHM2NCkoYS5tYXNrIFxcdTAwM2NcXHUwMDNjIHNoaWZ0KSBcXHUwMDNlXFx1MDAzZSBzaGlmdCk7XFxuK31cXG4rXFxuIGJvb2wgdG51bV9pc19hbGlnbmVkKHN0cnVjdCB0bnVtIGEsIHU2NCBzaXplKVxcbiB7XFxuIFxcdGlmICghc2l6ZSlcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggOWU3OTc1MGUyNDgwOC4uOWU2M2VkZGI5MDIzYiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTkwNyw2ICsxOTA3LDggQEAgc3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxcbiBcXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpIC0gc2l6ZW9mKHJlZy1cXHUwMDNldHlwZSkpO1xcbiBcXHRyZWctXFx1MDAzZWlkID0gMDtcXG4gXFx0cmVnLVxcdTAwM2VwYXJlbnRfaWQgPSAwO1xcbitcXHRyZWctXFx1MDAzZWFkZF9jb25zdCA9IEFERF9DT05TVF9OT05FO1xcbitcXHRyZWctXFx1MDAzZXN1YnJlZyA9IFNVQlJFR19OT05FO1xcbiBcXHRfX19tYXJrX3JlZ19rbm93bihyZWcsIGltbSk7XFxuIH1cXG4gXFxuQEAgLTM0ODAsNiArMzQ4Miw4IEBAIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiB7XFxuIFxcdHJlZy1cXHUwMDNlaWQgPSAwO1xcbiBcXHRyZWctXFx1MDAzZWRlbHRhID0gMDtcXG4rXFx0cmVnLVxcdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfTk9ORTtcXG4rXFx0cmVnLVxcdTAwM2VzdWJyZWcgPSBTVUJSRUdfTk9ORTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuQEAgLTM0OTEsOCArMzQ5NSwxMCBAQCBzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0ICogVGhlIHZlcmlmaWVyIGlzIHByb2Nlc3NpbmcgclggPSByWSBpbnNuIGFuZFxcbiBcXHQgKiByWS1cXHUwMDNlaWQgaGFzIHNwZWNpYWwgbGlua2VkIHJlZ2lzdGVyIGFscmVhZHkuXFxuIFxcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxcbitcXHQgKiBBIC1cXHUwMDNlc3VicmVnIGxpbmsgY2FuIGJlIHNoYXJlZDogaXQgZGVzY3JpYmVzIHNyYydzIG93biByZWxhdGlvbnNoaXBcXG4rXFx0ICogdG8gdGhlIHNldCwgbm90IGEgZGVsdGEgdG8gdW53aW5kLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHNyY19yZWctXFx1MDAzZWlkIFxcdTAwMjYgQlBGX0FERF9DT05TVClcXG4rXFx0aWYgKHNyY19yZWctXFx1MDAzZWFkZF9jb25zdClcXG4gXFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHNyY19yZWcpO1xcbiBcXHQvKlxcbiBcXHQgKiBFbnN1cmUgdGhhdCBzcmNfcmVnIGhhcyBhIHZhbGlkIElEIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG9cXG5AQCAtMzUwMyw2ICszNTA5LDMxIEBAIHN0YXRpYyB2b2lkIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRzcmNfcmVnLVxcdTAwM2VpZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcXG4re1xcbitcXHR1NjQgbWFzaztcXG4rXFxuK1xcdC8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi9cXG4rXFx0cmVnLVxcdTAwM2V2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy1cXHUwMDNldmFyX29mZiwgc2l6ZSk7XFxuK1xcbitcXHQvKiBmaXggYXJpdGhtZXRpYyBib3VuZHMgKi9cXG4rXFx0bWFzayA9ICgodTY0KTEgXFx1MDAzY1xcdTAwM2MgKHNpemUgKiA4KSkgLSAxO1xcbitcXHRpZiAoKHJlZ191bWluKHJlZykgXFx1MDAyNiB+bWFzaykgPT0gKHJlZ191bWF4KHJlZykgXFx1MDAyNiB+bWFzaykpXFxuK1xcdFxcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCByZWdfdW1pbihyZWcpIFxcdTAwMjYgbWFzaywgcmVnX3VtYXgocmVnKSBcXHUwMDI2IG1hc2spO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCAwLCBtYXNrKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIHNpemUgaXMgc21hbGxlciB0aGFuIDMyYml0IHJlZ2lzdGVyIHRoZSAzMmJpdCByZWdpc3RlclxcbitcXHQgKiB2YWx1ZXMgYXJlIGFsc28gdHJ1bmNhdGVkIHNvIHdlIHB1c2ggNjQtYml0IGJvdW5kcyBpbnRvXFxuK1xcdCAqIDMyLWJpdCBib3VuZHMuIEFib3ZlIHdlcmUgdHJ1bmNhdGVkIFxcdTAwM2MgMzItYml0cyBhbHJlYWR5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHNpemUgXFx1MDAzYyA0KVxcbitcXHRcXHRfX21hcmtfcmVnMzJfdW5ib3VuZGVkKHJlZyk7XFxuK1xcbitcXHRyZWdfYm91bmRzX3N5bmMocmVnKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc2F2ZV9yZWdpc3Rlcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxcbiBcXHRcXHRcXHRcXHRpbnQgc3BpLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbkBAIC0zNjM0LDE1ICszNjY1LDM4IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkpO1xcbiBcXHRpZiAocmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4gXFx0XFx0Ym9vbCByZWdfdmFsdWVfZml0cztcXG4rXFx0XFx0Ym9vbCBzdWJyZWdfbGluaztcXG4gXFxuIFxcdFxcdHJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBzaXplO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIG5hcnJvd2luZyBzcGlsbCBzdG9yZXMgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBzb3VyY2UsIHNvXFxuK1xcdFxcdCAqIHRoZSBzbG90IGlzIHRoZWlyIHplcm8tZXh0ZW5zaW9uOiByZWNvcmQgYSBsb3ctMzIgbGlua1xcbitcXHRcXHQgKiByYXRoZXIgdGhhbiBkcm9wcGluZyB0aGUgcmVsYXRpb24sIGFzIGEgMzItYml0IG1vdiBkb2VzLlxcbitcXHRcXHQgKiBBIHN0b3JlIG5ldmVyIHNpZ24tZXh0ZW5kcywgc28gdGhlcmUgaXMgb25seSBvbmUga2luZCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3VicmVnX2xpbmsgPSAhcmVnX3ZhbHVlX2ZpdHMgXFx1MDAyNlxcdTAwMjYgc2l6ZSA9PSA0O1xcbitcXG4gXFx0XFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xcbi1cXHRcXHRpZiAocmVnX3ZhbHVlX2ZpdHMpXFxuK1xcdFxcdGlmIChyZWdfdmFsdWVfZml0cyB8fCBzdWJyZWdfbGluaylcXG4gXFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcXG4gXFx0XFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XFxuLVxcdFxcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cXG4tXFx0XFx0aWYgKCFyZWdfdmFsdWVfZml0cylcXG4tXFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuaWQgPSAwO1xcbitcXHRcXHRpZiAoIXJlZ192YWx1ZV9maXRzKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIE9ubHkgdGhlIGxvdyBAc2l6ZSBieXRlcyByZWFjaCBtZW1vcnksIHNvIHJlY29yZFxcbitcXHRcXHRcXHQgKiB3aGF0IHRoZSBzbG90IGhvbGRzIHJhdGhlciB0aGFuIHRoZSB3aWRlciBzb3VyY2VcXG4rXFx0XFx0XFx0ICogaXQgY2FtZSBmcm9tLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplKFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgc2l6ZSk7XFxuK1xcdFxcdFxcdGlmIChzdWJyZWdfbGluayBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5zdWJyZWcgPSBTVUJSRUdfWkVYVDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBOb3RoaW5nIHRvIHJlbGF0ZTogZWl0aGVyIHRoZSBzb3VyY2UgaGFzIG5vXFxuK1xcdFxcdFxcdFxcdCAqIGlkIHRvIHNoYXJlLCBvciB0aGUgc3RvcmUgaXMgbmFycm93ZXIgdGhhblxcbitcXHRcXHRcXHRcXHQgKiB0aGUgMzIgYml0cyBhIGxpbmsgY2FuIGRlc2NyaWJlLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIGlmICghcmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgIGVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4gXFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcXHUwMDI2ZW52LVxcdTAwM2VmYWtlX3JlZ1swXTtcXG5AQCAtMzkyMSw3ICszOTc1LDggQEAgc3RhdGljIHZvaWQgYnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZiwgaW5cXG4gc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHQgICAgICAvKiBmdW5jIHdoZXJlIHNyYyByZWdpc3RlciBwb2ludHMgdG8gKi9cXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpyZWdfc3RhdGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGludCBvZmYsIGludCBzaXplLCBpbnQgZHN0X3JlZ25vKVxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgb2ZmLCBpbnQgc2l6ZSwgaW50IGRzdF9yZWdubyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBpc19sZHN4KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cXHUwMDNlY3VyX3N0YXRlO1xcbiBcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gdnN0YXRlLVxcdTAwM2VmcmFtZVt2c3RhdGUtXFx1MDAzZWN1cmZyYW1lXTtcXG5AQCAtMzk2MiwxOCArNDAxNywzNCBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjPSBzcGlsbF9zaXplIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XFxuLVxcdFxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWJwZl9jYXBhYmxlIFxcdTAwMjZcXHUwMDI2IHNpemUgPT0gNCBcXHUwMDI2XFx1MDAyNiBzcGlsbF9zaXplID09IDQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICAgIGdldF9yZWdfd2lkdGgocmVnKSBcXHUwMDNjPSAzMilcXG4rXFx0XFx0XFx0XFx0Ym9vbCBuYXJyb3dpbmcgPSBnZXRfcmVnX3dpZHRoKHJlZykgXFx1MDAzZSBzaXplICogQklUU19QRVJfQllURTtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogQSBuYXJyb3dpbmcgZmlsbCBrZWVwcyBvbmx5IHRoZSBzbG90J3MgbG93IDMyIGJpdHMsXFxuK1xcdFxcdFxcdFxcdCAqIHNvIHJlY29yZCBhIGxvdy0zMiBsaW5rIHJhdGhlciB0aGFuIGRyb3BwaW5nIHRoZVxcbitcXHRcXHRcXHRcXHQgKiByZWxhdGlvbiwgYXMgYSAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSBkb2VzLlxcbitcXHRcXHRcXHRcXHQgKiBXaGljaCBraW5kIGRlcGVuZHMgb24gaG93IHRoZSBsb2FkIGZpbGxzIHRoZSBoaWdoXFxuK1xcdFxcdFxcdFxcdCAqIGhhbGYsIGhlbmNlIGlzX2xkc3guXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRib29sIHN1YnJlZ19saW5rID0gbmFycm93aW5nIFxcdTAwMjZcXHUwMDI2IHNpemUgPT0gNDtcXG4rXFxuK1xcdFxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWJwZl9jYXBhYmxlIFxcdTAwMjZcXHUwMDI2IHNpemUgPT0gNCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgKHN1YnJlZ19saW5rIHx8IChzcGlsbF9zaXplID09IDQgXFx1MDAyNlxcdTAwMjYgIW5hcnJvd2luZykpKVxcbiBcXHRcXHRcXHRcXHRcXHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxcbiBcXHRcXHRcXHRcXHRcXHQgKiB3aXRoIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvbiBmaWxsLlxcbiBcXHRcXHRcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcXG4gXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXSA9ICpyZWc7XFxuIFxcbi1cXHRcXHRcXHRcXHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgZmlsbC5cXG4tXFx0XFx0XFx0XFx0ICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLlxcbi1cXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0aWYgKGdldF9yZWdfd2lkdGgocmVnKSBcXHUwMDNlIHNpemUgKiBCSVRTX1BFUl9CWVRFKVxcbitcXHRcXHRcXHRcXHRpZiAoc3VicmVnX2xpbmsgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWcgPVxcbitcXHRcXHRcXHRcXHRcXHRcXHRpc19sZHN4ID8gU1VCUkVHX1NFWFQgOiBTVUJSRUdfWkVYVDtcXG4rXFx0XFx0XFx0XFx0ZWxzZSBpZiAobmFycm93aW5nKVxcbitcXHRcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHRcXHQgKiBOb3RoaW5nIHRvIHJlbGF0ZTogZWl0aGVyIHRoZSBzbG90IGhhc1xcbitcXHRcXHRcXHRcXHRcXHQgKiBubyBpZCB0byBzaGFyZSwgb3IgdGhlIGZpbGwgaXMgbmFycm93ZXJcXG4rXFx0XFx0XFx0XFx0XFx0ICogdGhhbiB0aGUgMzIgYml0cyBhIGxpbmsgY2FuIGRlc2NyaWJlLlxcbitcXHRcXHRcXHRcXHRcXHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgYWRqdXN0cyB0aGUgYm91bmRzLlxcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0aW50IHNwaWxsX2NudCA9IDAsIHplcm9fY250ID0gMDtcXG5AQCAtNDEzOCw3ICs0MjA5LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdcXG4gICovXFxuIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBwdHJfYXJnbm8sIGludCBvZmYsIGludCBzaXplLFxcbi1cXHRcXHRcXHQgICAgaW50IGRzdF9yZWdubylcXG4rXFx0XFx0XFx0ICAgIGludCBkc3RfcmVnbm8sIGJvb2wgaXNfbGRzeClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC00MTc3LDcgKzQyNDgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKCF2YXJfb2ZmKSB7XFxuIFxcdFxcdG9mZiArPSByZWctXFx1MDAzZXZhcl9vZmYudmFsdWU7XFxuIFxcdFxcdGVyciA9IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IGRzdF9yZWdubyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBkc3RfcmVnbm8sIGlzX2xkc3gpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBWYXJpYWJsZSBvZmZzZXQgc3RhY2sgcmVhZHMgbmVlZCBtb3JlIGNvbnNlcnZhdGl2ZSBoYW5kbGluZ1xcbiBcXHRcXHQgKiB0aGFuIGZpeGVkIG9mZnNldCBvbmVzLiBOb3RlIHRoYXQgZHN0X3JlZ25vIFxcdTAwM2U9IDAgb24gdGhpc1xcbkBAIC01NzAyLDMzICs1NzczLDE5IEBAIHN0YXRpYyB2b2lkIHpleHRfMzJfdG9fNjQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gXFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIHJlZ191MzJfbWluKHJlZyksIHJlZ191MzJfbWF4KHJlZykpO1xcbiB9XFxuIFxcbi0vKiB0cnVuY2F0ZSByZWdpc3RlciB0byBzbWFsbGVyIHNpemUgKGluIGJ5dGVzKVxcbi0gKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNpemUgXFx1MDAzYyBCUEZfUkVHX1NJWkVcXG4rLypcXG4rICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0LiBTaWduZWQgYm91bmRzIGNhcnJ5IG92ZXIgZGlyZWN0bHkgYmVjYXVzZVxcbisgKiBzaWduIGV4dGVuc2lvbiBpcyBtb25vdG9uaWMgb3ZlciB0aGUgc2lnbmVkIDMyLWJpdCByYW5nZS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcXG4rc3RhdGljIHZvaWQgc2V4dF8zMl90b182NChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiB7XFxuLVxcdHU2NCBtYXNrO1xcbi1cXG4tXFx0LyogY2xlYXIgaGlnaCBiaXRzIGluIGJpdCByZXByZXNlbnRhdGlvbiAqL1xcbi1cXHRyZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX2Nhc3QocmVnLVxcdTAwM2V2YXJfb2ZmLCBzaXplKTtcXG4tXFxuLVxcdC8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqL1xcbi1cXHRtYXNrID0gKCh1NjQpMSBcXHUwMDNjXFx1MDAzYyAoc2l6ZSAqIDgpKSAtIDE7XFxuLVxcdGlmICgocmVnX3VtaW4ocmVnKSBcXHUwMDI2IH5tYXNrKSA9PSAocmVnX3VtYXgocmVnKSBcXHUwMDI2IH5tYXNrKSlcXG4tXFx0XFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIHJlZ191bWluKHJlZykgXFx1MDAyNiBtYXNrLCByZWdfdW1heChyZWcpIFxcdTAwMjYgbWFzayk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spO1xcbi1cXG4tXFx0LyogSWYgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMzJiaXQgcmVnaXN0ZXIgdGhlIDMyYml0IHJlZ2lzdGVyXFxuLVxcdCAqIHZhbHVlcyBhcmUgYWxzbyB0cnVuY2F0ZWQgc28gd2UgcHVzaCA2NC1iaXQgYm91bmRzIGludG9cXG4tXFx0ICogMzItYml0IGJvdW5kcy4gQWJvdmUgd2VyZSB0cnVuY2F0ZWQgXFx1MDAzYyAzMi1iaXRzIGFscmVhZHkuXFxuLVxcdCAqL1xcbi1cXHRpZiAoc2l6ZSBcXHUwMDNjIDQpXFxuLVxcdFxcdF9fbWFya19yZWczMl91bmJvdW5kZWQocmVnKTtcXG4tXFxuLVxcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xcbitcXHRyZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX3NleHQocmVnLVxcdTAwM2V2YXJfb2ZmLCA0KTtcXG4rXFx0cmVnX3NldF9zcmFuZ2U2NChyZWcsIHJlZ19zMzJfbWluKHJlZyksIHJlZ19zMzJfbWF4KHJlZykpO1xcbiB9XFxuIFxcbisvKiB0cnVuY2F0ZSByZWdpc3RlciB0byBzbWFsbGVyIHNpemUgKGluIGJ5dGVzKVxcbisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNpemUgXFx1MDAzYyBCUEZfUkVHX1NJWkVcXG4rICovXFxuIHN0YXRpYyB2b2lkIHNldF9zZXh0NjRfZGVmYXVsdF92YWwoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpXFxuIHtcXG4gXFx0aWYgKHNpemUgPT0gMSkge1xcbkBAIC01NzQ4LDYgKzU4MDUsNyBAQCBzdGF0aWMgdm9pZCBzZXRfc2V4dDY0X2RlZmF1bHRfdmFsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxcbiBzdGF0aWMgdm9pZCBjb2VyY2VfcmVnX3RvX3NpemVfc3goc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IHNpemUpXFxuIHtcXG4gXFx0czY0IGluaXRfczY0X21heCwgaW5pdF9zNjRfbWluLCBzNjRfbWF4LCBzNjRfbWluLCB1NjRfY3ZhbDtcXG4rXFx0czY0IGZpZWxkX3NtaW4sIGZpZWxkX3NtYXg7XFxuIFxcdHU2NCB0b3Bfc21heF92YWx1ZSwgdG9wX3NtaW5fdmFsdWU7XFxuIFxcdHU2NCBudW1fYml0cyA9IHNpemUgKiA4O1xcbiBcXG5AQCAtNTc2Nyw2ICs1ODI1LDI3IEBAIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoc2l6ZSA9PSAxKSB7XFxuK1xcdFxcdGZpZWxkX3NtaW4gPSBTOF9NSU47XFxuK1xcdFxcdGZpZWxkX3NtYXggPSBTOF9NQVg7XFxuK1xcdH0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7XFxuK1xcdFxcdGZpZWxkX3NtaW4gPSBTMTZfTUlOO1xcbitcXHRcXHRmaWVsZF9zbWF4ID0gUzE2X01BWDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Lyogc2l6ZSA9PSA0ICovXFxuK1xcdFxcdGZpZWxkX3NtaW4gPSBTMzJfTUlOO1xcbitcXHRcXHRmaWVsZF9zbWF4ID0gUzMyX01BWDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIHJhbmdlIGFscmVhZHkgZml0cyB0aGUgZmllbGQsIHNvIChzTil2ID09IHYgZm9yIGV2ZXJ5IHZhbHVlIHRoZVxcbitcXHQgKiByZWdpc3RlciBjYW4gaG9sZCBhbmQgdGhlIHNpZ24gZXh0ZW5zaW9uIGNoYW5nZXMgbm90aGluZy4gVGhlIHRlc3RzXFxuK1xcdCAqIGJlbG93IGNhbm5vdCByZWFjaCB0aGlzIGNhc2Ugb25jZSBzbWluIGlzIG5lZ2F0aXZlOiBhIG5lZ2F0aXZlIHNtaW5cXG4rXFx0ICogYW5kIGEgbm9uLW5lZ2F0aXZlIHNtYXggbmV2ZXIgc2hhcmUgdGhlaXIgaGlnaCBiaXRzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlZ19zbWluKHJlZykgXFx1MDAzZT0gZmllbGRfc21pbiBcXHUwMDI2XFx1MDAyNiByZWdfc21heChyZWcpIFxcdTAwM2M9IGZpZWxkX3NtYXgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHRvcF9zbWF4X3ZhbHVlID0gKCh1NjQpcmVnX3NtYXgocmVnKSBcXHUwMDNlXFx1MDAzZSBudW1fYml0cykgXFx1MDAzY1xcdTAwM2MgbnVtX2JpdHM7XFxuIFxcdHRvcF9zbWluX3ZhbHVlID0gKCh1NjQpcmVnX3NtaW4ocmVnKSBcXHUwMDNlXFx1MDAzZSBudW1fYml0cykgXFx1MDAzY1xcdTAwM2MgbnVtX2JpdHM7XFxuIFxcbkBAIC02NjAxLDcgKzY2ODAsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxcbiBcXG4gXFx0XFx0aWYgKHQgPT0gQlBGX1JFQUQpXFxuIFxcdFxcdFxcdGVyciA9IGNoZWNrX3N0YWNrX3JlYWQoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB2YWx1ZV9yZWdubyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB2YWx1ZV9yZWdubywgaXNfbGRzeCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGUoZW52LCByZWcsIG9mZiwgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0dmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG5AQCAtNjY5OCwxMyArNjc3NywxNSBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxcbiBcXHRcXHRcXHQgKiBTaWduLWV4dGVuc2lvbiBjYW4gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZSByZWxhdGl2ZVxcbiBcXHRcXHRcXHQgKiB0byBhIHNjYWxhciBpdCBpcyBsaW5rZWQgd2l0aCBieSBpZCAoZS5nLiBhIHplcm8tXFxuIFxcdFxcdFxcdCAqIGV4dGVuZGluZyBmaWxsIG9mIHRoZSBzYW1lIHNwaWxsZWQgc3RhY2sgc2xvdCksIHRodXNcXG4tXFx0XFx0XFx0ICogZHJvcCB0aGUgc2hhcmVkIGlkIGluIHRoYXQgY2FzZS5cXG4rXFx0XFx0XFx0ICogZHJvcCB0aGUgc2hhcmVkIGlkIGluIHRoYXQgY2FzZS4gQSAtXFx1MDAzZXN1YnJlZyBsaW5rIGlzXFxuK1xcdFxcdFxcdCAqIHRoZSBleGNlcHRpb246IGl0IGFscmVhZHkgcmVjb3JkcyB0aGF0IG9ubHkgdGhlIGxvd1xcbitcXHRcXHRcXHQgKiAzMiBiaXRzIGFyZSBzaGFyZWQsIGFuZCBob3cgdGhlIGhpZ2ggaGFsZiBmb2xsb3dzLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Ym9vbCBub19zZXh0ID0gcmVnX3VtYXgoXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dKSBcXHUwMDNjXFxuIFxcdFxcdFxcdFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIChzaXplICogQklUU19QRVJfQllURSAtIDEpKTtcXG4gXFxuIFxcdFxcdFxcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChcXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpO1xcbi1cXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuK1xcdFxcdFxcdGlmICghbm9fc2V4dCBcXHUwMDI2XFx1MDAyNiAhcmVnc1t2YWx1ZV9yZWdub10uc3VicmVnKVxcbiBcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTE2MTE3LDcgKzE2MTk4LDcgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRvZmYgPSAtb2ZmO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoZHN0X3JlZy1cXHUwMDNlaWQgXFx1MDAyNiBCUEZfQUREX0NPTlNUKSB7XFxuK1xcdFxcdGlmIChkc3RfcmVnLVxcdTAwM2VhZGRfY29uc3QpIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogSWYgdGhlIHJlZ2lzdGVyIGFscmVhZHkgd2VudCB0aHJvdWdoIHJYICs9IHZhbFxcbiBcXHRcXHRcXHQgKiB3ZSBjYW5ub3QgYWNjdW11bGF0ZSBhbm90aGVyIHZhbCBpbnRvIHJ4LVxcdTAwM2VvZmYuXFxuQEAgLTE2MTI2LDkgKzE2MjA3LDkgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGlmIChhbHUzMilcXG4tXFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlaWQgfD0gQlBGX0FERF9DT05TVDMyO1xcbitcXHRcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfMzI7XFxuIFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlaWQgfD0gQlBGX0FERF9DT05TVDY0O1xcbitcXHRcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfNjQ7XFxuIFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZWRlbHRhID0gb2ZmO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTE2MjIwLDEyICsxNjMwMSwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHRcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHNyY19yZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGJvb2wgbm9fc2V4dDtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICogQSAzMi1iaXQgc2lnbiBleHRlbnNpb24ga2VlcHMgdGhlIGxvdyAzMlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKiBiaXRzLCBzbyByZWNvcmQgYSBsb3ctMzIgbGluayBhcyB0aGVcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICogemVyby1leHRlbmRpbmcgbW92IGRvZXMuIEEgc2VsZi1tb3ZcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICogcXVhbGlmaWVzIG9ubHkgaWYgc3JjIGlzIGFscmVhZHkgbGlua2VkLlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBzdWJyZWdfbGluayA9IChpbnNuLVxcdTAwM2VvZmYgXFx1MDAzZVxcdTAwM2UgMykgPT0gNCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAoc3JjX3JlZyAhPSBkc3RfcmVnIHx8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzcmNfcmVnLVxcdTAwM2VpZCk7XFxuIFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRub19zZXh0ID0gcmVnX3VtYXgoc3JjX3JlZykgXFx1MDAzYyAoMVVMTCBcXHUwMDNjXFx1MDAzYyAoaW5zbi1cXHUwMDNlb2ZmIC0gMSkpO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRpZiAobm9fc2V4dClcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aWYgKG5vX3NleHQgfHwgc3VicmVnX2xpbmspXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHNyY19yZWcpO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGlmICghbm9fc2V4dCBcXHUwMDI2XFx1MDAyNiBzdWJyZWdfbGluayBcXHUwMDI2XFx1MDAyNiBzcmNfcmVnLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnID0gU1VCUkVHX1NFWFQ7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGVsc2UgaWYgKCFub19zZXh0KVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYgXFx1MDAzZVxcdTAwM2UgMyk7XFxuIFxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE2MjQyLDE1ICsxNjMzNCwyMiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoc3JjX3JlZy1cXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUpIHtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZW9mZiA9PSAwKSB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGJvb2wgaXNfc3JjX3JlZ191MzIgPSBnZXRfcmVnX3dpZHRoKHNyY19yZWcpIFxcdTAwM2M9IDMyO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKiBBIHdpZGUgc3JjIHNoYXJlcyBvbmx5IGl0cyBsb3cgMzIgYml0cy4gQVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKiBmdWxsIGxpbmsgd291bGQgbGV0IGRzdCdzIFswLCBVMzJfTUFYXVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKiBwcm9wYWdhdGUgb250byBzcmMncyB1bmtub3duIGhpZ2ggYml0cywgc29cXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICogcmVjb3JkIGEgbG93LTMyLW9ubHkgbGluayBpbnN0ZWFkLiBBXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAqIHNlbGYtbW92IGhhcyBub3RoaW5nIHRvIGxpbmsuXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRcXHRcXHRib29sIHN1YnJlZ19saW5rID0gIWlzX3NyY19yZWdfdTMyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNyY19yZWcgIT0gZHN0X3JlZztcXG4gXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGlmIChpc19zcmNfcmVnX3UzMilcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aWYgKGlzX3NyY19yZWdfdTMyIHx8IHN1YnJlZ19saW5rKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4tXFx0XFx0XFx0XFx0XFx0XFx0LyogTWFrZSBzdXJlIElEIGlzIGNsZWFyZWQgaWYgc3JjX3JlZyBpcyBub3QgaW4gdTMyXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAqIHJhbmdlIG90aGVyd2lzZSBkc3RfcmVnIG1pbi9tYXggY291bGQgYmUgaW5jb3JyZWN0bHlcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICogcHJvcGFnYXRlZCBpbnRvIHNyY19yZWcgYnkgc3luY19saW5rZWRfcmVncygpXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3NyY19yZWdfdTMyKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRpZiAoc3VicmVnX2xpbmsgXFx1MDAyNlxcdTAwMjYgc3JjX3JlZy1cXHUwMDNlaWQpXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZyA9IFNVQlJFR19aRVhUO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRlbHNlIGlmICghaXNfc3JjX3JlZ191MzIpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xcbkBAIC0xNzA2Nyw3ICsxNzE2Niw3IEBAIHN0YXRpYyB2b2lkIF9fY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnJlZ19zZXQsIHN0cnVjdCBicGZfcmVnX3N0XFxuIHtcXG4gXFx0c3RydWN0IGxpbmtlZF9yZWcgKmU7XFxuIFxcbi1cXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCAocmVnLVxcdTAwM2VpZCBcXHUwMDI2IH5CUEZfQUREX0NPTlNUKSAhPSBpZClcXG4rXFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnLVxcdTAwM2VpZCAhPSBpZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZSA9IGxpbmtlZF9yZWdzX3B1c2gocmVnX3NldCk7XFxuQEAgLTE3MDk1LDcgKzE3MTk0LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHR1MTYgbGl2ZV9yZWdzO1xcbiBcXHRpbnQgaSwgajtcXG4gXFxuLVxcdGlkID0gaWQgXFx1MDAyNiB+QlBGX0FERF9DT05TVDtcXG4gXFx0Zm9yIChpID0gdnN0YXRlLVxcdTAwM2VjdXJmcmFtZTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4gXFx0XFx0bGl2ZV9yZWdzID0gYXV4W2JwZl9mcmFtZV9pbnNuX2lkeCh2c3RhdGUsIGkpXS5saXZlX3JlZ3NfYmVmb3JlO1xcbiBcXHRcXHRmdW5jID0gdnN0YXRlLVxcdTAwM2VmcmFtZVtpXTtcXG5AQCAtMTcxMTQsNiArMTcyMTIsNDAgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFNldCBAcmVnIHRvIHRoZSB6ZXJvLWV4dGVuc2lvbiBvZiBAa25vd25fcmVnJ3MgbG93IDMyIGJpdHM6IGl0IHNoYXJlcyB0aG9zZVxcbisgKiBiaXRzIGFuZCBpdHMgaGlnaCBoYWxmIGlzIHplcm8uIENvcHkgdGhlIGJhc2UgdG8ga2VlcCBpdHMgcHJlY2lzZSBsb3ctMzJcXG4rICogdG51bSwgdGhlbiByZS1hcHBseSB0aGUgemV4dF8zMl90b182NCgpIHRoZSAzMi1iaXQgbW92IGl0c2VsZiB1c2VkLlxcbisgKiBAcmVnLVxcdTAwM2VpZCBhbmQgLVxcdTAwM2VkZWx0YSBhbHJlYWR5IGVxdWFsIEBrbm93bl9yZWcnczsgb25seSAtXFx1MDAzZXN1YnJlZyBpcyBpdHMgb3duLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmVjb25zdHJ1Y3RfemV4dDMyKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqa25vd25fcmVnKVxcbit7XFxuK1xcdGVudW0gYnBmX3N1YnJlZyBzdWJyZWcgPSByZWctXFx1MDAzZXN1YnJlZztcXG4rXFxuK1xcdCpyZWcgPSAqa25vd25fcmVnO1xcbitcXHRyZWctXFx1MDAzZXN1YnJlZyA9IHN1YnJlZztcXG4rXFx0emV4dF8zMl90b182NChyZWcpO1xcbitcXHRyZWdfYm91bmRzX3N5bmMocmVnKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0LiBOb3RlIHRoaXMgZHJpdmVzIG9mZiB0aGUgYmFzZSdzIDMyLWJpdFxcbisgKiByYW5nZSwgbm90IGNvZXJjZV9yZWdfdG9fc2l6ZV9zeCgpOiBhZnRlciBhIDMyLWJpdCBjb21wYXJlIGl0IGlzIHRoZSBsb3dcXG4rICogaGFsZiB0aGF0IGhhcyBiZWVuIG5hcnJvd2VkLCBhbmQgdGhlIDY0LWJpdCBib3VuZHMgc3RpbGwgZGVzY3JpYmUgdGhlXFxuKyAqIGJhc2UncyBoaWdoIGJpdHMsIHdoaWNoIGFyZSBub3Qgb3Vycy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJlY29uc3RydWN0X3NleHQzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZylcXG4re1xcbitcXHRlbnVtIGJwZl9zdWJyZWcgc3VicmVnID0gcmVnLVxcdTAwM2VzdWJyZWc7XFxuK1xcbitcXHQqcmVnID0gKmtub3duX3JlZztcXG4rXFx0cmVnLVxcdTAwM2VzdWJyZWcgPSBzdWJyZWc7XFxuK1xcdHNleHRfMzJfdG9fNjQocmVnKTtcXG4rXFx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XFxuK31cXG4rXFxuIC8qIEZvciBhbGwgUiBpbiBsaW5rZWRfcmVncywgY29weSBrbm93bl9yZWcgcmFuZ2UgaW50byBSXFxuICAqIGlmIFItXFx1MDAzZWlkID09IGtub3duX3JlZy1cXHUwMDNlaWQuXFxuICAqL1xcbkBAIC0xNzEzMSwxOCArMTcyNjMsNDQgQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3NcXG4gXFx0XFx0XFx0XFx0OiBcXHUwMDI2dnN0YXRlLVxcdTAwM2VmcmFtZVtlLVxcdTAwM2VmcmFtZW5vXS1cXHUwMDNlc3RhY2tbZS1cXHUwMDNlc3BpXS5zcGlsbGVkX3B0cjtcXG4gXFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnID09IGtub3duX3JlZylcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmICgocmVnLVxcdTAwM2VpZCBcXHUwMDI2IH5CUEZfQUREX0NPTlNUKSAhPSAoa25vd25fcmVnLVxcdTAwM2VpZCBcXHUwMDI2IH5CUEZfQUREX0NPTlNUKSlcXG4rXFx0XFx0aWYgKHJlZy1cXHUwMDNlaWQgIT0ga25vd25fcmVnLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgLVxcdTAwM2VzdWJyZWcgcmVnaXN0ZXIgc2hhcmVzIG9ubHkgdGhlIGJhc2UncyBsb3cgMzIgYml0cywgc28gaXRcXG4rXFx0XFx0ICogaXMgcmVidWlsdCByYXRoZXIgdGhhbiBjb3BpZWQuIE5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGFcXG4rXFx0XFx0ICogZGVsdGEsIHNvIHNraXAgaWYgZWl0aGVyIHNpZGUgaGFzIG9uZSAoc291bmQsIGxlc3MgcHJlY2lzZSkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmVnLVxcdTAwM2VzdWJyZWcpIHtcXG4rXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNlYWRkX2NvbnN0IHx8IGtub3duX3JlZy1cXHUwMDNlYWRkX2NvbnN0KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNlc3VicmVnID09IFNVQlJFR19aRVhUKVxcbitcXHRcXHRcXHRcXHRyZWNvbnN0cnVjdF96ZXh0MzIocmVnLCBrbm93bl9yZWcpO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHJlY29uc3RydWN0X3NleHQzMihyZWcsIGtub3duX3JlZyk7XFxuK1xcdFxcdFxcdGlmIChlLVxcdTAwM2Vpc19yZWcpXFxuK1xcdFxcdFxcdFxcdG1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIGUtXFx1MDAzZXJlZ25vKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgZS1cXHUwMDNlc3BpKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIHJldmVyc2U6IGtub3duX3JlZyBrbm93cyBvbmx5IGl0cyBsb3cgMzIgYml0cywgd2hpY2ggc2F5XFxuK1xcdFxcdCAqIG5vdGhpbmcgYWJvdXQgcmVnJ3MgaGlnaCBoYWxmLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGtub3duX3JlZy1cXHUwMDNlc3VicmVnKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU2tpcCBtaXhlZCAzMi82NC1iaXQgbGlua3M6IHRoZSBkZWx0YSByZWxhdGlvbnNoaXAgZG9lc24ndFxcbiBcXHRcXHQgKiBob2xkIGFjcm9zcyBkaWZmZXJlbnQgQUxVIHdpZHRocy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICgoKHJlZy1cXHUwMDNlaWQgXiBrbm93bl9yZWctXFx1MDAzZWlkKSBcXHUwMDI2IEJQRl9BRERfQ09OU1QpID09IEJQRl9BRERfQ09OU1QpXFxuK1xcdFxcdGlmIChyZWctXFx1MDAzZWFkZF9jb25zdCBcXHUwMDI2XFx1MDAyNiBrbm93bl9yZWctXFx1MDAzZWFkZF9jb25zdCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmVnLVxcdTAwM2VhZGRfY29uc3QgIT0ga25vd25fcmVnLVxcdTAwM2VhZGRfY29uc3QpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoKCEocmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpIFxcdTAwMjZcXHUwMDI2ICEoa25vd25fcmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxcbitcXHRcXHRpZiAoKCFyZWctXFx1MDAzZWFkZF9jb25zdCBcXHUwMDI2XFx1MDAyNiAha25vd25fcmVnLVxcdTAwM2VhZGRfY29uc3QpIHx8XFxuIFxcdFxcdCAgICByZWctXFx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cXHUwMDNlZGVsdGEpIHtcXG4gXFx0XFx0XFx0KnJlZyA9ICprbm93bl9yZWc7XFxuIFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVudW0gYnBmX2FkZF9jb25zdCBzYXZlZF9hZGRfY29uc3QgPSByZWctXFx1MDAzZWFkZF9jb25zdDtcXG4gXFx0XFx0XFx0czMyIHNhdmVkX29mZiA9IHJlZy1cXHUwMDNlZGVsdGE7XFxuIFxcdFxcdFxcdHUzMiBzYXZlZF9pZCA9IHJlZy1cXHUwMDNlaWQ7XFxuIFxcbkBAIC0xNzE1MiwxNiArMTczMTAsMTggQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3NcXG4gXFx0XFx0XFx0LyogcmVnID0ga25vd25fcmVnOyByZWcgKz0gZGVsdGEgKi9cXG4gXFx0XFx0XFx0KnJlZyA9ICprbm93bl9yZWc7XFxuIFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIE11c3QgcHJlc2VydmUgb2ZmIGFuZCBpZCwgb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpXFxuLVxcdFxcdFxcdCAqIHdpbGwgYmUgaW5jb3JyZWN0LlxcbitcXHRcXHRcXHQgKiBNdXN0IHByZXNlcnZlIG9mZiwgaWQgYW5kIGFkZF9jb25zdCwgb3RoZXJ3aXNlIGFub3RoZXJcXG4rXFx0XFx0XFx0ICogc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0cmVnLVxcdTAwM2VkZWx0YSA9IHNhdmVkX29mZjtcXG4gXFx0XFx0XFx0cmVnLVxcdTAwM2VpZCA9IHNhdmVkX2lkO1xcbitcXHRcXHRcXHRyZWctXFx1MDAzZWFkZF9jb25zdCA9IHNhdmVkX2FkZF9jb25zdDtcXG4gXFxuIFxcdFxcdFxcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXFx1MDAyNmZha2VfcmVnKTtcXG4gXFx0XFx0XFx0c2NhbGFyX21pbl9tYXhfYWRkKHJlZywgXFx1MDAyNmZha2VfcmVnKTtcXG4gXFx0XFx0XFx0cmVnLVxcdTAwM2V2YXJfb2ZmID0gdG51bV9hZGQocmVnLVxcdTAwM2V2YXJfb2ZmLCBmYWtlX3JlZy52YXJfb2ZmKTtcXG4tXFx0XFx0XFx0aWYgKChyZWctXFx1MDAzZWlkIHwga25vd25fcmVnLVxcdTAwM2VpZCkgXFx1MDAyNiBCUEZfQUREX0NPTlNUMzIpXFxuK1xcdFxcdFxcdGlmIChyZWctXFx1MDAzZWFkZF9jb25zdCA9PSBBRERfQ09OU1RfMzIgfHxcXG4rXFx0XFx0XFx0ICAgIGtub3duX3JlZy1cXHUwMDNlYWRkX2NvbnN0ID09IEFERF9DT05TVF8zMilcXG4gXFx0XFx0XFx0XFx0emV4dF8zMl90b182NChyZWcpO1xcbiBcXHRcXHRcXHRyZWdfYm91bmRzX3N5bmMocmVnKTtcXG4gXFx0XFx0fVxcbkBAIC0xODI1NSw3ICsxODQxNSw3IEBAIHZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKCFyZWctXFx1MDAzZWlkKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWRzZXRfY250X2luYyhpZHNldCwgcmVnLVxcdTAwM2VpZCBcXHUwMDI2IH5CUEZfQUREX0NPTlNUKTtcXG4rXFx0XFx0aWRzZXRfY250X2luYyhpZHNldCwgcmVnLVxcdTAwM2VpZCk7XFxuIFxcdH0pKTtcXG4gXFxuIFxcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHN0LCBmdW5jLCByZWcsICh7XFxuQEAgLTE4MjYzLDcgKzE4NDIzLDcgQEAgdm9pZCBicGZfY2xlYXJfc2luZ3VsYXJfaWRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXJlZy1cXHUwMDNlaWQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoaWRzZXRfY250X2dldChpZHNldCwgcmVnLVxcdTAwM2VpZCBcXHUwMDI2IH5CUEZfQUREX0NPTlNUKSA9PSAxKVxcbitcXHRcXHRpZiAoaWRzZXRfY250X2dldChpZHNldCwgcmVnLVxcdTAwM2VpZCkgPT0gMSlcXG4gXFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XFxuIFxcdH0pKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuaW5kZXggZWI4OGQ5Y2U2YzM0OC4uNDViZmEwMmE1MzM4MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuQEAgLTI2OSw2ICsyNjksMTQgQEBcXG4gI2RlZmluZSBDQU5fVVNFX0JQRl9TVFxcbiAjZW5kaWZcXG4gXFxuKyNpZiAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fFxcdFxcXFxcXG4rICAgICAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcXHUwMDI2XFx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8XFx0XFx0XFxcXFxcbisgICAgIGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm0pIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fFxcdFxcXFxcXG4rICAgICBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfbG9vbmdhcmNoKSkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdChfX2NsYW5nX21ham9yX18gXFx1MDAzZT0gMTggfHwgZGVmaW5lZChfX0JQRl9GRUFUVVJFX01PVlNYKSlcXG4rI2RlZmluZSBDQU5fVVNFX01PVlNYXFxuKyNlbmRpZlxcbitcXG4gI2lmIF9fY2xhbmdfbWFqb3JfXyBcXHUwMDNlPSAxOCBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcXFxcXG4gXFx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXFxuaW5kZXggZGY4ZDUzMDk2NTdlMS4uYjRlYWRiZDg4MzU3ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcXG5AQCAtMTUxNiw3ICsxNTE2LDcgQEAgX19uYWtlZCB2b2lkIHN1YjMyX2Z1bGxfb3ZlcmZsb3codm9pZClcXG4gU0VDKFxcXCJzb2NrZXRcXFwiKVxcbiBfX2Rlc2NyaXB0aW9uKFxcXCIzMi1iaXQgc3VidHJhY3Rpb24sIHBhcnRpYWwgb3ZlcmZsb3csIHJlc3VsdCBpbiB1bmJvdW5kZWQgdTMyIGJvdW5kc1xcXCIpXFxuIF9fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbi1fX21zZyhcXFwiMzogKDFjKSB3MyAtPSB3MiB7ey4qfX0gUjM9c2NhbGFyKHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKVxcXCIpXFxuK19fbXNnKFxcXCIzOiAoMWMpIHczIC09IHcyIHt7Lip9fSBSMz1zY2FsYXIoaWQ9e3tbMC05XSt9fS0xLmxvMzIsc21pbj0wLHNtYXg9dW1heD0weGZmZmZmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmZmZmZikpXFxcIilcXG4gX19yZXR2YWwoMClcXG4gX19uYWtlZCB2b2lkIHN1YjMyX3BhcnRpYWxfb3ZlcmZsb3codm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jXFxuaW5kZXggZDU3MWZiZmM4NmEzYS4uY2E3NDcxZjAyOTNkZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jXFxuQEAgLTM0OSw4ICszNDksOCBAQCBsMF8lPTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFRlc3QgdGhhdCBzeW5jX2xpbmtlZF9yZWdzKCkgY2hlY2tzIHJlZy1cXHUwMDNlaWQgKHRoZSBsaW5rZWQgdGFyZ2V0IHJlZ2lzdGVyKVxcbi0gKiBmb3IgQlBGX0FERF9DT05TVDMyIHJhdGhlciB0aGFuIGtub3duX3JlZy1cXHUwMDNlaWQgKHRoZSBicmFuY2ggcmVnaXN0ZXIpLlxcbisgKiBUZXN0IHRoYXQgc3luY19saW5rZWRfcmVncygpIGNoZWNrcyB0aGUgbGlua2VkIHRhcmdldCByZWdpc3RlciAocmVnKSBmb3JcXG4rICogQUREX0NPTlNUXzMyIHJhdGhlciB0aGFuIHRoZSBicmFuY2ggcmVnaXN0ZXIgKGtub3duX3JlZykuXFxuICAqL1xcbiBTRUMoXFxcInNvY2tldFxcXCIpXFxuIF9fc3VjY2Vzc1xcbkBAIC0zNjAsNyArMzYwLDcgQEAgX19uYWtlZCB2b2lkIHNjYWxhcnNfYWx1MzJfemV4dF9saW5rZWRfcmVnKHZvaWQpXFxuIFxcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHc2ID0gdzA7XFx0XFx0LyogcjYgaW4gWzAsIDB4RkZGRkZGRkZdICovXFx0XFxcXFxcbiBcXHRyNyA9IHI2O1xcdFxcdC8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqL1xcdFxcXFxcXG4tXFx0dzcgKz0gMTtcXHRcXHQvKiBhbHUzMjogcjcuaWQgfD0gQlBGX0FERF9DT05TVDMyICovIFxcXFxcXG4rXFx0dzcgKz0gMTtcXHRcXHQvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi8gXFxcXFxcbiBcXHRyOCA9IDB4RkZGRmZmZmYgbGw7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpZiByNiBcXHUwMDNjIHI4IGdvdG8gbDBfJT07XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQvKiByNiBpbiBbMHhGRkZGRkZGRiwgMHhGRkZGRkZGRl0gKi9cXHRcXHRcXHRcXFxcXFxuQEAgLTM4MSw3ICszODEsNyBAQCBsMF8lPTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcbiAvKlxcbiAgKiBUZXN0IHRoYXQgc3luY19saW5rZWRfcmVncygpIHNraXBzIHByb3BhZ2F0aW9uIHdoZW4gb25lIHJlZ2lzdGVyIHVzZWRcXG4tICogYWx1MzIgKEJQRl9BRERfQ09OU1QzMikgYW5kIHRoZSBvdGhlciB1c2VkIGFsdTY0IChCUEZfQUREX0NPTlNUNjQpLlxcbisgKiBhbHUzMiAoQUREX0NPTlNUXzMyKSBhbmQgdGhlIG90aGVyIHVzZWQgYWx1NjQgKEFERF9DT05TVF82NCkuXFxuICAqIFRoZSBkZWx0YSByZWxhdGlvbnNoaXAgZG9lc24ndCBob2xkIGFjcm9zcyBkaWZmZXJlbnQgQUxVIHdpZHRocy5cXG4gICovXFxuIFNFQyhcXFwic29ja2V0XFxcIilcXG5AQCAtMzkyLDEzICszOTIsMTMgQEAgX19uYWtlZCB2b2lkIHNjYWxhcnNfYWx1MzJfYWx1NjRfY3Jvc3NfdHlwZSh2b2lkKVxcbiBcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHR3NiA9IHcwO1xcdFxcdC8qIHI2IGluIFswLCAweEZGRkZGRkZGXSAqL1xcdFxcXFxcXG4gXFx0cjcgPSByNjtcXHRcXHQvKiBsaW5rZWQ6IHNhbWUgaWQgYXMgcjYgKi9cXHRcXFxcXFxuLVxcdHc3ICs9IDE7XFx0XFx0LyogYWx1MzI6IEJQRl9BRERfQ09OU1QzMiwgZGVsdGEgPSAxICovIFxcXFxcXG4rXFx0dzcgKz0gMTtcXHRcXHQvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi8gXFxcXFxcbiBcXHRyOCA9IHI2O1xcdFxcdC8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqL1xcdFxcXFxcXG4tXFx0cjggKz0gMjtcXHRcXHQvKiBhbHU2NDogQlBGX0FERF9DT05TVDY0LCBkZWx0YSA9IDIgKi8gXFxcXFxcbitcXHRyOCArPSAyO1xcdFxcdC8qIEFERF9DT05TVF82NCBkZWx0YSAqLyBcXFxcXFxuIFxcdHI5ID0gMHhGRkZGZmZmZiBsbDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGlmIHI3IFxcdTAwM2MgcjkgZ290byBsMF8lPTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC8qIHI3ID0gMHhGRkZGRkZGRiAqL1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0Lyogc3luYzoga25vd25fcmVnPXI3IChBRERfQ09OU1QzMiksIHJlZz1yOCAoQUREX0NPTlNUNjQpICovIFxcXFxcXG4rXFx0Lyogc3luYzoga25vd25fcmVnPXI3IChBRERfQ09OU1RfMzIpLCByZWc9cjggKEFERF9DT05TVF82NCkgKi8gXFxcXFxcbiBcXHQvKiBXaXRob3V0IGZpeDogcjggPSB6ZXh0KDB4RkZGRkZGRkYgKyAxKSA9IDAgKi9cXHRcXFxcXFxuIFxcdC8qIFdpdGggZml4OiByOCBzdGF5cyBbMiwgMHgxMDAwMDAwMDFdIChyOCBcXHUwMDNlPSAyKSAqL1xcdFxcXFxcXG4gXFx0aWYgcjggXFx1MDAzZSAwIGdvdG8gbDFfJT07XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC00MTYsNyArNDE2LDcgQEAgbDBfJT06XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAvKlxcbiAgKiBUZXN0IHRoYXQgcmVnc2FmZSgpIHByZXZlbnRzIHBydW5pbmcgd2hlbiB0d28gcGF0aHMgcmVhY2ggdGhlIHNhbWUgcHJvZ3JhbVxcbiAgKiBwb2ludCB3aXRoIGxpbmtlZCByZWdpc3RlcnMgY2FycnlpbmcgZGlmZmVyZW50IEFERF9DT05TVCBmbGFncyAob25lXFxuLSAqIEJQRl9BRERfQ09OU1QzMiBmcm9tIGFsdTMyLCBhbm90aGVyIEJQRl9BRERfQ09OU1Q2NCBmcm9tIGFsdTY0KS5cXG4rICogQUREX0NPTlNUXzMyIGZyb20gYWx1MzIsIGFub3RoZXIgQUREX0NPTlNUXzY0IGZyb20gYWx1NjQpLlxcbiAgKi9cXG4gU0VDKFxcXCJzb2NrZXRcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcImRpdiBieSB6ZXJvXFxcIilcXG5AQCAtNDMxLDExICs0MzEsMTEgQEAgX19uYWtlZCB2b2lkIHNjYWxhcnNfYWx1MzJfYWx1NjRfcmVnc2FmZV9wcnVuaW5nKHZvaWQpXFxuIFxcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGlmIHIwIFxcdTAwM2UgMCBnb3RvIGxfcGF0aGJfJT07XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQvKiBQYXRoIEE6IGFsdTMyICovXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHR3NyArPSAxO1xcdFxcdC8qIEJQRl9BRERfQ09OU1QzMiwgZGVsdGEgPSAxICovXFxcXFxcbitcXHR3NyArPSAxO1xcdFxcdC8qIEFERF9DT05TVF8zMiBkZWx0YSAqL1xcXFxcXG4gXFx0Z290byBsX21lcmdlXyU9O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gbF9wYXRoYl8lPTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC8qIFBhdGggQjogYWx1NjQgKi9cXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdHI3ICs9IDE7XFx0XFx0LyogQlBGX0FERF9DT05TVDY0LCBkZWx0YSA9IDEgKi9cXFxcXFxuK1xcdHI3ICs9IDE7XFx0XFx0LyogQUREX0NPTlNUXzY0IGRlbHRhICovXFxcXFxcbiBsX21lcmdlXyU9OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LyogTWVyZ2UgcG9pbnQ6IHJlZ3NhZmUoKSBjb21wYXJlcyBwYXRoIEIgYWdhaW5zdCBjYWNoZWQgcGF0aCBBLiAqLyBcXFxcXFxuIFxcdC8qIE5hcnJvdyByNiB0byB0cmlnZ2VyIHN5bmNfbGlua2VkX3JlZ3MgZm9yIHI3ICovXFx0XFxcXFxcbkBAIC01OTMsNyArNTkzLDcgQEAgbF9leGl0XyU9OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfVxcbiBcXG4gLypcXG4tICogVGVzdCB0aGF0IHN0YWxlIGRlbHRhIGZyb20gYSBjbGVhcmVkIEJQRl9BRERfQ09OU1QgZG9lcyBub3QgbGVha1xcbisgKiBUZXN0IHRoYXQgc3RhbGUgZGVsdGEgZnJvbSBhIGNsZWFyZWQgQUREX0NPTlNUXyogZG9lcyBub3QgbGVha1xcbiAgKiB0aHJvdWdoIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdigpIGludG8gYSBuZXcgaWQsIGNhdXNpbmdcXG4gICogc3luY19saW5rZWRfcmVncygpIHRvIGNvbXB1dGUgYW4gaW5jb3JyZWN0IG9mZnNldC5cXG4gICovXFxuQEAgLTYwNSwxMCArNjA1LDEwIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX3N0YWxlX2RlbHRhX2Zyb21fY2xlYXJlZF9pZCh2b2lkKVxcbiBcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHI2ID0gcjA7XFx0XFx0LyogcjYgdW5rbm93biwgZ2V0cyBpZCBBICovXFx0XFxcXFxcbi1cXHRyNiArPSA1O1xcdFxcdC8qIGlkIEF8QUREX0NPTlNULCBkZWx0YSA1ICovXFx0XFxcXFxcbitcXHRyNiArPSA1O1xcdFxcdC8qIGlkIEEsIEFERF9DT05TVF82NCBkZWx0YSAqL1xcdFxcXFxcXG4gXFx0cjYgXj0gMDtcXHRcXHQvKiBpZCBjbGVhcmVkOyBkZWx0YSBzdGF5cyA1ICovXFx0XFxcXFxcbiBcXHRyOCA9IHI2O1xcdFxcdC8qIG5ldyBpZCBCLCBzdGFsZSBkZWx0YSA1ICovXFx0XFxcXFxcbi1cXHRyOCArPSAzO1xcdFxcdC8qIGlkIEJ8QUREX0NPTlNULCBkZWx0YSAzICovXFx0XFxcXFxcbitcXHRyOCArPSAzO1xcdFxcdC8qIGlkIEIsIEFERF9DT05TVF82NCBkZWx0YSAqL1xcdFxcXFxcXG4gXFx0cjkgPSByNjtcXHRcXHQvKiBpZCBCLCBzdGFsZSBkZWx0YSA1ICovXFx0XFxcXFxcbiBcXHRpZiByOSAhPSAxMCBnb3RvIGxfZXhpdF8lPTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC8qIEJ1ZzogcjggPSAxMCsoMy01KSA9IDg7IEZpeDogcjggPSAxMCsoMy0wKSA9IDEzICovXFx0XFxcXFxcbkBAIC02NDgsMTAgKzY0OCwxMCBAQCBsX2V4aXRfJT06XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBUZXN0IHRoYXQgcmVnc2FmZSgpIHZlcmlmaWVzIGJhc2VfaWQgY29uc2lzdGVuY3kgZm9yIEJQRl9BRERfQ09OU1RcXG4rICogVGVzdCB0aGF0IHJlZ3NhZmUoKSB2ZXJpZmllcyBiYXNlX2lkIGNvbnNpc3RlbmN5IGZvciBBRERfQ09OU1RfKlxcbiAgKiBsaW5rZWQgc2NhbGFycyBkdXJpbmcgc3RhdGUgcHJ1bmluZy5cXG4gICpcXG4tICogVGhlIGZhbHNlIGJyYW5jaCAoZXhwbG9yZWQgZmlyc3QpIGxpbmtzIFIzIHRvIFIyIHZpYSBBRERfQ09OU1QuXFxuKyAqIFRoZSBmYWxzZSBicmFuY2ggKGV4cGxvcmVkIGZpcnN0KSBsaW5rcyBSMyB0byBSMiB2aWEgQUREX0NPTlNUXzY0LlxcbiAgKiBUaGUgdHJ1ZSBicmFuY2ggKHJ1bnRpbWUgcGF0aCkgbGlua3MgUjMgdG8gUjQgKHVucmVsYXRlZCBiYXNlX2lkKS5cXG4gICogQXQgdGhlIG1lcmdlIHBvaW50LCBwcnVuaW5nIG11c3QgZmFpbCBiZWNhdXNlIHRoZSBsaW5rYWdlIHRvcG9sb2d5XFxuICAqIGRpZmZlcnMuXFxuQEAgLTY3NSw3ICs2NzUsNyBAQCBfX25ha2VkIHZvaWQgYWRkX2NvbnN0X2Jhc2VfaWRfcHJ1bmluZyh2b2lkKVxcbiBcXHRyMiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjIgXFx1MDAyNj0gMHhmZjtcXHRcXHQvKiBSMiA9IHNjYWxhcihpZD1BKSBbMCwyNTVdICovXFx0XFxcXFxcbiBcXHRyMyA9IHIyO1xcdFxcdC8qIFIzIGxpbmtlZCB0byBSMiAoaWQ9QSkgKi9cXHRcXFxcXFxuLVxcdHIzICs9IDEwO1xcdFxcdC8qIFIzIGlkPUF8QUREX0NPTlNULCBkZWx0YT0xMCAqL1xcXFxcXG4rXFx0cjMgKz0gMTA7XFx0XFx0LyogQUREX0NPTlNUXzY0IGRlbHRhICovXFxcXFxcbiBcXHRyNiA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRnb3RvIGxfbWVyZ2VfJT07XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTY4Nyw3ICs2ODcsNyBAQCBsX3RydWVfJT06XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyNCA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjQgXFx1MDAyNj0gMHhmZjtcXHRcXHQvKiBSNCA9IHNjYWxhciBbMCwyNTVdLCBpZD0wICovXFx0XFxcXFxcbiBcXHRyMyA9IHI0O1xcdFxcdC8qIFIzIGxpbmtlZCB0byBSNCAobmV3IGlkPUMpICovXFxcXFxcbi1cXHRyMyArPSAxMDtcXHRcXHQvKiBSMyBpZD1DfEFERF9DT05TVCwgZGVsdGE9MTAgKi9cXFxcXFxuK1xcdHIzICs9IDEwO1xcdFxcdC8qIEFERF9DT05TVF82NCBkZWx0YSAqL1xcXFxcXG4gXFx0cjYgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBsX21lcmdlXyU9OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNzEwLDQgKzcxMCw2MjMgQEAgbF9leGl0XyU9OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQSAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSBzaGFyZXMgb25seSB0aGUgbG93IDMyIGJpdHMuIE5hcnJvd2luZyB0aGVcXG4rICogc291cmNlIG11c3QgcmVhY2ggdGhlIGRlc3RpbmF0aW9uIHRocm91Z2ggdGhhdCBsaW5rLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIHpleHRfbW92X25hcnJvd19zcmModm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3NyA9IHc2O1xcdFxcdC8qIGZvcm1zIHRoZSBsaW5rICovXFx0XFx0XFxcXFxcbitcXHRpZiB3NiAhPSAwIGdvdG8gMWY7XFx0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcXFxcXFxuK1xcdGlmIHc3ID09IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHJldmVyc2UgZG9lcyBub3QgaG9sZDogbmFycm93aW5nIHRoZSBsb3ctMzIgbGluayBzYXlzIG5vdGhpbmcgYWJvdXQgdGhlXFxuKyAqIGJhc2UncyBoaWdoIGJpdHMsIHNvIHI2IG11c3Qgc3RheSB1bmtub3duIGFuZCB0aGUgZGl2IHN0YXlzIHJlYWNoYWJsZS5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJkaXYgYnkgemVyb1xcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19kc3Rfa2VlcHNfYmFzZSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHc3ID0gdzY7XFx0XFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cXHRcXHRcXFxcXFxuK1xcdGlmIHI3ICE9IDAgZ290byAxZjtcXHQvKiBuYXJyb3dzIHI3LCBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjYgKi8gXFxcXFxcbitcXHRpZiByNiA9PSAwIGdvdG8gMWY7XFx0LyogdGFrZW4gb25seSBpZiByNiB3cm9uZ2x5IG5hcnJvd2VkICovXFx0XFxcXFxcbitcXHRyMCAvPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgcHJvdmFibHktdTMyIHNvdXJjZSB0YWtlcyB0aGUgZnVsbC1lcXVhbGl0eSBwYXRoLCBub3QgdGhlIGxvdy0zMiBvbmU6XFxuKyAqIG5hcnJvd2luZyB0aGUgZGVzdGluYXRpb24gbXVzdCByZWFjaCB0aGUgc291cmNlLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIHpleHRfdTMyX3NyY19pc19mdWxsX2xpbmsodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHc2ID0gdzA7XFx0XFx0LyogcjYgcHJvdmFibHkgdTMyICovXFx0XFx0XFxcXFxcbitcXHR3NyA9IHc2O1xcdFxcdC8qIGZ1bGwgbGluaywgbm90IGxvdy0zMiAqL1xcdFxcXFxcXG4rXFx0aWYgcjcgXFx1MDAzZSAxMCBnb3RvIDFmO1xcdC8qIG5hcnJvd3MgcjcsIHByb3BhZ2F0ZXMgdG8gcjYgKi8gXFxcXFxcbitcXHRpZiByNiBcXHUwMDNlIDEwIGdvdG8gMmY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIDFmO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBzZWxmLW1vdiBoYXMgbm90aGluZyB0byBsaW5rLCBzbyBpdCBtdXN0IG5vdCBtaW50IGFuIGlkIGZvciByNi5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuKy8qIGFuIGlkIHdvdWxkIHByaW50IGFzIFI2PXNjYWxhcihpZD1OLmxvMzIsc21pbj0uLi4gKi9cXG4rX19tc2coXFxcIihiYykgdzYgPSB3NiB7ey4qfX0gUjY9c2NhbGFyKHNtaW49MCxcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9zZWxmX21vdl9ub19saW5rKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgXj0gMDtcXHRcXHQvKiBkcm9wIHRoZSBpZCAqL1xcdFxcdFxcXFxcXG4rXFx0dzYgPSB3NjtcXHRcXHQvKiBmb3JtcyBubyBsaW5rICovXFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBBIGxvdy0zMi1saW5rZWQgc291cmNlIGtlZXBzIGl0cyBpZCBhbmQgZmxhZyBhY3Jvc3MgYSBmdXJ0aGVyIDMyLWJpdCBtb3YsXFxuKyAqIHNvIG5hcnJvd2luZyB0aGUgYmFzZSBzdGlsbCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGNoYWluLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIHpleHRfY2hhaW5fa2VlcHNfbGluayh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHc3ID0gdzY7XFx0XFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cXHRcXHRcXFxcXFxuK1xcdHc4ID0gdzc7XFx0XFx0LyogbGluayBzdXJ2aXZlcyB0aGUgMm5kIG1vdiAqL1xcdFxcXFxcXG4rXFx0aWYgdzYgIT0gMCBnb3RvIDFmO1xcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjggKi8gXFxcXFxcbitcXHRpZiB3OCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCAvPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgZGVsdGEgb24gZWl0aGVyIHNpZGUgaXMgbm90IG1vZGVsbGVkIHRvZ2V0aGVyIHdpdGggYSBsb3ctMzIgbGluaywgc28gbm9cXG4rICogcmFuZ2UgcHJvcGFnYXRlczogaGVyZSB0aGUgYnJhbmNoIHJlZ2lzdGVyIGNhcnJpZXMgdGhlIGRlbHRhLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImRpdiBieSB6ZXJvXFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzcgPSB3NjtcXHRcXHQvKiBmb3JtcyB0aGUgbGluayAqL1xcdFxcdFxcXFxcXG4rXFx0cjggPSByNjtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI4ICs9IDM7XFx0XFx0LyogZGVsdGEgb24gdGhlIGJyYW5jaCByZWcgKi9cXHRcXFxcXFxuK1xcdGlmIHI4ICE9IDMgZ290byAxZjtcXHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjcgKi9cXHRcXFxcXFxuK1xcdGlmIHc3ID09IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogLi4uIGFuZCBoZXJlIHRoZSBsb3ctMzIgbGluayBpcyB0aGUgYnJhbmNoIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXJcXG4rICogY2FycnlpbmcgdGhlIGRlbHRhIG11c3Qgbm90IGJlIG5hcnJvd2VkIGVpdGhlci5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJkaXYgYnkgemVyb1xcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X25vX3N5bmNfZnJvbV9zdWJyZWdfYmFzZSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHc3ID0gdzY7XFx0XFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cXHRcXHRcXFxcXFxuK1xcdHI4ID0gcjY7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCArPSAzO1xcdFxcdC8qIGRlbHRhIG9uIHI4ICovXFx0XFx0XFxcXFxcbitcXHRpZiB3NyAhPSAwIGdvdG8gMWY7XFx0LyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI4ICovXFx0XFxcXFxcbitcXHRpZiByOCA9PSAzIGdvdG8gMWY7XFx0LyogdGFrZW4gb25seSBpZiByOCB3cm9uZ2x5IG5hcnJvd2VkICovXFx0XFxcXFxcbitcXHRyMCAvPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFR3byBsb3ctMzIgbGlua3Mgb24gdGhlIHNhbWUgYmFzZSBkbyBwcm9wYWdhdGUgdG8gZWFjaCBvdGhlcjogYm90aCBhcmUgdGhlXFxuKyAqIHplcm8tZXh0ZW5zaW9uIG9mIHRoZSBzYW1lIGxvdyAzMiBiaXRzLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIHpleHRfc3luY19iZXR3ZWVuX3R3b19zdWJyZWdzKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzcgPSB3NjtcXHRcXHQvKiB0d28gbGlua3Mgb24gb25lIGJhc2UgKi9cXHRcXFxcXFxuK1xcdHc4ID0gdzY7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiB3NyAhPSAwIGdvdG8gMWY7XFx0LyogbmFycm93cyByNywgcHJvcGFnYXRlcyB0byByOCAqLyBcXFxcXFxuK1xcdGlmIHc4ID09IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogT25seSBvbmUgb2YgdGhlIHR3byBwYXRocyBsaW5rcyByNyB0byByOCwgc28gdGhlIG5hcnJvd2luZyBvZiB3OCByZWFjaGVzIHI3XFxuKyAqIG9uIG9uZSBhbmQgbm90IHRoZSBvdGhlciBhbmQgdGhlIGRpdiBzdGF5cyByZWFjaGFibGUuIFRoaXMgY2hlY2tzIHRoZVxcbisgKiBvdXRjb21lLCBub3QgdGhlIG1lY2hhbmlzbTogdGhlIHR3byBzdGF0ZXMgZGlmZmVyIGluIHRoZWlyIGlkcyBhbmQgY29udGVudHMsXFxuKyAqIHNvIHJlZ3NhZmUoKSBoYXMgbWFueSByZWFzb25zIHRvIGtlZXAgdGhlbSBhcGFydCBhbmQgZGlzYWJsaW5nIGFueSBzaW5nbGVcXG4rICogb25lIG9mIGl0cyBjaGVja3MgZG9lcyBub3QgbWFrZSB0aGlzIGZhaWwuXFxuKyAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiZGl2IGJ5IHplcm9cXFwiKVxcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxcbitfX25ha2VkIHZvaWQgemV4dF91bmxpbmtlZF9wYXRoX3N0YXlzX3JlYWNoYWJsZSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IFxcdTAwMjY9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByNiBcXHUwMDNlPSAxIGdvdG8gMmY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiBleHBsb3JlZCBmaXJzdDogcjcgaXMgYSBsb3ctMzIgbGluayBvZiByOCAqL1xcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjggPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHc3ID0gdzg7XFx0XFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cXHRcXHRcXFxcXFxuK1xcdGdvdG8gMWY7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcnVudGltZSBwYXRoOiByNyB1bnJlbGF0ZWQgdG8gcjggKi9cXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI4ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3NyA9IHcwO1xcdFxcdC8qIG5vIGxpbmsgaGVyZSAqL1xcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHc4ICE9IDAgZ290byAzZjtcXHQvKiBwcm9wYWdhdGVzIHRvIHI3IG9ubHkgaWYgbGlua2VkICovIFxcXFxcXG4rXFx0aWYgdzcgPT0gMCBnb3RvIDNmO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgLz0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBGb3JtaW5nIHRoZSBsaW5rIGNhbGxzIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdigpLCB3aGljaCBkcm9wcyBhIGRlbHRhXFxuKyAqIGxpbmsgb24gdGhlIHNvdXJjZS4gVGhhdCBpcyB3aGF0IHRoZSBuYXJyb3ctc291cmNlIHBhdGggaGFzIGFsd2F5cyBkb25lLFxcbisgKiBzbyBhIHdpZGUgc291cmNlIGJlaGF2ZXMgdGhlIHNhbWU6IHI1IHN0b3BzIHRyYWNraW5nIHI2LlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImRpdiBieSB6ZXJvXFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfbW92X2JyZWFrc19hZGRfY29uc3Rfc3JjKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjUgPSByNjtcXHRcXHQvKiByNSwgcjYgbGlua2VkICovXFx0XFx0XFxcXFxcbitcXHRyNSArPSAzO1xcdFxcdC8qIHI1ID0gYmFzZSArIDMgKi9cXHRcXHRcXFxcXFxuK1xcdHc3ID0gdzU7XFx0XFx0LyogYnJlYWtzIHI1J3MgZGVsdGEgbGluayAqL1xcdFxcXFxcXG4rXFx0aWYgcjYgXFx1MDAzZSA5IGdvdG8gMWY7XFx0LyogcjYgaW4gWzAsIDldICovXFx0XFx0XFxcXFxcbitcXHRpZiByNSBcXHUwMDNjIDEzIGdvdG8gMWY7XFx0LyogdGFrZW4gb25seSBpZiByNSBzdGlsbCBsaW5rZWQgKi8gXFxcXFxcbitcXHRyMCAvPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgbmFycm93aW5nIGZpbGwga2VlcHMgb25seSB0aGUgc2xvdCdzIGxvdyAzMiBiaXRzLCBzbyBhIGxhdGVyIG5hcnJvd2luZyBvZlxcbisgKiB0aGUgc3BpbGxlZCB2YWx1ZSBtdXN0IHN0aWxsIHJlYWNoIHRoZSBmaWxsZWQgcmVnaXN0ZXIuIFNhbWUgcmVsYXRpb24gYXMgYVxcbisgKiAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSwgd2l0aCB0aGUgc3RhY2sgc2xvdCBhcyB0aGUgYmFzZS5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzXFxuK19fbmFrZWQgdm9pZCB6ZXh0X2ZpbGxfbmFycm93X2Zyb21fd2lkZV9zcGlsbCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIFxcdTAwM2NcXHUwMDNjPSAzMjtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IHw9IHIwO1xcdFxcdC8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByNjtcXHQvKiBzbG90IGxpbmtlZCB0byByNiAqL1xcdFxcdFxcXFxcXG4rXFx0cjIgPSAqKHUzMiAqKShyMTAgLSA4KTtcXHQvKiBuYXJyb3dpbmcgZmlsbCwgZm9ybXMgdGhlIGxpbmsgKi8gXFxcXFxcbitcXHRpZiB3NiAhPSAwIGdvdG8gMWY7XFx0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxcXFxuK1xcdGlmIHIyID09IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBmdWxsLXdpZHRoIGZpbGwgb2YgYSB3aWRlIHNsb3QgaXMgYSBwbGFpbiA2NC1iaXQgZXF1YWxpdHksIG5vdCBhIGxvdy0zMlxcbisgKiBsaW5rLCBzbyBpdCBtdXN0IGtlZXAgcHJvcGFnYXRpbmcgZXhhY3RseSBhcyBiZWZvcmUuXFxuKyAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2Vzc1xcbitfX25ha2VkIHZvaWQgemV4dF9maWxsX2Z1bGxfd2lkdGhfa2VlcHNfZnVsbF9saW5rKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgXFx1MDAzY1xcdTAwM2M9IDMyO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgfD0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQqKHU2NCAqKShyMTAgLSA4KSA9IHI2O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSAqKHU2NCAqKShyMTAgLSA4KTtcXHQvKiBubyBuYXJyb3dpbmcgKi9cXHRcXHRcXFxcXFxuK1xcdGlmIHI2ICE9IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHIyID09IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBzdWItd29yZCBmaWxsIGlzIGJlbG93IHRoZSBsb3ctMzIgbW9kZWwsIHNvIG5vIGxpbmsgaXMgZm9ybWVkIGFuZCB0aGVcXG4rICogcmVsYXRpb24gaXMgZHJvcHBlZCBhcyBiZWZvcmUuXFxuKyAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiZGl2IGJ5IHplcm9cXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9maWxsX2J5dGVfZm9ybXNfbm9fbGluayh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIFxcdTAwM2NcXHUwMDNjPSAzMjtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IHw9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gKih1OCAqKShyMTAgLSA4KTtcXHQvKiAxLWJ5dGUgZmlsbDogbm8gbGluayAqL1xcdFxcXFxcXG4rXFx0aWYgdzYgIT0gMCBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgcjIgPT0gMCBnb3RvIDFmO1xcdC8qIG5vdCBkZWR1Y2VkICovXFx0XFx0XFxcXFxcbitcXHRyMCAvPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgbmFycm93aW5nIHNwaWxsIHN0b3JlcyBvbmx5IHRoZSBzb3VyY2UncyBsb3cgMzIgYml0cywgc28gdGhlIHNsb3QgaXMgdGhlaXJcXG4rICogemVyby1leHRlbnNpb24uIEEgbGF0ZXIgbmFycm93aW5nIG9mIHRoZSBzb3VyY2UgbXVzdCBzdGlsbCByZWFjaCBhbnl0aGluZ1xcbisgKiBmaWxsZWQgYmFjayBvdXQgb2YgdGhhdCBzbG90LlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIHpleHRfbmFycm93aW5nX3NwaWxsX2tlZXBzX2xpbmsodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCBcXHUwMDNjXFx1MDAzYz0gMzI7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiB8PSByMDtcXHRcXHQvKiByNiA9IGZ1bGwgNjQtYml0IHVua25vd24gKi9cXHRcXFxcXFxuK1xcdCoodTMyICopKHIxMCAtIDgpID0gcjY7XFx0LyogbmFycm93aW5nIHNwaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcXFxcXFxuK1xcdHIyID0gKih1MzIgKikocjEwIC0gOCk7XFx0LyogZmlsbCBpdCBiYWNrICovXFx0XFx0XFxcXFxcbitcXHRpZiB3NiAhPSAwIGdvdG8gMWY7XFx0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxcXFxuK1xcdGlmIHIyID09IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBzdWItd29yZCBzcGlsbCBpcyBiZWxvdyB0aGUgbG93LTMyIG1vZGVsLCBzbyBubyBsaW5rIGlzIGZvcm1lZCB0aGVyZS5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJkaXYgYnkgemVyb1xcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9ieXRlX25vX2xpbmsodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCBcXHUwMDNjXFx1MDAzYz0gMzI7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiB8PSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTggKikocjEwIC0gOCkgPSByNjtcXHQvKiAxLWJ5dGUgc3BpbGw6IG5vIGxpbmsgKi9cXHRcXFxcXFxuK1xcdHIyID0gKih1OCAqKShyMTAgLSA4KTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHc2ICE9IDAgZ290byAxZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHIyID09IDAgZ290byAxZjtcXHQvKiBub3QgZGVkdWNlZCAqL1xcdFxcdFxcXFxcXG4rXFx0cjAgLz0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisjaWZkZWYgQ0FOX1VTRV9NT1ZTWFxcbitcXG4rLypcXG4rICogQSAzMi1iaXQgc2lnbiBleHRlbnNpb24ga2VlcHMgdGhlIGxvdyAzMiBiaXRzLCBzbyBuYXJyb3dpbmcgdGhlIHNvdXJjZVxcbisgKiByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbiB0aGUgc2FtZSB3YXkgaXQgZG9lcyBmb3IgYSB6ZXJvIGV4dGVuc2lvbi4gVGhlIGhpZ2hcXG4rICogaGFsZiBmb2xsb3dzIHRoZSBzaWduLCBzbyB0aGUgdmFsdWUgc2VlbiBoZXJlIGlzIG5lZ2F0aXZlLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIHNleHRfbW92X3dpZGVfc3JjKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjcgPSAoczMyKXI2O1xcdFxcdC8qIGZvcm1zIHRoZSBsaW5rICovXFx0XFx0XFxcXFxcbitcXHRpZiB3NiAhPSAtMSBnb3RvIDFmO1xcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXFxcXFxcbitcXHRpZiByNyA9PSAtMSBnb3RvIDFmO1xcdC8qIHNpZ24tZXh0ZW5kZWQsIG5vdCAweGZmZmZmZmZmICovIFxcXFxcXG4rXFx0cjAgLz0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiByMCA9IChzMzIpcjAgaXMgaG93IGEgc2lnbi1leHRlbmRlZCBpbnQgcmV0dXJuIGxhbmRzLiBzcmMgYW5kIGRzdCBhcmUgdGhlXFxuKyAqIHNhbWUgcmVnaXN0ZXIsIGJ1dCByMCBpcyBhbHJlYWR5IGxpbmtlZCwgc28gdGhlcmUgaXMgYSBzZXQgZm9yIGl0IHRvIHN0YXlcXG4rICogaW4gYW5kIHRoZSBuYXJyb3dpbmcgc3RpbGwgcHJvcGFnYXRlcy5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzXFxuK19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X2tlZXBzX2xpbmsodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNyA9IHI2O1xcdFxcdC8qIHI2LCByNyBsaW5rZWQgKi9cXHRcXHRcXFxcXFxuK1xcdHI3ID0gKHMzMilyNztcXHRcXHQvKiBzZWxmLW1vdiwga2VlcHMgdGhlIGlkICovXFx0XFxcXFxcbitcXHRpZiB3NiAhPSAtMSBnb3RvIDFmO1xcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXFxcXFxcbitcXHRpZiByNyA9PSAtMSBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgLz0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBUaGUgc2FtZSBzZWxmLW1vdiBvbiBhbiB1bmxpbmtlZCByZWdpc3RlciBoYXMgbm90aGluZyB0byBsaW5rIHRvLCBzbyBpdFxcbisgKiBtdXN0IG5vdCBtaW50IGFuIGlkIHRoYXQgd291bGQgbGVhdmUgcjYgZGVzY3JpYmluZyBpdHNlbGYuXFxuKyAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbisvKiBhbiBpZCB3b3VsZCBwcmludCBhcyBSNj1zY2FsYXIoaWQ9Ti5sbzMyc3gsc21pbj0uLi4gKi9cXG4rX19tc2coXFxcIihiZikgcjYgPSAoczMyKXI2IHt7Lip9fSBSNj1zY2FsYXIoc21pbj1cXFwiKVxcbitfX25ha2VkIHZvaWQgc2V4dF9zZWxmX21vdl9ub19saW5rKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgXj0gMDtcXHRcXHQvKiBkcm9wIHRoZSBpZCAqL1xcdFxcdFxcXFxcXG4rXFx0cjYgPSAoczMyKXI2O1xcdFxcdC8qIGZvcm1zIG5vIGxpbmsgKi9cXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgZGVsdGEgb24gdGhlIGJyYW5jaCByZWdpc3RlciBpcyBub3QgbW9kZWxsZWQgdG9nZXRoZXIgd2l0aCBhIGxvdy0zMlxcbisgKiBsaW5rLCBzbyB0aGUgcHJvcGFnYXRpb24gaXMgc2tpcHBlZCByYXRoZXIgdGhhbiBndWVzc2VkIGF0LlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImRpdiBieSB6ZXJvXFxcIilcXG4rX19uYWtlZCB2b2lkIHNleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjcgPSAoczMyKXI2O1xcdFxcdC8qIGZvcm1zIHRoZSBsaW5rICovXFx0XFx0XFxcXFxcbitcXHRyOCA9IHI2O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjggKz0gMztcXHRcXHQvKiBkZWx0YSBvbiB0aGUgYnJhbmNoIHJlZyAqL1xcdFxcXFxcXG4rXFx0aWYgcjggIT0gMyBnb3RvIDFmO1xcdC8qIG11c3Qgbm90IHByb3BhZ2F0ZSB0byByNyAqL1xcdFxcXFxcXG4rXFx0aWYgcjcgPT0gMCBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgLz0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiAuLi4gYW5kIHdpdGggdGhlIGxpbmsgYXMgdGhlIGJyYW5jaCByZWdpc3RlciB0aGUgcHJvcGFnYXRpb24gbXVzdCBub3QgcnVuXFxuKyAqIGJhY2t3YXJkczogYSAtXFx1MDAzZXN1YnJlZyByZWdpc3RlciBrbm93cyBub3RoaW5nIGFib3V0IHRoZSBiYXNlJ3MgaGlnaCBoYWxmLCBzb1xcbisgKiBuYXJyb3dpbmcgaXQgbXVzdCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgc2V0IGFsb25lLiBXZXJlIHRoZSBndWFyZCBtaXNzaW5nLFxcbisgKiByOCB3b3VsZCBiZSByZWJ1aWx0IGFzIHI3ICsgMyA9PSAyLCB0cmVhdGluZyByNyBhcyBpZiBpdCB3ZXJlIHRoZSBiYXNlLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImRpdiBieSB6ZXJvXFxcIilcXG4rX19uYWtlZCB2b2lkIHNleHRfbm9fc3luY19mcm9tX3N1YnJlZ19iYXNlKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjcgPSAoczMyKXI2O1xcdFxcdC8qIGZvcm1zIHRoZSBsaW5rICovXFx0XFx0XFxcXFxcbitcXHRyOCA9IHI2O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjggKz0gMztcXHRcXHQvKiBkZWx0YSBvbiByOCAqL1xcdFxcdFxcXFxcXG4rXFx0aWYgcjcgIT0gLTEgZ290byAxZjtcXHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi9cXHRcXFxcXFxuK1xcdGlmIHI4ID09IDIgZ290byAxZjtcXHQvKiB0YWtlbiBvbmx5IGlmIHI4IHdyb25nbHkgbmFycm93ZWQgKi9cXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHR3byBraW5kcyByZWJ1aWxkIHRoZSBoaWdoIGhhbGYgZGlmZmVyZW50bHk6IHRoZSBzYW1lIGxvdyBoYWxmIHJlYWNoZXNcXG4rICogLTEgdGhyb3VnaCBhIHNpZ24gZXh0ZW5zaW9uIGFuZCAweGZmZmZmZmZmIHRocm91Z2ggYSB6ZXJvIGV4dGVuc2lvbiwgc28gb25seVxcbisgKiBvbmUgcGF0aCBjbGVhcnMgdGhlIGd1YXJkLiBBcyBhYm92ZSB0aGlzIGNoZWNrcyB0aGUgb3V0Y29tZSAtLSB0aGUgZGlmZmVyaW5nXFxuKyAqIHJhbmdlcyBrZWVwIHRoZSBzdGF0ZXMgYXBhcnQgb24gdGhlaXIgb3duLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImRpdiBieSB6ZXJvXFxcIilcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19uYWtlZCB2b2lkIHNleHRfa2luZHNfcmVhY2hfZGlmZmVyZW50X3ZhbHVlcyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IFxcdTAwMjY9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByNiBcXHUwMDNlPSAxIGdvdG8gMmY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiBleHBsb3JlZCBmaXJzdDogcjcgaXMgYSBzaWduLWV4dGVuZGVkIGxpbmsgb2YgcjggKi9cXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI4ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNyA9IChzMzIpcjg7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIDFmO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHJ1bnRpbWUgcGF0aDogcjcgaXMgYSB6ZXJvLWV4dGVuZGVkIGxpbmsgb2YgcjggKi9cXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI4ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3NyA9IHc4O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHc4ICE9IC0xIGdvdG8gM2Y7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByNyA9PSAtMSBnb3RvIDNmO1xcdC8qIG9ubHkgdGhlIHNpZ24tZXh0ZW5kZWQgcGF0aCAqLyBcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiszOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0OiB0aGUgZmlsbGVkIHJlZ2lzdGVyIGlzIHRoZSBzaWduIGV4dGVuc2lvbiBvZlxcbisgKiB0aGUgc2xvdCdzIGxvdyAzMiBiaXRzLCBzbyBhIG5hcnJvd2luZyBvZiB0aG9zZSBiaXRzIGFycml2ZXMgc2lnbi1leHRlbmRlZC5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzXFxuK19fbmFrZWQgdm9pZCBzZXh0X2ZpbGxfbmFycm93X2Zyb21fd2lkZV9zcGlsbCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIFxcdTAwM2NcXHUwMDNjPSAzMjtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IHw9IHIwO1xcdFxcdC8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByNjtcXHQvKiBzbG90IGxpbmtlZCB0byByNiAqL1xcdFxcdFxcXFxcXG4rXFx0cjIgPSAqKHMzMiAqKShyMTAgLSA4KTtcXHQvKiBuYXJyb3dpbmcgc3ggZmlsbCAqL1xcdFxcdFxcXFxcXG4rXFx0aWYgdzYgIT0gLTEgZ290byAxZjtcXHQvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHIyICovIFxcXFxcXG4rXFx0aWYgcjIgPT0gLTEgZ290byAxZjtcXHQvKiBzaWduLWV4dGVuZGVkLCBub3QgMHhmZmZmZmZmZiAqLyBcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHNhbWUsIGZvciB0aGUgdHdvIGZpbGwga2luZHMgb2ZmIG9uZSBzbG90LlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImRpdiBieSB6ZXJvXFxcIilcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19uYWtlZCB2b2lkIGZpbGxfa2luZHNfcmVhY2hfZGlmZmVyZW50X3ZhbHVlcyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2IFxcdTAwMjY9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgXFx1MDAzY1xcdTAwM2M9IDMyO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjggfD0gcjA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQqKHU2NCAqKShyMTAgLSA4KSA9IHI4O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgcjYgXFx1MDAzZT0gMSBnb3RvIDJmO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSAqKHMzMiAqKShyMTAgLSA4KTtcXHQvKiBzaWduLWV4dGVuZGluZyBmaWxsICovXFx0XFxcXFxcbitcXHRnb3RvIDFmO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gKih1MzIgKikocjEwIC0gOCk7XFx0LyogemVyby1leHRlbmRpbmcgZmlsbCAqL1xcdFxcXFxcXG4rMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHc4ICE9IC0xIGdvdG8gM2Y7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMiA9PSAtMSBnb3RvIDNmO1xcdC8qIG9ubHkgdGhlIHNpZ24tZXh0ZW5kaW5nIHBhdGggKi8gXFxcXFxcbitcXHRyMCAvPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKyNlbmRpZiAvKiBDQU5fVVNFX01PVlNYICovXFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guY1xcbmluZGV4IDE5NWIyN2E1MTIyNGYuLjNhMGU2N2ViYjk2M2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guY1xcbkBAIC0yMDIsNiArMjAyLDU3IEBAIGwwXyU9OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQSByYW5nZSB0aGF0IGFscmVhZHkgZml0cyB0aGUgZmllbGQgaXMgdW5jaGFuZ2VkIGJ5IHRoZSBzaWduIGV4dGVuc2lvbi5cXG4rICogQm90aCBvZiB0aGVzZSBzdHJhZGRsZSB6ZXJvLCBzbyB0aGUgaGlnaCBiaXRzIG9mIHNtaW4gYW5kIHNtYXggZGlmZmVyIGFuZFxcbisgKiB0aGUgdG9wX3MqX3ZhbHVlIHRlc3QgYWxvbmUgd291bGQgZmFsbCBiYWNrIHRvIHRoZSBmdWxsIGZpZWxkIHJhbmdlLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJNT1Y2NFNYLCBTMzIsIG5lZ2F0aXZlIHJhbmdlIGlzIHByZXNlcnZlZFxcXCIpXFxuK19fc3VjY2VzcyBfX3N1Y2Nlc3NfdW5wcml2IF9fcmV0dmFsKDApXFxuK19fbmFrZWQgdm9pZCBtb3Y2NHN4X3MzMl9uZWdhdGl2ZV9yYW5nZSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0dzAgXFx1MDAyNj0gMHhmZmY7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCAtPSAweGZmZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHIwIGlzIFstNDA5NSwgMF0sIGFscmVhZHkgYSB2YWxpZCBzMzIgKi9cXHRcXFxcXFxuK1xcdHIwID0gKHMzMilyMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHIwIHNcXHUwMDNjIC0weGZmZiBnb3RvIGwwXyU9O1xcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK2wwXyU9OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogdW5yZWFjaGFibGUgdW5sZXNzIHRoZSByYW5nZSB3YXMgd2lkZW5lZCAqL1xcdFxcXFxcXG4rXFx0cjAgLz0gMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiTU9WNjRTWCwgUzgsIG5lZ2F0aXZlIHJhbmdlIGlzIHByZXNlcnZlZFxcXCIpXFxuK19fc3VjY2VzcyBfX3N1Y2Nlc3NfdW5wcml2IF9fcmV0dmFsKDApXFxuK19fbmFrZWQgdm9pZCBtb3Y2NHN4X3M4X25lZ2F0aXZlX3JhbmdlKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3MCBcXHUwMDI2PSAweDNmO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgLT0gMHgzZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHIwIGlzIFstNjMsIDBdLCBhbHJlYWR5IGEgdmFsaWQgczggKi9cXHRcXFxcXFxuK1xcdHIwID0gKHM4KXIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgcjAgc1xcdTAwM2MgLTB4M2YgZ290byBsMF8lPTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitsMF8lPTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHVucmVhY2hhYmxlIHVubGVzcyB0aGUgcmFuZ2Ugd2FzIHdpZGVuZWQgKi9cXHRcXFxcXFxuK1xcdHIwIC89IDA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBTRUMoXFxcInNvY2tldFxcXCIpXFxuIF9fZGVzY3JpcHRpb24oXFxcIk1PVjY0U1gsIFMxNiwgUjEwIFNpZ24gRXh0ZW5zaW9uXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJSMSB0eXBlPXNjYWxhciBleHBlY3RlZD1mcCwgcGt0LCBwa3RfbWV0YSwgbWFwX2tleSwgbWFwX3ZhbHVlLCBtZW0sIHJpbmdidWZfbWVtLCBidWYsIHRydXN0ZWRfcHRyX1xcXCIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yZWdfZXF1YWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yZWdfZXF1YWwuY1xcbmluZGV4IGRjMWQ4YzMwZmIwZWUuLjM0MjE0ZWM5MjY3MDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXFxuQEAgLTMxLDIzICszMSwyMyBAQCBsMV8lPTpcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfVxcbiBcXG4gU0VDKFxcXCJzb2NrZXRcXFwiKVxcbi1fX2Rlc2NyaXB0aW9uKFxcXCJjaGVjayB3IHJlZyBub3QgZXF1YWwgaWYgciByZWcgdXBwZXIzMiBiaXRzIG5vdCAwXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSAhcmVhZF9va1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcImNoZWNrIHcgcmVnIGVxdWFsIGlmIHIgcmVnIHVwcGVyMzIgYml0cyBub3QgMFxcXCIpXFxuK19fc3VjY2Vzc1xcbiBfX25ha2VkIHZvaWQgc3VicmVnX2VxdWFsaXR5XzIodm9pZClcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGNhbGwgJVticGZfa3RpbWVfZ2V0X25zXTtcXHRcXHRcXHRcXFxcXFxuIFxcdHIyID0gcjA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQvKiBVcHBlciA0LWJ5dGVzIG9mIHIyIG1heSBub3QgYmUgMCwgdGh1cyBpbnNuXFx0XFxcXFxcbi1cXHQgKiB3MyA9IHcyIHNob3VsZCBub3QgcHJvcGFnYXRlIHJlZyBpZCxcXHRhbmRcXHRcXFxcXFxuLVxcdCAqIHcyIFxcdTAwM2MgOSBjb21wYXJpc29uIHNob3VsZCBub3QgcHJvcGFnYXRlXFx0XFxcXFxcbi1cXHQgKiB0aGUgcmFuZ2UgZm9yIHIzIGVpdGhlci5cXHRcXHRcXHRcXFxcXFxuK1xcdC8qIFVwcGVyIDQtYnl0ZXMgb2YgcjIgbWF5IG5vdCBiZSAwLCBzbyByMyBkb2VzXFx0XFxcXFxcbitcXHQgKiBub3QgZXF1YWwgcjIuIEl0IGRvZXMgc2hhcmUgcjIncyBsb3cgMzIgYml0c1xcdFxcXFxcXG4rXFx0ICogdGhvdWdoLCBzbyB3MiBcXHUwMDNjIDkgc3RpbGwgYm91bmRzIHIzOiB0aGVcXHRcXFxcXFxuK1xcdCAqIHplcm8tZXh0ZW5kaW5nIG1vdiBsZWF2ZXMgbm90aGluZyBhYm92ZSB0aGVtLlxcXFxcXG4gXFx0ICovXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHR3MyA9IHcyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0aWYgdzIgXFx1MDAzYyA5IGdvdG8gbDBfJT07XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gbDBfJT06XFx0aWYgcjMgXFx1MDAzYyA5IGdvdG8gbDFfJT07XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQvKiByMSByZWFkIGlzIGlsbGVnYWwgYXQgdGhpcyBwb2ludCAqL1xcdFxcdFxcXFxcXG4rXFx0LyogdW5yZWFjaGFibGUsIHNvIHRoZSByMSByZWFkIGlzIG5ldmVyIG1hZGUgKi9cXHRcXFxcXFxuIFxcdHIwIC09IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gbDFfJT06XFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcXCJcXHQ6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXFxuaW5kZXggMzlhMTc2NmRhZTNmMS4uMTA0Mjg1NmI5N2MyNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xcbkBAIC00NjQsOSArNDY0LDEzIEBAIGwwXyU9OlxcdHIxIFxcdTAwM2VcXHUwMDNlPSAxNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFNFQyhcXFwicmF3X3RwXFxcIilcXG4gX19sb2dfbGV2ZWwoMilcXG4gX19zdWNjZXNzXFxuLV9fbXNnKFxcXCJmcC04PTBtPz9zY2FsYXIoKVxcXCIpXFxuLV9fbXNnKFxcXCJmcC0xNj0wMG1tPz9zY2FsYXIoKVxcXCIpXFxuLV9fbXNnKFxcXCJmcC0yND0wMG1tPz8/c2NhbGFyKClcXFwiKVxcbisvKlxcbisgKiBUaGUgc2xvdCByZWNvcmRzIHdoYXQgdGhlIHN0b3JlIHB1dCB0aGVyZSwgbm90IHRoZSB3aWRlciBzb3VyY2UgaXQgY2FtZVxcbisgKiBmcm9tLCBzbyBlYWNoIHNjYWxhciBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIGl0cyBzcGlsbC5cXG4rICovXFxuK19fbXNnKFxcXCJmcC04PTBtPz9zY2FsYXIoaWQ9e3tbMC05XSt9fS5sbzMyLHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKVxcXCIpXFxuK19fbXNnKFxcXCJmcC0xNj0wMG1tPz9zY2FsYXIoc21pbj1zbWluMzI9MCxzbWF4PXVtYXg9c21heDMyPXVtYXgzMj0weGZmZmYsdmFyX29mZj0oMHgwOyAweGZmZmYpKVxcXCIpXFxuK19fbXNnKFxcXCJmcC0yND0wMG1tPz8/c2NhbGFyKHNtaW49c21pbjMyPTAsc21heD11bWF4PXNtYXgzMj11bWF4MzI9MjU1LHZhcl9vZmY9KDB4MDsgMHhmZikpXFxcIilcXG4gX19uYWtlZCB2b2lkIHNwaWxsX3N1YnJlZ3NfcHJlc2VydmVfc3RhY2tfemVybyh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjEwLjE4MDExMTk5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDI4OTU5NDM2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInN5bmNfbGlua2VkX3JlZ3NcIixcbiAgICBcImNoZWNrX2FsdV9vcFwiLFxuICAgIFwiY2hlY2tfbWVtX2FjY2Vzc1wiLFxuICAgIFwiYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHNcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNvZXJjZV9yZWdfdG9fc2l6ZV9zeFwiLFxuICAgIFwidG51bV9zZXh0XCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICAgIFwiYnBmX2NsZWFyX3Npbmd1bGFyX2lkc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciBzY2FsYXIgcmVnaXN0ZXIgbGlua2FnZSwgaW50cm9kdWNpbmcgc3VicmVnIHRyYWNraW5nIChTVUJSRUdfWkVYVCwgU1VCUkVHX1NFWFQpIGZvciAzMi1iaXQgbmFycm93aW5nIG9wZXJhdGlvbnMsIHNpZ24tZXh0ZW5zaW9uIHRudW0gaGVscGVycyAodG51bV9zZXh0KSwgc3RhY2sgc3BpbGwvZmlsbCBzY2FsYXIgdHJhY2tpbmcsIGFuZCB1cGRhdGluZyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgKHJlZ3NhZmUpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyBhbmQgYm91bmRzIHRyYWNraW5nIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmY5NWExM2Y1NmQ4NjJmZGI1NzhlZmExMGQwYzI4ZmMzZjE2ZmVkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE4OjMwOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDk3MjdkZjVhZjgzYWIuLjkyMGM5NDkwZWNjODIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMzUsNiArMzUsMjcgQEAgZW51bSBicGZfaXRlcl9zdGF0ZSB7XG4gXHRCUEZfSVRFUl9TVEFURV9EUkFJTkVELFxuIH07XG4gXG4rLypcbisgKiBSZWNvcmRzIHRoYXQgYSByZWdpc3RlciBpcyAoYmFzZSArIC1cdTAwM2VkZWx0YSkgd2l0aGluIGl0cyAtXHUwMDNlaWQgc2V0OlxuKyAqIHIxICs9IDEwOyAgIHIxIGdldHMgQUREX0NPTlNUXzY0IGRlbHRhXG4rICogdzMgKz0gMTA7ICAgcjMgZ2V0cyBBRERfQ09OU1RfMzIgZGVsdGFcbisgKi9cbitlbnVtIGJwZl9hZGRfY29uc3Qge1xuK1x0QUREX0NPTlNUX05PTkUgPSAwLFxuK1x0QUREX0NPTlNUXzMyLFx0XHQvKiBkZWx0YSB3YXMgYWRkZWQgd2l0aCBhIDMyLWJpdCBBTFUgb3AgKi9cbitcdEFERF9DT05TVF82NCxcdFx0LyogLi4uIHdpdGggYSA2NC1iaXQgQUxVIG9wICovXG4rfTtcbitcbisvKlxuKyAqIFJlY29yZHMgdGhhdCBhIHJlZ2lzdGVyIHNoYXJlcyBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSBvZiBpdHNcbisgKiAtXHUwMDNlaWQgc2V0LCBhbmQgaG93IGl0cyBoaWdoIGJpdHMgZm9sbG93IGZyb20gdGhlbS5cbisgKi9cbitlbnVtIGJwZl9zdWJyZWcge1xuK1x0U1VCUkVHX05PTkUgPSAwLFxuK1x0U1VCUkVHX1pFWFQsXHRcdC8qIGhpZ2ggYml0cyBhcmUgemVybyAoMzItYml0IHplcm8tZXh0ZW5kaW5nIG1vdikgKi9cbitcdFNVQlJFR19TRVhULFx0XHQvKiBoaWdoIGJpdHMgcmVwZWF0IGJpdCAzMSAoMzItYml0IHNpZ24tZXh0ZW5kaW5nIG1vdikgKi9cbit9O1xuK1xuIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXG4gXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xuQEAgLTEzNiwxNiArMTU3LDkgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUge1xuIFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cbiBcdCAqL1xuIFx0Lypcbi1cdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFwibGlua2VkXCJcbi1cdCAqIHJlZ2lzdGVycy4gRXhhbXBsZTpcbitcdCAqIFJlZ2lzdGVycyBzaGFyaW5nIGFuIC1cdTAwM2VpZCBhcmUgXCJsaW5rZWRcIjpcbiBcdCAqIHIxID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIxLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbi1cdCAqIHIxICs9IDEwOyAgIHIxLVx1MDAzZWlkID09IE4gfCBCUEZfQUREX0NPTlNUIGFuZCByMS1cdTAwM2VkZWx0YSA9PSAxMFxuLVx0ICogcjMgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjMtXHUwMDNlaWQgPT0gcjItXHUwMDNlaWQgPT0gTlxuLVx0ICogdzMgKz0gMTA7ICAgcjMtXHUwMDNlaWQgPT0gTiB8IEJQRl9BRERfQ09OU1QzMiBhbmQgcjMtXHUwMDNlZGVsdGEgPT0gMTBcbiBcdCAqL1xuLSNkZWZpbmUgQlBGX0FERF9DT05TVDY0ICgxVSBcdTAwM2NcdTAwM2MgMzEpXG4tI2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVIFx1MDAzY1x1MDAzYyAzMClcbi0jZGVmaW5lIEJQRl9BRERfQ09OU1QgKEJQRl9BRERfQ09OU1Q2NCB8IEJQRl9BRERfQ09OU1QzMilcbiBcdHUzMiBpZDtcbiBcdC8qXG4gXHQgKiBUcmFja3MgdGhlIHBhcmVudCBvYmplY3QgdGhpcyByZWdpc3RlciB3YXMgZGVyaXZlZCBmcm9tLlxuQEAgLTE2NCw2ICsxNzgsMTIgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUge1xuIFx0dTMyIGZyYW1lbm87XG4gXHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbid0IGFmZmVjdCBzYWZldHkgKi9cbiBcdGJvb2wgcHJlY2lzZTtcbitcdC8qXG4rXHQgKiBIb3cgdGhpcyByZWdpc3RlciByZWxhdGVzIHRvIHRoZSBvdGhlcnMgc2hhcmluZyBpdHMgLVx1MDAzZWlkLlxuK1x0ICogTm9uLXplcm8gb25seSBpZiAtXHUwMDNlaWQgaXMuXG4rXHQgKi9cbitcdGVudW0gYnBmX2FkZF9jb25zdCBhZGRfY29uc3Q6MjtcbitcdGVudW0gYnBmX3N1YnJlZyBzdWJyZWc6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90bnVtLmggYi9pbmNsdWRlL2xpbnV4L3RudW0uaFxuaW5kZXggY2EyY2ZlYzhkZTA4YS4uODY2ODAzZGU1ODQxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdG51bS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3RudW0uaFxuQEAgLTYzLDYgKzYzLDkgQEAgc3RydWN0IHRudW0gdG51bV91bmlvbihzdHJ1Y3QgdG51bSB0MSwgc3RydWN0IHRudW0gdDIpO1xuIC8qIFJldHVybiBAYSB3aXRoIGFsbCBidXQgdGhlIGxvd2VzdCBAc2l6ZSBieXRlcyBjbGVhcmVkICovXG4gc3RydWN0IHRudW0gdG51bV9jYXN0KHN0cnVjdCB0bnVtIGEsIHU4IHNpemUpO1xuIFxuKy8qIFJldHVybiB0aGUgbG93ZXN0IEBzaXplIGJ5dGVzIG9mIEBhIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyAqL1xuK3N0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKTtcbitcbiAvKiBTd2FwIHRoZSBieXRlcyBvZiBhIHRudW0gKi9cbiBzdHJ1Y3QgdG51bSB0bnVtX2Jzd2FwMTYoc3RydWN0IHRudW0gYSk7XG4gc3RydWN0IHRudW0gdG51bV9ic3dhcDMyKHN0cnVjdCB0bnVtIGEpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbG9nLmMgYi9rZXJuZWwvYnBmL2xvZy5jXG5pbmRleCBmYjAzMmRmZGMwZGVlLi5iNjdiYmQ0ZDU3ZjQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9sb2cuY1xuKysrIGIva2VybmVsL2JwZi9sb2cuY1xuQEAgLTY1MSw5ICs2NTEsMTMgQEAgc3RhdGljIHZvaWQgcHJpbnRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHZlcmJvc2UoZW52LCBcIiVzXCIsIGJ0Zl90eXBlX25hbWUocmVnLVx1MDAzZWJ0ZiwgcmVnLVx1MDAzZWJ0Zl9pZCkpO1xuIFx0dmVyYm9zZShlbnYsIFwiKFwiKTtcbiBcdGlmIChyZWctXHUwMDNlaWQpXG4tXHRcdHZlcmJvc2VfYShcImlkPSVkXCIsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpO1xuLVx0aWYgKHJlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbitcdFx0dmVyYm9zZV9hKFwiaWQ9JWRcIiwgcmVnLVx1MDAzZWlkKTtcbitcdGlmIChyZWctXHUwMDNlYWRkX2NvbnN0KVxuIFx0XHR2ZXJib3NlKGVudiwgXCIlK2RcIiwgcmVnLVx1MDAzZWRlbHRhKTtcbitcdGlmIChyZWctXHUwMDNlc3VicmVnID09IFNVQlJFR19aRVhUKVxuK1x0XHR2ZXJib3NlKGVudiwgXCIubG8zMlwiKTtcbitcdGVsc2UgaWYgKHJlZy1cdTAwM2VzdWJyZWcgPT0gU1VCUkVHX1NFWFQpXG4rXHRcdHZlcmJvc2UoZW52LCBcIi5sbzMyc3hcIik7XG4gXHRpZiAocmVnLVx1MDAzZXBhcmVudF9pZClcbiBcdFx0dmVyYm9zZV9hKFwicGFyZW50X2lkPSVkXCIsIHJlZy1cdTAwM2VwYXJlbnRfaWQpO1xuIFx0aWYgKHR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCA2NmZiMTFiNmM2YTc2Li4xNjE4Yzc3MTA1YWIwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTM2OSwxMyArMzY5LDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuICAqIGFuZCByNy5pZD0wIChib3RoIGluZGVwZW5kZW50KSwgd2l0aG91dCB0ZW1wIElEcyBib3RoIHdvdWxkIG1hcCBvbGRfaWQ9WFxuICAqIHRvIGN1cl9pZD0wIGFuZCBwYXNzLiBXaXRoIHRlbXAgSURzOiByNiBtYXBzIFgtXHUwMDNldGVtcDEsIHI3IHRyaWVzIHRvIG1hcFxuICAqIFgtXHUwMDNldGVtcDIsIGJ1dCBYIGlzIGFscmVhZHkgbWFwcGVkIHRvIHRlbXAxLCBzbyB0aGUgY2hlY2sgZmFpbHMgY29ycmVjdGx5LlxuLSAqXG4tICogV2hlbiBvbGRfaWQgaGFzIEJQRl9BRERfQ09OU1Qgc2V0LCB0aGUgY29tcG91bmQgaWQgKGJhc2UgfCBmbGFnKSBhbmQgdGhlXG4tICogYmFzZSBpZCAoZmxhZyBzdHJpcHBlZCkgbXVzdCBib3RoIG1hcCBjb25zaXN0ZW50bHkuIEV4YW1wbGU6IG9sZCBoYXNcbi0gKiByMi5pZD1BLCByMy5pZD1BfGZsYWcgKHIzID0gcjIgKyBkZWx0YSksIGN1ciBoYXMgcjIuaWQ9QiwgcjMuaWQ9Q3xmbGFnXG4tICogKHIzIGRlcml2ZWQgZnJvbSB1bnJlbGF0ZWQgcjQpLiBXaXRob3V0IHRoZSBiYXNlIGNoZWNrLCBpZG1hcCBnZXRzIHR3b1xuLSAqIGluZGVwZW5kZW50IGVudHJpZXMgQS1cdTAwM2VCIGFuZCBBfGZsYWctXHUwMDNlQ3xmbGFnLCBtaXNzaW5nIHRoYXQgQS1cdTAwM2VDIGNvbmZsaWN0c1xuLSAqIHdpdGggQS1cdTAwM2VCLiBUaGUgYmFzZSBJRCBjcm9zcy1jaGVjayBjYXRjaGVzIHRoaXMuXG4gICovXG4gc3RhdGljIGJvb2wgY2hlY2tfc2NhbGFyX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiB7XG5AQCAtMzg0LDE1ICszNzcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIFxuIFx0Y3VyX2lkID0gY3VyX2lkID8gY3VyX2lkIDogKytpZG1hcC1cdTAwM2V0bXBfaWRfZ2VuO1xuIFxuLVx0aWYgKCFjaGVja19pZHMob2xkX2lkLCBjdXJfaWQsIGlkbWFwKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKG9sZF9pZCBcdTAwMjYgQlBGX0FERF9DT05TVCkge1xuLVx0XHRvbGRfaWQgXHUwMDI2PSB+QlBGX0FERF9DT05TVDtcbi1cdFx0Y3VyX2lkIFx1MDAyNj0gfkJQRl9BRERfQ09OU1Q7XG4tXHRcdGlmICghY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuQEAgLTQ5MCw2ICs0NzUsOCBAQCBzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4ge1xuIFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJvbGQtXHUwMDNlYWRkX2NvbnN0ID09IHJjdXItXHUwMDNlYWRkX2NvbnN0IFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJvbGQtXHUwMDNlc3VicmVnID09IHJjdXItXHUwMDNlc3VicmVnIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuIH1cbkBAIC01NDIsOCArNTI5LDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0XHQvKiBleHBsb3JlX2FsdV9saW1pdHMgZGlzYWJsZXMgdG51bV9pbigpIGFuZCByYW5nZV93aXRoaW4oKVxuIFx0XHRcdCAqIGxvZ2ljIGFuZCByZXF1aXJlcyBldmVyeXRoaW5nIHRvIGJlIHN0cmljdFxuIFx0XHRcdCAqL1xuLVx0XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgICAgY2hlY2tfc2NhbGFyX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCk7XG4rXHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIFx0XHR9XG4gXHRcdGlmICghcm9sZC1cdTAwM2VwcmVjaXNlIFx1MDAyNlx1MDAyNiBleGFjdCA9PSBOT1RfRVhBQ1QpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtNTUxLDcgKzUzNyw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gXHRcdCAqIExpbmtlZCByZWdpc3RlciB0cmFja2luZyB1c2VzIHJvbGQtXHUwMDNlaWQgdG8gZGV0ZWN0IHJlbGF0aW9uc2hpcHMuXG4gXHRcdCAqIFdoZW4gcm9sZC1cdTAwM2VpZCA9PSAwLCB0aGUgcmVnaXN0ZXIgaXMgaW5kZXBlbmRlbnQgYW5kIGFueSBsaW5raW5nXG4gXHRcdCAqIGluIHJjdXIgb25seSBhZGRzIGNvbnN0cmFpbnRzLiBXaGVuIHJvbGQtXHUwMDNlaWQgIT0gMCwgd2UgbXVzdCB2ZXJpZnlcbi1cdFx0ICogaWQgbWFwcGluZyBhbmQgKGZvciBCUEZfQUREX0NPTlNUKSBvZmZzZXQgY29uc2lzdGVuY3kuXG4rXHRcdCAqIGlkIG1hcHBpbmcgYW5kIHRoYXQgdGhlIGxpbmsga2luZHMgYWdyZWUsIGFsb25nIHdpdGggYW55IGRlbHRhXG4rXHRcdCAqIHRoZXkgY2FycnkuXG4gXHRcdCAqXG4gXHRcdCAqICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiBcdFx0ICogfCAgICAgICAgICAgICAgICAgIHwgcm9sZC1cdTAwM2VpZCAgfCByb2xkICsgQUREX0NPTlNUIHwgcm9sZC1cdTAwM2VpZCA9PSAwIHxcbkBAIC01ODcsMTcgKzU3NCwxNiBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHQgKi9cbiBcbiBcdFx0Lypcbi1cdFx0ICogQUREX0NPTlNUIGZsYWdzIG11c3QgbWF0Y2ggZXhhY3RseTogQlBGX0FERF9DT05TVDMyIGFuZFxuLVx0XHQgKiBCUEZfQUREX0NPTlNUNjQgaGF2ZSBkaWZmZXJlbnQgbGlua2luZyBzZW1hbnRpY3MgaW5cbi1cdFx0ICogc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsIGFsdTY0IGRvZXMgbm90KSxcbi1cdFx0ICogc28gcHJ1bmluZyBhY3Jvc3MgZGlmZmVyZW50IGZsYWcgdHlwZXMgaXMgdW5zYWZlLlxuK1x0XHQgKiBUaGUgbGluayBraW5kcyBtdXN0IG1hdGNoOiBhbHUzMiBhbmQgYWx1NjQgYWRkcyBoYXZlIGRpZmZlcmVudFxuK1x0XHQgKiBsaW5raW5nIHNlbWFudGljcyBpbiBzeW5jX2xpbmtlZF9yZWdzKCkgKGFsdTMyIHplcm8tZXh0ZW5kcyxcbitcdFx0ICogYWx1NjQgZG9lcyBub3QpLCBzbyBwcnVuaW5nIGFjcm9zcyB0aGVtIGlzIHVuc2FmZS5cbiBcdFx0ICovXG4tXHRcdGlmIChyb2xkLVx1MDAzZWlkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKHJvbGQtXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpICE9IChyY3VyLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSlcbitcdFx0aWYgKHJvbGQtXHUwMDNlaWQgXHUwMDI2XHUwMDI2IChyb2xkLVx1MDAzZWFkZF9jb25zdCAhPSByY3VyLVx1MDAzZWFkZF9jb25zdCB8fFxuK1x0XHRcdFx0IHJvbGQtXHUwMDNlc3VicmVnICE9IHJjdXItXHUwMDNlc3VicmVnKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdC8qIEJvdGggaGF2ZSBvZmZzZXQgbGlua2FnZTogb2Zmc2V0cyBtdXN0IG1hdGNoICovXG4tXHRcdGlmICgocm9sZC1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkgXHUwMDI2XHUwMDI2IHJvbGQtXHUwMDNlZGVsdGEgIT0gcmN1ci1cdTAwM2VkZWx0YSlcbitcdFx0aWYgKHJvbGQtXHUwMDNlYWRkX2NvbnN0IFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWRlbHRhICE9IHJjdXItXHUwMDNlZGVsdGEpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHRpZiAoIWNoZWNrX3NjYWxhcl9pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdG51bS5jIGIva2VybmVsL2JwZi90bnVtLmNcbmluZGV4IGVjOWMzMTBjZjVkN2YuLmUxZGM1N2FmZDNkMzMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RudW0uY1xuKysrIGIva2VybmVsL2JwZi90bnVtLmNcbkBAIC0yMDAsNiArMjAwLDIxIEBAIHN0cnVjdCB0bnVtIHRudW1fY2FzdChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKVxuIFx0cmV0dXJuIGE7XG4gfVxuIFxuK3N0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKVxuK3tcbitcdHU4IHNoaWZ0ID0gNjQgLSBzaXplICogODtcbitcbitcdC8qXG4rXHQgKiBTaGlmdGluZyB0aGUgZmllbGQgdXAgdG8gdGhlIHRvcCBhbmQgYmFjayBkb3duIGFyaXRobWV0aWNhbGx5XG4rXHQgKiByZXBsaWNhdGVzIGl0cyBzaWduIGJpdCB0aHJvdWdoIHRoZSBoaWdoIGhhbGYuIEFwcGx5aW5nIHRoYXQgdG8gdGhlXG4rXHQgKiBtYXNrIGFzIHdlbGwgY2FycmllcyBvdmVyIHdoZXRoZXIgdGhlIHNpZ24gd2FzIGtub3duOiBhbiB1bmtub3duXG4rXHQgKiBzaWduIGJpdCBsZWF2ZXMgZXZlcnkgaGlnaCBiaXQgdW5rbm93bi5cbitcdCAqL1xuK1x0YSA9IHRudW1fY2FzdChhLCBzaXplKTtcbitcdHJldHVybiBUTlVNKChzNjQpKGEudmFsdWUgXHUwMDNjXHUwMDNjIHNoaWZ0KSBcdTAwM2VcdTAwM2Ugc2hpZnQsXG4rXHRcdCAgICAoczY0KShhLm1hc2sgXHUwMDNjXHUwMDNjIHNoaWZ0KSBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuK31cbitcbiBib29sIHRudW1faXNfYWxpZ25lZChzdHJ1Y3QgdG51bSBhLCB1NjQgc2l6ZSlcbiB7XG4gXHRpZiAoIXNpemUpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA5ZTc5NzUwZTI0ODA4Li45ZTYzZWRkYjkwMjNiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xOTA3LDYgKzE5MDcsOCBAQCBzdGF0aWMgdm9pZCBfX21hcmtfcmVnX2tub3duKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHU2NCBpbW0pXG4gXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpIC0gc2l6ZW9mKHJlZy1cdTAwM2V0eXBlKSk7XG4gXHRyZWctXHUwMDNlaWQgPSAwO1xuIFx0cmVnLVx1MDAzZXBhcmVudF9pZCA9IDA7XG4rXHRyZWctXHUwMDNlYWRkX2NvbnN0ID0gQUREX0NPTlNUX05PTkU7XG4rXHRyZWctXHUwMDNlc3VicmVnID0gU1VCUkVHX05PTkU7XG4gXHRfX19tYXJrX3JlZ19rbm93bihyZWcsIGltbSk7XG4gfVxuIFxuQEAgLTM0ODAsNiArMzQ4Miw4IEBAIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdHJlZy1cdTAwM2VpZCA9IDA7XG4gXHRyZWctXHUwMDNlZGVsdGEgPSAwO1xuK1x0cmVnLVx1MDAzZWFkZF9jb25zdCA9IEFERF9DT05TVF9OT05FO1xuK1x0cmVnLVx1MDAzZXN1YnJlZyA9IFNVQlJFR19OT05FO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbkBAIC0zNDkxLDggKzM0OTUsMTAgQEAgc3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiBUaGUgdmVyaWZpZXIgaXMgcHJvY2Vzc2luZyByWCA9IHJZIGluc24gYW5kXG4gXHQgKiByWS1cdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cbiBcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxuK1x0ICogQSAtXHUwMDNlc3VicmVnIGxpbmsgY2FuIGJlIHNoYXJlZDogaXQgZGVzY3JpYmVzIHNyYydzIG93biByZWxhdGlvbnNoaXBcbitcdCAqIHRvIHRoZSBzZXQsIG5vdCBhIGRlbHRhIHRvIHVud2luZC5cbiBcdCAqL1xuLVx0aWYgKHNyY19yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpXG4rXHRpZiAoc3JjX3JlZy1cdTAwM2VhZGRfY29uc3QpXG4gXHRcdGNsZWFyX3NjYWxhcl9pZChzcmNfcmVnKTtcbiBcdC8qXG4gXHQgKiBFbnN1cmUgdGhhdCBzcmNfcmVnIGhhcyBhIHZhbGlkIElEIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG9cbkBAIC0zNTAzLDYgKzM1MDksMzEgQEAgc3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHNyY19yZWctXHUwMDNlaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcbit7XG4rXHR1NjQgbWFzaztcbitcbitcdC8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi9cbitcdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy1cdTAwM2V2YXJfb2ZmLCBzaXplKTtcbitcbitcdC8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqL1xuK1x0bWFzayA9ICgodTY0KTEgXHUwMDNjXHUwMDNjIChzaXplICogOCkpIC0gMTtcbitcdGlmICgocmVnX3VtaW4ocmVnKSBcdTAwMjYgfm1hc2spID09IChyZWdfdW1heChyZWcpIFx1MDAyNiB+bWFzaykpXG4rXHRcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCByZWdfdW1pbihyZWcpIFx1MDAyNiBtYXNrLCByZWdfdW1heChyZWcpIFx1MDAyNiBtYXNrKTtcbitcdGVsc2VcbitcdFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spO1xuK1xuK1x0LypcbitcdCAqIElmIHNpemUgaXMgc21hbGxlciB0aGFuIDMyYml0IHJlZ2lzdGVyIHRoZSAzMmJpdCByZWdpc3RlclxuK1x0ICogdmFsdWVzIGFyZSBhbHNvIHRydW5jYXRlZCBzbyB3ZSBwdXNoIDY0LWJpdCBib3VuZHMgaW50b1xuK1x0ICogMzItYml0IGJvdW5kcy4gQWJvdmUgd2VyZSB0cnVuY2F0ZWQgXHUwMDNjIDMyLWJpdHMgYWxyZWFkeS5cbitcdCAqL1xuK1x0aWYgKHNpemUgXHUwMDNjIDQpXG4rXHRcdF9fbWFya19yZWczMl91bmJvdW5kZWQocmVnKTtcbitcbitcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzYXZlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxuIFx0XHRcdFx0aW50IHNwaSwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbkBAIC0zNjM0LDE1ICszNjY1LDM4IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbiBcdGlmIChyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbiBcdFx0Ym9vbCByZWdfdmFsdWVfZml0cztcbitcdFx0Ym9vbCBzdWJyZWdfbGluaztcbiBcbiBcdFx0cmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcbitcdFx0LypcbitcdFx0ICogQSBuYXJyb3dpbmcgc3BpbGwgc3RvcmVzIHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgc291cmNlLCBzb1xuK1x0XHQgKiB0aGUgc2xvdCBpcyB0aGVpciB6ZXJvLWV4dGVuc2lvbjogcmVjb3JkIGEgbG93LTMyIGxpbmtcbitcdFx0ICogcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlIHJlbGF0aW9uLCBhcyBhIDMyLWJpdCBtb3YgZG9lcy5cbitcdFx0ICogQSBzdG9yZSBuZXZlciBzaWduLWV4dGVuZHMsIHNvIHRoZXJlIGlzIG9ubHkgb25lIGtpbmQgaGVyZS5cbitcdFx0ICovXG4rXHRcdHN1YnJlZ19saW5rID0gIXJlZ192YWx1ZV9maXRzIFx1MDAyNlx1MDAyNiBzaXplID09IDQ7XG4rXG4gXHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHJlZyBoYWQgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbiBvbiBzcGlsbC4gKi9cbi1cdFx0aWYgKHJlZ192YWx1ZV9maXRzKVxuK1x0XHRpZiAocmVnX3ZhbHVlX2ZpdHMgfHwgc3VicmVnX2xpbmspXG4gXHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4tXHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbi1cdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcbitcdFx0aWYgKCFyZWdfdmFsdWVfZml0cykge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogT25seSB0aGUgbG93IEBzaXplIGJ5dGVzIHJlYWNoIG1lbW9yeSwgc28gcmVjb3JkXG4rXHRcdFx0ICogd2hhdCB0aGUgc2xvdCBob2xkcyByYXRoZXIgdGhhbiB0aGUgd2lkZXIgc291cmNlXG4rXHRcdFx0ICogaXQgY2FtZSBmcm9tLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNvZXJjZV9yZWdfdG9fc2l6ZShcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBzaXplKTtcbitcdFx0XHRpZiAoc3VicmVnX2xpbmsgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2VpZClcbitcdFx0XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuc3VicmVnID0gU1VCUkVHX1pFWFQ7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIE5vdGhpbmcgdG8gcmVsYXRlOiBlaXRoZXIgdGhlIHNvdXJjZSBoYXMgbm9cbitcdFx0XHRcdCAqIGlkIHRvIHNoYXJlLCBvciB0aGUgc3RvcmUgaXMgbmFycm93ZXIgdGhhblxuK1x0XHRcdFx0ICogdGhlIDMyIGJpdHMgYSBsaW5rIGNhbiBkZXNjcmliZS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xuK1x0XHR9XG4gXHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4gXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuQEAgLTM5MjEsNyArMzk3NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGluXG4gc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgLyogZnVuYyB3aGVyZSBzcmMgcmVnaXN0ZXIgcG9pbnRzIHRvICovXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnJlZ19zdGF0ZSxcbi1cdFx0XHRcdCAgICAgIGludCBvZmYsIGludCBzaXplLCBpbnQgZHN0X3JlZ25vKVxuK1x0XHRcdFx0ICAgICAgaW50IG9mZiwgaW50IHNpemUsIGludCBkc3RfcmVnbm8sXG4rXHRcdFx0XHQgICAgICBib29sIGlzX2xkc3gpXG4ge1xuIFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSB2c3RhdGUtXHUwMDNlZnJhbWVbdnN0YXRlLVx1MDAzZWN1cmZyYW1lXTtcbkBAIC0zOTYyLDE4ICs0MDE3LDM0IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2M9IHNwaWxsX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbi1cdFx0XHRcdGlmIChlbnYtXHUwMDNlYnBmX2NhcGFibGUgXHUwMDI2XHUwMDI2IHNpemUgPT0gNCBcdTAwMjZcdTAwMjYgc3BpbGxfc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ICAgIGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2M9IDMyKVxuK1x0XHRcdFx0Ym9vbCBuYXJyb3dpbmcgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNlIHNpemUgKiBCSVRTX1BFUl9CWVRFO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIEEgbmFycm93aW5nIGZpbGwga2VlcHMgb25seSB0aGUgc2xvdCdzIGxvdyAzMiBiaXRzLFxuK1x0XHRcdFx0ICogc28gcmVjb3JkIGEgbG93LTMyIGxpbmsgcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlXG4rXHRcdFx0XHQgKiByZWxhdGlvbiwgYXMgYSAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSBkb2VzLlxuK1x0XHRcdFx0ICogV2hpY2gga2luZCBkZXBlbmRzIG9uIGhvdyB0aGUgbG9hZCBmaWxscyB0aGUgaGlnaFxuK1x0XHRcdFx0ICogaGFsZiwgaGVuY2UgaXNfbGRzeC5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0Ym9vbCBzdWJyZWdfbGluayA9IG5hcnJvd2luZyBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0O1xuK1xuK1x0XHRcdFx0aWYgKGVudi1cdTAwM2VicGZfY2FwYWJsZSBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgIChzdWJyZWdfbGluayB8fCAoc3BpbGxfc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNiAhbmFycm93aW5nKSkpXG4gXHRcdFx0XHRcdC8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uXG4gXHRcdFx0XHRcdCAqIHdpdGggdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9uIGZpbGwuXG4gXHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCByZWcpO1xuIFx0XHRcdFx0c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKnJlZztcbiBcbi1cdFx0XHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBmaWxsLlxuLVx0XHRcdFx0ICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzZSBzaXplICogQklUU19QRVJfQllURSlcbitcdFx0XHRcdGlmIChzdWJyZWdfbGluayBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZWlkKVxuK1x0XHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnID1cbitcdFx0XHRcdFx0XHRpc19sZHN4ID8gU1VCUkVHX1NFWFQgOiBTVUJSRUdfWkVYVDtcbitcdFx0XHRcdGVsc2UgaWYgKG5hcnJvd2luZylcbitcdFx0XHRcdFx0LypcbitcdFx0XHRcdFx0ICogTm90aGluZyB0byByZWxhdGU6IGVpdGhlciB0aGUgc2xvdCBoYXNcbitcdFx0XHRcdFx0ICogbm8gaWQgdG8gc2hhcmUsIG9yIHRoZSBmaWxsIGlzIG5hcnJvd2VyXG4rXHRcdFx0XHRcdCAqIHRoYW4gdGhlIDMyIGJpdHMgYSBsaW5rIGNhbiBkZXNjcmliZS5cbitcdFx0XHRcdFx0ICogY29lcmNlX3JlZ190b19zaXplIGFkanVzdHMgdGhlIGJvdW5kcy5cbitcdFx0XHRcdFx0ICovXG4gXHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10pO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpbnQgc3BpbGxfY250ID0gMCwgemVyb19jbnQgPSAwO1xuQEAgLTQxMzgsNyArNDIwOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnXG4gICovXG4gc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgcHRyX2FyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSxcbi1cdFx0XHQgICAgaW50IGRzdF9yZWdubylcbitcdFx0XHQgICAgaW50IGRzdF9yZWdubywgYm9vbCBpc19sZHN4KVxuIHtcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XG4gXHRpbnQgZXJyO1xuQEAgLTQxNzcsNyArNDI0OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKCF2YXJfb2ZmKSB7XG4gXHRcdG9mZiArPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiBcdFx0ZXJyID0gY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxuLVx0XHRcdFx0XHRcdCBkc3RfcmVnbm8pO1xuK1x0XHRcdFx0XHRcdCBkc3RfcmVnbm8sIGlzX2xkc3gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogVmFyaWFibGUgb2Zmc2V0IHN0YWNrIHJlYWRzIG5lZWQgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmdcbiBcdFx0ICogdGhhbiBmaXhlZCBvZmZzZXQgb25lcy4gTm90ZSB0aGF0IGRzdF9yZWdubyBcdTAwM2U9IDAgb24gdGhpc1xuQEAgLTU3MDIsMzMgKzU3NzMsMTkgQEAgc3RhdGljIHZvaWQgemV4dF8zMl90b182NChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIHJlZ191MzJfbWluKHJlZyksIHJlZ191MzJfbWF4KHJlZykpO1xuIH1cbiBcbi0vKiB0cnVuY2F0ZSByZWdpc3RlciB0byBzbWFsbGVyIHNpemUgKGluIGJ5dGVzKVxuLSAqIG11c3QgYmUgY2FsbGVkIHdpdGggc2l6ZSBcdTAwM2MgQlBGX1JFR19TSVpFXG4rLypcbisgKiBUaGUgc2lnbi1leHRlbmRpbmcgY291bnRlcnBhcnQuIFNpZ25lZCBib3VuZHMgY2Fycnkgb3ZlciBkaXJlY3RseSBiZWNhdXNlXG4rICogc2lnbiBleHRlbnNpb24gaXMgbW9ub3RvbmljIG92ZXIgdGhlIHNpZ25lZCAzMi1iaXQgcmFuZ2UuXG4gICovXG4tc3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuK3N0YXRpYyB2b2lkIHNleHRfMzJfdG9fNjQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4tXHR1NjQgbWFzaztcbi1cbi1cdC8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi9cbi1cdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy1cdTAwM2V2YXJfb2ZmLCBzaXplKTtcbi1cbi1cdC8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqL1xuLVx0bWFzayA9ICgodTY0KTEgXHUwMDNjXHUwMDNjIChzaXplICogOCkpIC0gMTtcbi1cdGlmICgocmVnX3VtaW4ocmVnKSBcdTAwMjYgfm1hc2spID09IChyZWdfdW1heChyZWcpIFx1MDAyNiB+bWFzaykpXG4tXHRcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCByZWdfdW1pbihyZWcpIFx1MDAyNiBtYXNrLCByZWdfdW1heChyZWcpIFx1MDAyNiBtYXNrKTtcbi1cdGVsc2Vcbi1cdFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spO1xuLVxuLVx0LyogSWYgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMzJiaXQgcmVnaXN0ZXIgdGhlIDMyYml0IHJlZ2lzdGVyXG4tXHQgKiB2YWx1ZXMgYXJlIGFsc28gdHJ1bmNhdGVkIHNvIHdlIHB1c2ggNjQtYml0IGJvdW5kcyBpbnRvXG4tXHQgKiAzMi1iaXQgYm91bmRzLiBBYm92ZSB3ZXJlIHRydW5jYXRlZCBcdTAwM2MgMzItYml0cyBhbHJlYWR5LlxuLVx0ICovXG4tXHRpZiAoc2l6ZSBcdTAwM2MgNClcbi1cdFx0X19tYXJrX3JlZzMyX3VuYm91bmRlZChyZWcpO1xuLVxuLVx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4rXHRyZWctXHUwMDNldmFyX29mZiA9IHRudW1fc2V4dChyZWctXHUwMDNldmFyX29mZiwgNCk7XG4rXHRyZWdfc2V0X3NyYW5nZTY0KHJlZywgcmVnX3MzMl9taW4ocmVnKSwgcmVnX3MzMl9tYXgocmVnKSk7XG4gfVxuIFxuKy8qIHRydW5jYXRlIHJlZ2lzdGVyIHRvIHNtYWxsZXIgc2l6ZSAoaW4gYnl0ZXMpXG4rICogbXVzdCBiZSBjYWxsZWQgd2l0aCBzaXplIFx1MDAzYyBCUEZfUkVHX1NJWkVcbisgKi9cbiBzdGF0aWMgdm9pZCBzZXRfc2V4dDY0X2RlZmF1bHRfdmFsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuIHtcbiBcdGlmIChzaXplID09IDEpIHtcbkBAIC01NzQ4LDYgKzU4MDUsNyBAQCBzdGF0aWMgdm9pZCBzZXRfc2V4dDY0X2RlZmF1bHRfdmFsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcbiB7XG4gXHRzNjQgaW5pdF9zNjRfbWF4LCBpbml0X3M2NF9taW4sIHM2NF9tYXgsIHM2NF9taW4sIHU2NF9jdmFsO1xuK1x0czY0IGZpZWxkX3NtaW4sIGZpZWxkX3NtYXg7XG4gXHR1NjQgdG9wX3NtYXhfdmFsdWUsIHRvcF9zbWluX3ZhbHVlO1xuIFx0dTY0IG51bV9iaXRzID0gc2l6ZSAqIDg7XG4gXG5AQCAtNTc2Nyw2ICs1ODI1LDI3IEBAIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0aWYgKHNpemUgPT0gMSkge1xuK1x0XHRmaWVsZF9zbWluID0gUzhfTUlOO1xuK1x0XHRmaWVsZF9zbWF4ID0gUzhfTUFYO1xuK1x0fSBlbHNlIGlmIChzaXplID09IDIpIHtcbitcdFx0ZmllbGRfc21pbiA9IFMxNl9NSU47XG4rXHRcdGZpZWxkX3NtYXggPSBTMTZfTUFYO1xuK1x0fSBlbHNlIHtcbitcdFx0Lyogc2l6ZSA9PSA0ICovXG4rXHRcdGZpZWxkX3NtaW4gPSBTMzJfTUlOO1xuK1x0XHRmaWVsZF9zbWF4ID0gUzMyX01BWDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcmFuZ2UgYWxyZWFkeSBmaXRzIHRoZSBmaWVsZCwgc28gKHNOKXYgPT0gdiBmb3IgZXZlcnkgdmFsdWUgdGhlXG4rXHQgKiByZWdpc3RlciBjYW4gaG9sZCBhbmQgdGhlIHNpZ24gZXh0ZW5zaW9uIGNoYW5nZXMgbm90aGluZy4gVGhlIHRlc3RzXG4rXHQgKiBiZWxvdyBjYW5ub3QgcmVhY2ggdGhpcyBjYXNlIG9uY2Ugc21pbiBpcyBuZWdhdGl2ZTogYSBuZWdhdGl2ZSBzbWluXG4rXHQgKiBhbmQgYSBub24tbmVnYXRpdmUgc21heCBuZXZlciBzaGFyZSB0aGVpciBoaWdoIGJpdHMuXG4rXHQgKi9cbitcdGlmIChyZWdfc21pbihyZWcpIFx1MDAzZT0gZmllbGRfc21pbiBcdTAwMjZcdTAwMjYgcmVnX3NtYXgocmVnKSBcdTAwM2M9IGZpZWxkX3NtYXgpXG4rXHRcdHJldHVybjtcbitcbiBcdHRvcF9zbWF4X3ZhbHVlID0gKCh1NjQpcmVnX3NtYXgocmVnKSBcdTAwM2VcdTAwM2UgbnVtX2JpdHMpIFx1MDAzY1x1MDAzYyBudW1fYml0cztcbiBcdHRvcF9zbWluX3ZhbHVlID0gKCh1NjQpcmVnX3NtaW4ocmVnKSBcdTAwM2VcdTAwM2UgbnVtX2JpdHMpIFx1MDAzY1x1MDAzYyBudW1fYml0cztcbiBcbkBAIC02NjAxLDcgKzY2ODAsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFxuIFx0XHRpZiAodCA9PSBCUEZfUkVBRClcbiBcdFx0XHRlcnIgPSBjaGVja19zdGFja19yZWFkKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLFxuLVx0XHRcdFx0XHQgICAgICAgdmFsdWVfcmVnbm8pO1xuK1x0XHRcdFx0XHQgICAgICAgdmFsdWVfcmVnbm8sIGlzX2xkc3gpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGUoZW52LCByZWcsIG9mZiwgc2l6ZSxcbiBcdFx0XHRcdFx0XHR2YWx1ZV9yZWdubywgaW5zbl9pZHgpO1xuQEAgLTY2OTgsMTMgKzY3NzcsMTUgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcbiBcdFx0XHQgKiBTaWduLWV4dGVuc2lvbiBjYW4gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZSByZWxhdGl2ZVxuIFx0XHRcdCAqIHRvIGEgc2NhbGFyIGl0IGlzIGxpbmtlZCB3aXRoIGJ5IGlkIChlLmcuIGEgemVyby1cbiBcdFx0XHQgKiBleHRlbmRpbmcgZmlsbCBvZiB0aGUgc2FtZSBzcGlsbGVkIHN0YWNrIHNsb3QpLCB0aHVzXG4tXHRcdFx0ICogZHJvcCB0aGUgc2hhcmVkIGlkIGluIHRoYXQgY2FzZS5cbitcdFx0XHQgKiBkcm9wIHRoZSBzaGFyZWQgaWQgaW4gdGhhdCBjYXNlLiBBIC1cdTAwM2VzdWJyZWcgbGluayBpc1xuK1x0XHRcdCAqIHRoZSBleGNlcHRpb246IGl0IGFscmVhZHkgcmVjb3JkcyB0aGF0IG9ubHkgdGhlIGxvd1xuK1x0XHRcdCAqIDMyIGJpdHMgYXJlIHNoYXJlZCwgYW5kIGhvdyB0aGUgaGlnaCBoYWxmIGZvbGxvd3MuXG4gXHRcdFx0ICovXG4gXHRcdFx0Ym9vbCBub19zZXh0ID0gcmVnX3VtYXgoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pIFx1MDAzY1xuIFx0XHRcdFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgKHNpemUgKiBCSVRTX1BFUl9CWVRFIC0gMSkpO1xuIFxuIFx0XHRcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSwgc2l6ZSk7XG4tXHRcdFx0aWYgKCFub19zZXh0KVxuK1x0XHRcdGlmICghbm9fc2V4dCBcdTAwMjZcdTAwMjYgIXJlZ3NbdmFsdWVfcmVnbm9dLnN1YnJlZylcbiBcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNjExNyw3ICsxNjE5OCw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRvZmYgPSAtb2ZmO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChkc3RfcmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSB7XG4rXHRcdGlmIChkc3RfcmVnLVx1MDAzZWFkZF9jb25zdCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhlIHJlZ2lzdGVyIGFscmVhZHkgd2VudCB0aHJvdWdoIHJYICs9IHZhbFxuIFx0XHRcdCAqIHdlIGNhbm5vdCBhY2N1bXVsYXRlIGFub3RoZXIgdmFsIGludG8gcngtXHUwMDNlb2ZmLlxuQEAgLTE2MTI2LDkgKzE2MjA3LDkgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpZiAoYWx1MzIpXG4tXHRcdFx0XHRkc3RfcmVnLVx1MDAzZWlkIHw9IEJQRl9BRERfQ09OU1QzMjtcbitcdFx0XHRcdGRzdF9yZWctXHUwMDNlYWRkX2NvbnN0ID0gQUREX0NPTlNUXzMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdGRzdF9yZWctXHUwMDNlaWQgfD0gQlBGX0FERF9DT05TVDY0O1xuK1x0XHRcdFx0ZHN0X3JlZy1cdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfNjQ7XG4gXHRcdFx0ZHN0X3JlZy1cdTAwM2VkZWx0YSA9IG9mZjtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbkBAIC0xNjIyMCwxMiArMTYzMDEsMjMgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNyY19yZWctXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUpIHtcbiBcdFx0XHRcdFx0XHRib29sIG5vX3NleHQ7XG4rXHRcdFx0XHRcdFx0LypcbitcdFx0XHRcdFx0XHQgKiBBIDMyLWJpdCBzaWduIGV4dGVuc2lvbiBrZWVwcyB0aGUgbG93IDMyXG4rXHRcdFx0XHRcdFx0ICogYml0cywgc28gcmVjb3JkIGEgbG93LTMyIGxpbmsgYXMgdGhlXG4rXHRcdFx0XHRcdFx0ICogemVyby1leHRlbmRpbmcgbW92IGRvZXMuIEEgc2VsZi1tb3ZcbitcdFx0XHRcdFx0XHQgKiBxdWFsaWZpZXMgb25seSBpZiBzcmMgaXMgYWxyZWFkeSBsaW5rZWQuXG4rXHRcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdFx0Ym9vbCBzdWJyZWdfbGluayA9IChpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMykgPT0gNCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0XHRcdFx0ICAgKHNyY19yZWcgIT0gZHN0X3JlZyB8fFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgc3JjX3JlZy1cdTAwM2VpZCk7XG4gXG4gXHRcdFx0XHRcdFx0bm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuLVx0XHRcdFx0XHRcdGlmIChub19zZXh0KVxuK1x0XHRcdFx0XHRcdGlmIChub19zZXh0IHx8IHN1YnJlZ19saW5rKVxuIFx0XHRcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbi1cdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4rXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0IFx1MDAyNlx1MDAyNiBzdWJyZWdfbGluayBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbitcdFx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnID0gU1VCUkVHX1NFWFQ7XG4rXHRcdFx0XHRcdFx0ZWxzZSBpZiAoIW5vX3NleHQpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4gXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbkBAIC0xNjI0MiwxNSArMTYzMzQsMjIgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0fSBlbHNlIGlmIChzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XG4gXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZW9mZiA9PSAwKSB7XG4gXHRcdFx0XHRcdFx0Ym9vbCBpc19zcmNfcmVnX3UzMiA9IGdldF9yZWdfd2lkdGgoc3JjX3JlZykgXHUwMDNjPSAzMjtcbitcdFx0XHRcdFx0XHQvKlxuK1x0XHRcdFx0XHRcdCAqIEEgd2lkZSBzcmMgc2hhcmVzIG9ubHkgaXRzIGxvdyAzMiBiaXRzLiBBXG4rXHRcdFx0XHRcdFx0ICogZnVsbCBsaW5rIHdvdWxkIGxldCBkc3QncyBbMCwgVTMyX01BWF1cbitcdFx0XHRcdFx0XHQgKiBwcm9wYWdhdGUgb250byBzcmMncyB1bmtub3duIGhpZ2ggYml0cywgc29cbitcdFx0XHRcdFx0XHQgKiByZWNvcmQgYSBsb3ctMzItb25seSBsaW5rIGluc3RlYWQuIEFcbitcdFx0XHRcdFx0XHQgKiBzZWxmLW1vdiBoYXMgbm90aGluZyB0byBsaW5rLlxuK1x0XHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRcdGJvb2wgc3VicmVnX2xpbmsgPSAhaXNfc3JjX3JlZ191MzIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdFx0XHRcdCAgIHNyY19yZWcgIT0gZHN0X3JlZztcbiBcbi1cdFx0XHRcdFx0XHRpZiAoaXNfc3JjX3JlZ191MzIpXG4rXHRcdFx0XHRcdFx0aWYgKGlzX3NyY19yZWdfdTMyIHx8IHN1YnJlZ19saW5rKVxuIFx0XHRcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbi1cdFx0XHRcdFx0XHQvKiBNYWtlIHN1cmUgSUQgaXMgY2xlYXJlZCBpZiBzcmNfcmVnIGlzIG5vdCBpbiB1MzJcbi1cdFx0XHRcdFx0XHQgKiByYW5nZSBvdGhlcndpc2UgZHN0X3JlZyBtaW4vbWF4IGNvdWxkIGJlIGluY29ycmVjdGx5XG4tXHRcdFx0XHRcdFx0ICogcHJvcGFnYXRlZCBpbnRvIHNyY19yZWcgYnkgc3luY19saW5rZWRfcmVncygpXG4tXHRcdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdFx0aWYgKCFpc19zcmNfcmVnX3UzMilcbitcdFx0XHRcdFx0XHRpZiAoc3VicmVnX2xpbmsgXHUwMDI2XHUwMDI2IHNyY19yZWctXHUwMDNlaWQpXG4rXHRcdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZyA9IFNVQlJFR19aRVhUO1xuK1x0XHRcdFx0XHRcdGVsc2UgaWYgKCFpc19zcmNfcmVnX3UzMilcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0XHQvKiBjYXNlOiBXMSA9IChzOCwgczE2KVcyICovXG5AQCAtMTcwNjcsNyArMTcxNjYsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdFxuIHtcbiBcdHN0cnVjdCBsaW5rZWRfcmVnICplO1xuIFxuLVx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCAocmVnLVx1MDAzZWlkIFx1MDAyNiB+QlBGX0FERF9DT05TVCkgIT0gaWQpXG4rXHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZy1cdTAwM2VpZCAhPSBpZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0ZSA9IGxpbmtlZF9yZWdzX3B1c2gocmVnX3NldCk7XG5AQCAtMTcwOTUsNyArMTcxOTQsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR1MTYgbGl2ZV9yZWdzO1xuIFx0aW50IGksIGo7XG4gXG4tXHRpZCA9IGlkIFx1MDAyNiB+QlBGX0FERF9DT05TVDtcbiBcdGZvciAoaSA9IHZzdGF0ZS1cdTAwM2VjdXJmcmFtZTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIFx0XHRsaXZlX3JlZ3MgPSBhdXhbYnBmX2ZyYW1lX2luc25faWR4KHZzdGF0ZSwgaSldLmxpdmVfcmVnc19iZWZvcmU7XG4gXHRcdGZ1bmMgPSB2c3RhdGUtXHUwMDNlZnJhbWVbaV07XG5AQCAtMTcxMTQsNiArMTcyMTIsNDAgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFNldCBAcmVnIHRvIHRoZSB6ZXJvLWV4dGVuc2lvbiBvZiBAa25vd25fcmVnJ3MgbG93IDMyIGJpdHM6IGl0IHNoYXJlcyB0aG9zZVxuKyAqIGJpdHMgYW5kIGl0cyBoaWdoIGhhbGYgaXMgemVyby4gQ29weSB0aGUgYmFzZSB0byBrZWVwIGl0cyBwcmVjaXNlIGxvdy0zMlxuKyAqIHRudW0sIHRoZW4gcmUtYXBwbHkgdGhlIHpleHRfMzJfdG9fNjQoKSB0aGUgMzItYml0IG1vdiBpdHNlbGYgdXNlZC5cbisgKiBAcmVnLVx1MDAzZWlkIGFuZCAtXHUwMDNlZGVsdGEgYWxyZWFkeSBlcXVhbCBAa25vd25fcmVnJ3M7IG9ubHkgLVx1MDAzZXN1YnJlZyBpcyBpdHMgb3duLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJlY29uc3RydWN0X3pleHQzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqa25vd25fcmVnKVxuK3tcbitcdGVudW0gYnBmX3N1YnJlZyBzdWJyZWcgPSByZWctXHUwMDNlc3VicmVnO1xuK1xuK1x0KnJlZyA9ICprbm93bl9yZWc7XG4rXHRyZWctXHUwMDNlc3VicmVnID0gc3VicmVnO1xuK1x0emV4dF8zMl90b182NChyZWcpO1xuK1x0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4rfVxuK1xuKy8qXG4rICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0LiBOb3RlIHRoaXMgZHJpdmVzIG9mZiB0aGUgYmFzZSdzIDMyLWJpdFxuKyAqIHJhbmdlLCBub3QgY29lcmNlX3JlZ190b19zaXplX3N4KCk6IGFmdGVyIGEgMzItYml0IGNvbXBhcmUgaXQgaXMgdGhlIGxvd1xuKyAqIGhhbGYgdGhhdCBoYXMgYmVlbiBuYXJyb3dlZCwgYW5kIHRoZSA2NC1iaXQgYm91bmRzIHN0aWxsIGRlc2NyaWJlIHRoZVxuKyAqIGJhc2UncyBoaWdoIGJpdHMsIHdoaWNoIGFyZSBub3Qgb3Vycy5cbisgKi9cbitzdGF0aWMgdm9pZCByZWNvbnN0cnVjdF9zZXh0MzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZylcbit7XG4rXHRlbnVtIGJwZl9zdWJyZWcgc3VicmVnID0gcmVnLVx1MDAzZXN1YnJlZztcbitcbitcdCpyZWcgPSAqa25vd25fcmVnO1xuK1x0cmVnLVx1MDAzZXN1YnJlZyA9IHN1YnJlZztcbitcdHNleHRfMzJfdG9fNjQocmVnKTtcbitcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xuK31cbitcbiAvKiBGb3IgYWxsIFIgaW4gbGlua2VkX3JlZ3MsIGNvcHkga25vd25fcmVnIHJhbmdlIGludG8gUlxuICAqIGlmIFItXHUwMDNlaWQgPT0ga25vd25fcmVnLVx1MDAzZWlkLlxuICAqL1xuQEAgLTE3MTMxLDE4ICsxNzI2Myw0NCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdFx0OiBcdTAwMjZ2c3RhdGUtXHUwMDNlZnJhbWVbZS1cdTAwM2VmcmFtZW5vXS1cdTAwM2VzdGFja1tlLVx1MDAzZXNwaV0uc3BpbGxlZF9wdHI7XG4gXHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnID09IGtub3duX3JlZylcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKChyZWctXHUwMDNlaWQgXHUwMDI2IH5CUEZfQUREX0NPTlNUKSAhPSAoa25vd25fcmVnLVx1MDAzZWlkIFx1MDAyNiB+QlBGX0FERF9DT05TVCkpXG4rXHRcdGlmIChyZWctXHUwMDNlaWQgIT0ga25vd25fcmVnLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHQvKlxuK1x0XHQgKiBBIC1cdTAwM2VzdWJyZWcgcmVnaXN0ZXIgc2hhcmVzIG9ubHkgdGhlIGJhc2UncyBsb3cgMzIgYml0cywgc28gaXRcbitcdFx0ICogaXMgcmVidWlsdCByYXRoZXIgdGhhbiBjb3BpZWQuIE5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGFcbitcdFx0ICogZGVsdGEsIHNvIHNraXAgaWYgZWl0aGVyIHNpZGUgaGFzIG9uZSAoc291bmQsIGxlc3MgcHJlY2lzZSkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmVnLVx1MDAzZXN1YnJlZykge1xuK1x0XHRcdGlmIChyZWctXHUwMDNlYWRkX2NvbnN0IHx8IGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRpZiAocmVnLVx1MDAzZXN1YnJlZyA9PSBTVUJSRUdfWkVYVClcbitcdFx0XHRcdHJlY29uc3RydWN0X3pleHQzMihyZWcsIGtub3duX3JlZyk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmVjb25zdHJ1Y3Rfc2V4dDMyKHJlZywga25vd25fcmVnKTtcbitcdFx0XHRpZiAoZS1cdTAwM2Vpc19yZWcpXG4rXHRcdFx0XHRtYXJrX3JlZ19zY3JhdGNoZWQoZW52LCBlLVx1MDAzZXJlZ25vKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgZS1cdTAwM2VzcGkpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSByZXZlcnNlOiBrbm93bl9yZWcga25vd3Mgb25seSBpdHMgbG93IDMyIGJpdHMsIHdoaWNoIHNheVxuK1x0XHQgKiBub3RoaW5nIGFib3V0IHJlZydzIGhpZ2ggaGFsZi5cbitcdFx0ICovXG4rXHRcdGlmIChrbm93bl9yZWctXHUwMDNlc3VicmVnKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIG1peGVkIDMyLzY0LWJpdCBsaW5rczogdGhlIGRlbHRhIHJlbGF0aW9uc2hpcCBkb2Vzbid0XG4gXHRcdCAqIGhvbGQgYWNyb3NzIGRpZmZlcmVudCBBTFUgd2lkdGhzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCgocmVnLVx1MDAzZWlkIF4ga25vd25fcmVnLVx1MDAzZWlkKSBcdTAwMjYgQlBGX0FERF9DT05TVCkgPT0gQlBGX0FERF9DT05TVClcbitcdFx0aWYgKHJlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2IGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZWctXHUwMDNlYWRkX2NvbnN0ICE9IGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICgoIShyZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIFx1MDAyNlx1MDAyNiAhKGtub3duX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkpIHx8XG4rXHRcdGlmICgoIXJlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2ICFrbm93bl9yZWctXHUwMDNlYWRkX2NvbnN0KSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHR9IGVsc2Uge1xuK1x0XHRcdGVudW0gYnBmX2FkZF9jb25zdCBzYXZlZF9hZGRfY29uc3QgPSByZWctXHUwMDNlYWRkX2NvbnN0O1xuIFx0XHRcdHMzMiBzYXZlZF9vZmYgPSByZWctXHUwMDNlZGVsdGE7XG4gXHRcdFx0dTMyIHNhdmVkX2lkID0gcmVnLVx1MDAzZWlkO1xuIFxuQEAgLTE3MTUyLDE2ICsxNzMxMCwxOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdC8qIHJlZyA9IGtub3duX3JlZzsgcmVnICs9IGRlbHRhICovXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuLVx0XHRcdCAqIHdpbGwgYmUgaW5jb3JyZWN0LlxuK1x0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgYWRkX2NvbnN0LCBvdGhlcndpc2UgYW5vdGhlclxuK1x0XHRcdCAqIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZWctXHUwMDNlZGVsdGEgPSBzYXZlZF9vZmY7XG4gXHRcdFx0cmVnLVx1MDAzZWlkID0gc2F2ZWRfaWQ7XG4rXHRcdFx0cmVnLVx1MDAzZWFkZF9jb25zdCA9IHNhdmVkX2FkZF9jb25zdDtcbiBcbiBcdFx0XHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbiBcdFx0XHRzY2FsYXJfbWluX21heF9hZGQocmVnLCBcdTAwMjZmYWtlX3JlZyk7XG4gXHRcdFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX2FkZChyZWctXHUwMDNldmFyX29mZiwgZmFrZV9yZWcudmFyX29mZik7XG4tXHRcdFx0aWYgKChyZWctXHUwMDNlaWQgfCBrbm93bl9yZWctXHUwMDNlaWQpIFx1MDAyNiBCUEZfQUREX0NPTlNUMzIpXG4rXHRcdFx0aWYgKHJlZy1cdTAwM2VhZGRfY29uc3QgPT0gQUREX0NPTlNUXzMyIHx8XG4rXHRcdFx0ICAgIGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QgPT0gQUREX0NPTlNUXzMyKVxuIFx0XHRcdFx0emV4dF8zMl90b182NChyZWcpO1xuIFx0XHRcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xuIFx0XHR9XG5AQCAtMTgyNTUsNyArMTg0MTUsNyBAQCB2b2lkIGJwZl9jbGVhcl9zaW5ndWxhcl9pZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFyZWctXHUwMDNlaWQpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlkc2V0X2NudF9pbmMoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpO1xuK1x0XHRpZHNldF9jbnRfaW5jKGlkc2V0LCByZWctXHUwMDNlaWQpO1xuIFx0fSkpO1xuIFxuIFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoc3QsIGZ1bmMsIHJlZywgKHtcbkBAIC0xODI2Myw3ICsxODQyMyw3IEBAIHZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXJlZy1cdTAwM2VpZClcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXG4rXHRcdGlmIChpZHNldF9jbnRfZ2V0KGlkc2V0LCByZWctXHUwMDNlaWQpID09IDEpXG4gXHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG4gXHR9KSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IGViODhkOWNlNmMzNDguLjQ1YmZhMDJhNTMzODAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0yNjksNiArMjY5LDE0IEBAXG4gI2RlZmluZSBDQU5fVVNFX0JQRl9TVFxuICNlbmRpZlxuIFxuKyNpZiAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fFx0XFxcbisgICAgIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8XHRcdFxcXG4rICAgICBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtKSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkgfHxcdFxcXG4rICAgICBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfbG9vbmdhcmNoKSkgXHUwMDI2XHUwMDI2XHRcdFx0XHRcXFxuK1x0KF9fY2xhbmdfbWFqb3JfXyBcdTAwM2U9IDE4IHx8IGRlZmluZWQoX19CUEZfRkVBVFVSRV9NT1ZTWCkpXG4rI2RlZmluZSBDQU5fVVNFX01PVlNYXG4rI2VuZGlmXG4rXG4gI2lmIF9fY2xhbmdfbWFqb3JfXyBcdTAwM2U9IDE4IFx1MDAyNlx1MDAyNiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0XFxcbiBcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8XHRcdFx0XHRcXFxuIFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG5pbmRleCBkZjhkNTMwOTY1N2UxLi5iNGVhZGJkODgzNTdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBfX25ha2VkIHZvaWQgc3ViMzJfZnVsbF9vdmVyZmxvdyh2b2lkKVxuIFNFQyhcInNvY2tldFwiKVxuIF9fZGVzY3JpcHRpb24oXCIzMi1iaXQgc3VidHJhY3Rpb24sIHBhcnRpYWwgb3ZlcmZsb3csIHJlc3VsdCBpbiB1bmJvdW5kZWQgdTMyIGJvdW5kc1wiKVxuIF9fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuLV9fbXNnKFwiMzogKDFjKSB3MyAtPSB3MiB7ey4qfX0gUjM9c2NhbGFyKHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKVwiKVxuK19fbXNnKFwiMzogKDFjKSB3MyAtPSB3MiB7ey4qfX0gUjM9c2NhbGFyKGlkPXt7WzAtOV0rfX0tMS5sbzMyLHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKVwiKVxuIF9fcmV0dmFsKDApXG4gX19uYWtlZCB2b2lkIHN1YjMyX3BhcnRpYWxfb3ZlcmZsb3codm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xpbmtlZF9zY2FsYXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuY1xuaW5kZXggZDU3MWZiZmM4NmEzYS4uY2E3NDcxZjAyOTNkZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuY1xuQEAgLTM0OSw4ICszNDksOCBAQCBsMF8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gfVxuIFxuIC8qXG4tICogVGVzdCB0aGF0IHN5bmNfbGlua2VkX3JlZ3MoKSBjaGVja3MgcmVnLVx1MDAzZWlkICh0aGUgbGlua2VkIHRhcmdldCByZWdpc3Rlcilcbi0gKiBmb3IgQlBGX0FERF9DT05TVDMyIHJhdGhlciB0aGFuIGtub3duX3JlZy1cdTAwM2VpZCAodGhlIGJyYW5jaCByZWdpc3RlcikuXG4rICogVGVzdCB0aGF0IHN5bmNfbGlua2VkX3JlZ3MoKSBjaGVja3MgdGhlIGxpbmtlZCB0YXJnZXQgcmVnaXN0ZXIgKHJlZykgZm9yXG4rICogQUREX0NPTlNUXzMyIHJhdGhlciB0aGFuIHRoZSBicmFuY2ggcmVnaXN0ZXIgKGtub3duX3JlZykuXG4gICovXG4gU0VDKFwic29ja2V0XCIpXG4gX19zdWNjZXNzXG5AQCAtMzYwLDcgKzM2MCw3IEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX3pleHRfbGlua2VkX3JlZyh2b2lkKVxuIFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiBcdHc2ID0gdzA7XHRcdC8qIHI2IGluIFswLCAweEZGRkZGRkZGXSAqL1x0XFxcbiBcdHI3ID0gcjY7XHRcdC8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqL1x0XFxcbi1cdHc3ICs9IDE7XHRcdC8qIGFsdTMyOiByNy5pZCB8PSBCUEZfQUREX0NPTlNUMzIgKi8gXFxcbitcdHc3ICs9IDE7XHRcdC8qIEFERF9DT05TVF8zMiBkZWx0YSAqLyBcXFxuIFx0cjggPSAweEZGRkZmZmZmIGxsO1x0XHRcdFx0XHRcXFxuIFx0aWYgcjYgXHUwMDNjIHI4IGdvdG8gbDBfJT07XHRcdFx0XHRcdFxcXG4gXHQvKiByNiBpbiBbMHhGRkZGRkZGRiwgMHhGRkZGRkZGRl0gKi9cdFx0XHRcXFxuQEAgLTM4MSw3ICszODEsNyBAQCBsMF8lPTpcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiAvKlxuICAqIFRlc3QgdGhhdCBzeW5jX2xpbmtlZF9yZWdzKCkgc2tpcHMgcHJvcGFnYXRpb24gd2hlbiBvbmUgcmVnaXN0ZXIgdXNlZFxuLSAqIGFsdTMyIChCUEZfQUREX0NPTlNUMzIpIGFuZCB0aGUgb3RoZXIgdXNlZCBhbHU2NCAoQlBGX0FERF9DT05TVDY0KS5cbisgKiBhbHUzMiAoQUREX0NPTlNUXzMyKSBhbmQgdGhlIG90aGVyIHVzZWQgYWx1NjQgKEFERF9DT05TVF82NCkuXG4gICogVGhlIGRlbHRhIHJlbGF0aW9uc2hpcCBkb2Vzbid0IGhvbGQgYWNyb3NzIGRpZmZlcmVudCBBTFUgd2lkdGhzLlxuICAqL1xuIFNFQyhcInNvY2tldFwiKVxuQEAgLTM5MiwxMyArMzkyLDEzIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX2FsdTY0X2Nyb3NzX3R5cGUodm9pZClcbiBcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4gXHR3NiA9IHcwO1x0XHQvKiByNiBpbiBbMCwgMHhGRkZGRkZGRl0gKi9cdFxcXG4gXHRyNyA9IHI2O1x0XHQvKiBsaW5rZWQ6IHNhbWUgaWQgYXMgcjYgKi9cdFxcXG4tXHR3NyArPSAxO1x0XHQvKiBhbHUzMjogQlBGX0FERF9DT05TVDMyLCBkZWx0YSA9IDEgKi8gXFxcbitcdHc3ICs9IDE7XHRcdC8qIEFERF9DT05TVF8zMiBkZWx0YSAqLyBcXFxuIFx0cjggPSByNjtcdFx0LyogbGlua2VkOiBzYW1lIGlkIGFzIHI2ICovXHRcXFxuLVx0cjggKz0gMjtcdFx0LyogYWx1NjQ6IEJQRl9BRERfQ09OU1Q2NCwgZGVsdGEgPSAyICovIFxcXG4rXHRyOCArPSAyO1x0XHQvKiBBRERfQ09OU1RfNjQgZGVsdGEgKi8gXFxcbiBcdHI5ID0gMHhGRkZGZmZmZiBsbDtcdFx0XHRcdFx0XFxcbiBcdGlmIHI3IFx1MDAzYyByOSBnb3RvIGwwXyU9O1x0XHRcdFx0XHRcXFxuIFx0LyogcjcgPSAweEZGRkZGRkZGICovXHRcdFx0XHRcdFxcXG4tXHQvKiBzeW5jOiBrbm93bl9yZWc9cjcgKEFERF9DT05TVDMyKSwgcmVnPXI4IChBRERfQ09OU1Q2NCkgKi8gXFxcbitcdC8qIHN5bmM6IGtub3duX3JlZz1yNyAoQUREX0NPTlNUXzMyKSwgcmVnPXI4IChBRERfQ09OU1RfNjQpICovIFxcXG4gXHQvKiBXaXRob3V0IGZpeDogcjggPSB6ZXh0KDB4RkZGRkZGRkYgKyAxKSA9IDAgKi9cdFxcXG4gXHQvKiBXaXRoIGZpeDogcjggc3RheXMgWzIsIDB4MTAwMDAwMDAxXSAocjggXHUwMDNlPSAyKSAqL1x0XFxcbiBcdGlmIHI4IFx1MDAzZSAwIGdvdG8gbDFfJT07XHRcdFx0XHRcdFxcXG5AQCAtNDE2LDcgKzQxNiw3IEBAIGwwXyU9Olx0XHRcdFx0XHRcdFx0XHRcXFxuIC8qXG4gICogVGVzdCB0aGF0IHJlZ3NhZmUoKSBwcmV2ZW50cyBwcnVuaW5nIHdoZW4gdHdvIHBhdGhzIHJlYWNoIHRoZSBzYW1lIHByb2dyYW1cbiAgKiBwb2ludCB3aXRoIGxpbmtlZCByZWdpc3RlcnMgY2FycnlpbmcgZGlmZmVyZW50IEFERF9DT05TVCBmbGFncyAob25lXG4tICogQlBGX0FERF9DT05TVDMyIGZyb20gYWx1MzIsIGFub3RoZXIgQlBGX0FERF9DT05TVDY0IGZyb20gYWx1NjQpLlxuKyAqIEFERF9DT05TVF8zMiBmcm9tIGFsdTMyLCBhbm90aGVyIEFERF9DT05TVF82NCBmcm9tIGFsdTY0KS5cbiAgKi9cbiBTRUMoXCJzb2NrZXRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuQEAgLTQzMSwxMSArNDMxLDExIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX2FsdTY0X3JlZ3NhZmVfcHJ1bmluZyh2b2lkKVxuIFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiBcdGlmIHIwIFx1MDAzZSAwIGdvdG8gbF9wYXRoYl8lPTtcdFx0XHRcdFxcXG4gXHQvKiBQYXRoIEE6IGFsdTMyICovXHRcdFx0XHRcdFxcXG4tXHR3NyArPSAxO1x0XHQvKiBCUEZfQUREX0NPTlNUMzIsIGRlbHRhID0gMSAqL1xcXG4rXHR3NyArPSAxO1x0XHQvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi9cXFxuIFx0Z290byBsX21lcmdlXyU9O1x0XHRcdFx0XHRcXFxuIGxfcGF0aGJfJT06XHRcdFx0XHRcdFx0XHRcXFxuIFx0LyogUGF0aCBCOiBhbHU2NCAqL1x0XHRcdFx0XHRcXFxuLVx0cjcgKz0gMTtcdFx0LyogQlBGX0FERF9DT05TVDY0LCBkZWx0YSA9IDEgKi9cXFxuK1x0cjcgKz0gMTtcdFx0LyogQUREX0NPTlNUXzY0IGRlbHRhICovXFxcbiBsX21lcmdlXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiBcdC8qIE1lcmdlIHBvaW50OiByZWdzYWZlKCkgY29tcGFyZXMgcGF0aCBCIGFnYWluc3QgY2FjaGVkIHBhdGggQS4gKi8gXFxcbiBcdC8qIE5hcnJvdyByNiB0byB0cmlnZ2VyIHN5bmNfbGlua2VkX3JlZ3MgZm9yIHI3ICovXHRcXFxuQEAgLTU5Myw3ICs1OTMsNyBAQCBsX2V4aXRfJT06XHRcdFx0XHRcdFx0XHRcXFxuIH1cbiBcbiAvKlxuLSAqIFRlc3QgdGhhdCBzdGFsZSBkZWx0YSBmcm9tIGEgY2xlYXJlZCBCUEZfQUREX0NPTlNUIGRvZXMgbm90IGxlYWtcbisgKiBUZXN0IHRoYXQgc3RhbGUgZGVsdGEgZnJvbSBhIGNsZWFyZWQgQUREX0NPTlNUXyogZG9lcyBub3QgbGVha1xuICAqIHRocm91Z2ggYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KCkgaW50byBhIG5ldyBpZCwgY2F1c2luZ1xuICAqIHN5bmNfbGlua2VkX3JlZ3MoKSB0byBjb21wdXRlIGFuIGluY29ycmVjdCBvZmZzZXQuXG4gICovXG5AQCAtNjA1LDEwICs2MDUsMTAgQEAgX19uYWtlZCB2b2lkIHNjYWxhcnNfc3RhbGVfZGVsdGFfZnJvbV9jbGVhcmVkX2lkKHZvaWQpXG4gXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbiBcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4gXHRyNiA9IHIwO1x0XHQvKiByNiB1bmtub3duLCBnZXRzIGlkIEEgKi9cdFxcXG4tXHRyNiArPSA1O1x0XHQvKiBpZCBBfEFERF9DT05TVCwgZGVsdGEgNSAqL1x0XFxcbitcdHI2ICs9IDU7XHRcdC8qIGlkIEEsIEFERF9DT05TVF82NCBkZWx0YSAqL1x0XFxcbiBcdHI2IF49IDA7XHRcdC8qIGlkIGNsZWFyZWQ7IGRlbHRhIHN0YXlzIDUgKi9cdFxcXG4gXHRyOCA9IHI2O1x0XHQvKiBuZXcgaWQgQiwgc3RhbGUgZGVsdGEgNSAqL1x0XFxcbi1cdHI4ICs9IDM7XHRcdC8qIGlkIEJ8QUREX0NPTlNULCBkZWx0YSAzICovXHRcXFxuK1x0cjggKz0gMztcdFx0LyogaWQgQiwgQUREX0NPTlNUXzY0IGRlbHRhICovXHRcXFxuIFx0cjkgPSByNjtcdFx0LyogaWQgQiwgc3RhbGUgZGVsdGEgNSAqL1x0XFxcbiBcdGlmIHI5ICE9IDEwIGdvdG8gbF9leGl0XyU9O1x0XHRcdFx0XFxcbiBcdC8qIEJ1ZzogcjggPSAxMCsoMy01KSA9IDg7IEZpeDogcjggPSAxMCsoMy0wKSA9IDEzICovXHRcXFxuQEAgLTY0OCwxMCArNjQ4LDEwIEBAIGxfZXhpdF8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gfVxuIFxuIC8qXG4tICogVGVzdCB0aGF0IHJlZ3NhZmUoKSB2ZXJpZmllcyBiYXNlX2lkIGNvbnNpc3RlbmN5IGZvciBCUEZfQUREX0NPTlNUXG4rICogVGVzdCB0aGF0IHJlZ3NhZmUoKSB2ZXJpZmllcyBiYXNlX2lkIGNvbnNpc3RlbmN5IGZvciBBRERfQ09OU1RfKlxuICAqIGxpbmtlZCBzY2FsYXJzIGR1cmluZyBzdGF0ZSBwcnVuaW5nLlxuICAqXG4tICogVGhlIGZhbHNlIGJyYW5jaCAoZXhwbG9yZWQgZmlyc3QpIGxpbmtzIFIzIHRvIFIyIHZpYSBBRERfQ09OU1QuXG4rICogVGhlIGZhbHNlIGJyYW5jaCAoZXhwbG9yZWQgZmlyc3QpIGxpbmtzIFIzIHRvIFIyIHZpYSBBRERfQ09OU1RfNjQuXG4gICogVGhlIHRydWUgYnJhbmNoIChydW50aW1lIHBhdGgpIGxpbmtzIFIzIHRvIFI0ICh1bnJlbGF0ZWQgYmFzZV9pZCkuXG4gICogQXQgdGhlIG1lcmdlIHBvaW50LCBwcnVuaW5nIG11c3QgZmFpbCBiZWNhdXNlIHRoZSBsaW5rYWdlIHRvcG9sb2d5XG4gICogZGlmZmVycy5cbkBAIC02NzUsNyArNjc1LDcgQEAgX19uYWtlZCB2b2lkIGFkZF9jb25zdF9iYXNlX2lkX3BydW5pbmcodm9pZClcbiBcdHIyID0gcjA7XHRcdFx0XHRcdFx0XFxcbiBcdHIyIFx1MDAyNj0gMHhmZjtcdFx0LyogUjIgPSBzY2FsYXIoaWQ9QSkgWzAsMjU1XSAqL1x0XFxcbiBcdHIzID0gcjI7XHRcdC8qIFIzIGxpbmtlZCB0byBSMiAoaWQ9QSkgKi9cdFxcXG4tXHRyMyArPSAxMDtcdFx0LyogUjMgaWQ9QXxBRERfQ09OU1QsIGRlbHRhPTEwICovXFxcbitcdHIzICs9IDEwO1x0XHQvKiBBRERfQ09OU1RfNjQgZGVsdGEgKi9cXFxuIFx0cjYgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiBcdGdvdG8gbF9tZXJnZV8lPTtcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC02ODcsNyArNjg3LDcgQEAgbF90cnVlXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiBcdHI0ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiBcdHI0IFx1MDAyNj0gMHhmZjtcdFx0LyogUjQgPSBzY2FsYXIgWzAsMjU1XSwgaWQ9MCAqL1x0XFxcbiBcdHIzID0gcjQ7XHRcdC8qIFIzIGxpbmtlZCB0byBSNCAobmV3IGlkPUMpICovXFxcbi1cdHIzICs9IDEwO1x0XHQvKiBSMyBpZD1DfEFERF9DT05TVCwgZGVsdGE9MTAgKi9cXFxuK1x0cjMgKz0gMTA7XHRcdC8qIEFERF9DT05TVF82NCBkZWx0YSAqL1xcXG4gXHRyNiA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcXFxuIGxfbWVyZ2VfJT06XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTcxMCw0ICs3MTAsNjIzIEBAIGxfZXhpdF8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gXHQ6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbisvKlxuKyAqIEEgMzItYml0IG1vdiBmcm9tIGEgd2lkZSBzb3VyY2Ugc2hhcmVzIG9ubHkgdGhlIGxvdyAzMiBiaXRzLiBOYXJyb3dpbmcgdGhlXG4rICogc291cmNlIG11c3QgcmVhY2ggdGhlIGRlc3RpbmF0aW9uIHRocm91Z2ggdGhhdCBsaW5rLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCB6ZXh0X21vdl9uYXJyb3dfc3JjKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdGlmIHc2ICE9IDAgZ290byAxZjtcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXFxcbitcdGlmIHc3ID09IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSByZXZlcnNlIGRvZXMgbm90IGhvbGQ6IG5hcnJvd2luZyB0aGUgbG93LTMyIGxpbmsgc2F5cyBub3RoaW5nIGFib3V0IHRoZVxuKyAqIGJhc2UncyBoaWdoIGJpdHMsIHNvIHI2IG11c3Qgc3RheSB1bmtub3duIGFuZCB0aGUgZGl2IHN0YXlzIHJlYWNoYWJsZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19kc3Rfa2VlcHNfYmFzZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHc3ID0gdzY7XHRcdC8qIGZvcm1zIHRoZSBsaW5rICovXHRcdFxcXG4rXHRpZiByNyAhPSAwIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI3LCBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjYgKi8gXFxcbitcdGlmIHI2ID09IDAgZ290byAxZjtcdC8qIHRha2VuIG9ubHkgaWYgcjYgd3JvbmdseSBuYXJyb3dlZCAqL1x0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEEgcHJvdmFibHktdTMyIHNvdXJjZSB0YWtlcyB0aGUgZnVsbC1lcXVhbGl0eSBwYXRoLCBub3QgdGhlIGxvdy0zMiBvbmU6XG4rICogbmFycm93aW5nIHRoZSBkZXN0aW5hdGlvbiBtdXN0IHJlYWNoIHRoZSBzb3VyY2UuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzXG4rX19uYWtlZCB2b2lkIHpleHRfdTMyX3NyY19pc19mdWxsX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHR3NiA9IHcwO1x0XHQvKiByNiBwcm92YWJseSB1MzIgKi9cdFx0XFxcbitcdHc3ID0gdzY7XHRcdC8qIGZ1bGwgbGluaywgbm90IGxvdy0zMiAqL1x0XFxcbitcdGlmIHI3IFx1MDAzZSAxMCBnb3RvIDFmO1x0LyogbmFycm93cyByNywgcHJvcGFnYXRlcyB0byByNiAqLyBcXFxuK1x0aWYgcjYgXHUwMDNlIDEwIGdvdG8gMmY7XHRcdFx0XHRcdFxcXG4rXHRnb3RvIDFmO1x0XHRcdFx0XHRcdFxcXG4rMjpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEEgc2VsZi1tb3YgaGFzIG5vdGhpbmcgdG8gbGluaywgc28gaXQgbXVzdCBub3QgbWludCBhbiBpZCBmb3IgcjYuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rLyogYW4gaWQgd291bGQgcHJpbnQgYXMgUjY9c2NhbGFyKGlkPU4ubG8zMixzbWluPS4uLiAqL1xuK19fbXNnKFwiKGJjKSB3NiA9IHc2IHt7Lip9fSBSNj1zY2FsYXIoc21pbj0wLFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBePSAwO1x0XHQvKiBkcm9wIHRoZSBpZCAqL1x0XHRcXFxuK1x0dzYgPSB3NjtcdFx0LyogZm9ybXMgbm8gbGluayAqL1x0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEEgbG93LTMyLWxpbmtlZCBzb3VyY2Uga2VlcHMgaXRzIGlkIGFuZCBmbGFnIGFjcm9zcyBhIGZ1cnRoZXIgMzItYml0IG1vdixcbisgKiBzbyBuYXJyb3dpbmcgdGhlIGJhc2Ugc3RpbGwgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBjaGFpbi5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgemV4dF9jaGFpbl9rZWVwc19saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHc4ID0gdzc7XHRcdC8qIGxpbmsgc3Vydml2ZXMgdGhlIDJuZCBtb3YgKi9cdFxcXG4rXHRpZiB3NiAhPSAwIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHI4ICovIFxcXG4rXHRpZiB3OCA9PSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBBIGRlbHRhIG9uIGVpdGhlciBzaWRlIGlzIG5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGEgbG93LTMyIGxpbmssIHNvIG5vXG4rICogcmFuZ2UgcHJvcGFnYXRlczogaGVyZSB0aGUgYnJhbmNoIHJlZ2lzdGVyIGNhcnJpZXMgdGhlIGRlbHRhLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImRpdiBieSB6ZXJvXCIpXG4rX19uYWtlZCB2b2lkIHpleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbitcdHI4ICs9IDM7XHRcdC8qIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnICovXHRcXFxuK1x0aWYgcjggIT0gMyBnb3RvIDFmO1x0LyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI3ICovXHRcXFxuK1x0aWYgdzcgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogLi4uIGFuZCBoZXJlIHRoZSBsb3ctMzIgbGluayBpcyB0aGUgYnJhbmNoIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXJcbisgKiBjYXJyeWluZyB0aGUgZGVsdGEgbXVzdCBub3QgYmUgbmFycm93ZWQgZWl0aGVyLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImRpdiBieSB6ZXJvXCIpXG4rX19uYWtlZCB2b2lkIHpleHRfbm9fc3luY19mcm9tX3N1YnJlZ19iYXNlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbitcdHI4ICs9IDM7XHRcdC8qIGRlbHRhIG9uIHI4ICovXHRcdFxcXG4rXHRpZiB3NyAhPSAwIGdvdG8gMWY7XHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi9cdFxcXG4rXHRpZiByOCA9PSAzIGdvdG8gMWY7XHQvKiB0YWtlbiBvbmx5IGlmIHI4IHdyb25nbHkgbmFycm93ZWQgKi9cdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUd28gbG93LTMyIGxpbmtzIG9uIHRoZSBzYW1lIGJhc2UgZG8gcHJvcGFnYXRlIHRvIGVhY2ggb3RoZXI6IGJvdGggYXJlIHRoZVxuKyAqIHplcm8tZXh0ZW5zaW9uIG9mIHRoZSBzYW1lIGxvdyAzMiBiaXRzLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCB6ZXh0X3N5bmNfYmV0d2Vlbl90d29fc3VicmVncyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHc3ID0gdzY7XHRcdC8qIHR3byBsaW5rcyBvbiBvbmUgYmFzZSAqL1x0XFxcbitcdHc4ID0gdzY7XHRcdFx0XHRcdFx0XFxcbitcdGlmIHc3ICE9IDAgZ290byAxZjtcdC8qIG5hcnJvd3MgcjcsIHByb3BhZ2F0ZXMgdG8gcjggKi8gXFxcbitcdGlmIHc4ID09IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIE9ubHkgb25lIG9mIHRoZSB0d28gcGF0aHMgbGlua3MgcjcgdG8gcjgsIHNvIHRoZSBuYXJyb3dpbmcgb2YgdzggcmVhY2hlcyByN1xuKyAqIG9uIG9uZSBhbmQgbm90IHRoZSBvdGhlciBhbmQgdGhlIGRpdiBzdGF5cyByZWFjaGFibGUuIFRoaXMgY2hlY2tzIHRoZVxuKyAqIG91dGNvbWUsIG5vdCB0aGUgbWVjaGFuaXNtOiB0aGUgdHdvIHN0YXRlcyBkaWZmZXIgaW4gdGhlaXIgaWRzIGFuZCBjb250ZW50cyxcbisgKiBzbyByZWdzYWZlKCkgaGFzIG1hbnkgcmVhc29ucyB0byBrZWVwIHRoZW0gYXBhcnQgYW5kIGRpc2FibGluZyBhbnkgc2luZ2xlXG4rICogb25lIG9mIGl0cyBjaGVja3MgZG9lcyBub3QgbWFrZSB0aGlzIGZhaWwuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCB6ZXh0X3VubGlua2VkX3BhdGhfc3RheXNfcmVhY2hhYmxlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgXHUwMDI2PSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRpZiByNiBcdTAwM2U9IDEgZ290byAyZjtcdFx0XHRcdFx0XFxcbitcdC8qIGV4cGxvcmVkIGZpcnN0OiByNyBpcyBhIGxvdy0zMiBsaW5rIG9mIHI4ICovXHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjggPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3ODtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdGdvdG8gMWY7XHRcdFx0XHRcdFx0XFxcbisyOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0LyogcnVudGltZSBwYXRoOiByNyB1bnJlbGF0ZWQgdG8gcjggKi9cdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHR3NyA9IHcwO1x0XHQvKiBubyBsaW5rIGhlcmUgKi9cdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgdzggIT0gMCBnb3RvIDNmO1x0LyogcHJvcGFnYXRlcyB0byByNyBvbmx5IGlmIGxpbmtlZCAqLyBcXFxuK1x0aWYgdzcgPT0gMCBnb3RvIDNmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzM6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogRm9ybWluZyB0aGUgbGluayBjYWxscyBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoKSwgd2hpY2ggZHJvcHMgYSBkZWx0YVxuKyAqIGxpbmsgb24gdGhlIHNvdXJjZS4gVGhhdCBpcyB3aGF0IHRoZSBuYXJyb3ctc291cmNlIHBhdGggaGFzIGFsd2F5cyBkb25lLFxuKyAqIHNvIGEgd2lkZSBzb3VyY2UgYmVoYXZlcyB0aGUgc2FtZTogcjUgc3RvcHMgdHJhY2tpbmcgcjYuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX25ha2VkIHZvaWQgemV4dF9tb3ZfYnJlYWtzX2FkZF9jb25zdF9zcmModm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNSA9IHI2O1x0XHQvKiByNSwgcjYgbGlua2VkICovXHRcdFxcXG4rXHRyNSArPSAzO1x0XHQvKiByNSA9IGJhc2UgKyAzICovXHRcdFxcXG4rXHR3NyA9IHc1O1x0XHQvKiBicmVha3MgcjUncyBkZWx0YSBsaW5rICovXHRcXFxuK1x0aWYgcjYgXHUwMDNlIDkgZ290byAxZjtcdC8qIHI2IGluIFswLCA5XSAqL1x0XHRcXFxuK1x0aWYgcjUgXHUwMDNjIDEzIGdvdG8gMWY7XHQvKiB0YWtlbiBvbmx5IGlmIHI1IHN0aWxsIGxpbmtlZCAqLyBcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBuYXJyb3dpbmcgZmlsbCBrZWVwcyBvbmx5IHRoZSBzbG90J3MgbG93IDMyIGJpdHMsIHNvIGEgbGF0ZXIgbmFycm93aW5nIG9mXG4rICogdGhlIHNwaWxsZWQgdmFsdWUgbXVzdCBzdGlsbCByZWFjaCB0aGUgZmlsbGVkIHJlZ2lzdGVyLiBTYW1lIHJlbGF0aW9uIGFzIGFcbisgKiAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSwgd2l0aCB0aGUgc3RhY2sgc2xvdCBhcyB0aGUgYmFzZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgemV4dF9maWxsX25hcnJvd19mcm9tX3dpZGVfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgfD0gcjA7XHRcdC8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjY7XHQvKiBzbG90IGxpbmtlZCB0byByNiAqL1x0XHRcXFxuK1x0cjIgPSAqKHUzMiAqKShyMTAgLSA4KTtcdC8qIG5hcnJvd2luZyBmaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcXFxuK1x0aWYgdzYgIT0gMCBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxuK1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBmdWxsLXdpZHRoIGZpbGwgb2YgYSB3aWRlIHNsb3QgaXMgYSBwbGFpbiA2NC1iaXQgZXF1YWxpdHksIG5vdCBhIGxvdy0zMlxuKyAqIGxpbmssIHNvIGl0IG11c3Qga2VlcCBwcm9wYWdhdGluZyBleGFjdGx5IGFzIGJlZm9yZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgemV4dF9maWxsX2Z1bGxfd2lkdGhfa2VlcHNfZnVsbF9saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzY1x1MDAzYz0gMzI7XHRcdFx0XHRcdFx0XFxcbitcdHI2IHw9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0cjIgPSAqKHU2NCAqKShyMTAgLSA4KTtcdC8qIG5vIG5hcnJvd2luZyAqL1x0XHRcXFxuK1x0aWYgcjYgIT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBzdWItd29yZCBmaWxsIGlzIGJlbG93IHRoZSBsb3ctMzIgbW9kZWwsIHNvIG5vIGxpbmsgaXMgZm9ybWVkIGFuZCB0aGVcbisgKiByZWxhdGlvbiBpcyBkcm9wcGVkIGFzIGJlZm9yZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2ZpbGxfYnl0ZV9mb3Jtc19ub19saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzY1x1MDAzYz0gMzI7XHRcdFx0XHRcdFx0XFxcbitcdHI2IHw9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0cjIgPSAqKHU4ICopKHIxMCAtIDgpO1x0LyogMS1ieXRlIGZpbGw6IG5vIGxpbmsgKi9cdFxcXG4rXHRpZiB3NiAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4rXHRpZiByMiA9PSAwIGdvdG8gMWY7XHQvKiBub3QgZGVkdWNlZCAqL1x0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBuYXJyb3dpbmcgc3BpbGwgc3RvcmVzIG9ubHkgdGhlIHNvdXJjZSdzIGxvdyAzMiBiaXRzLCBzbyB0aGUgc2xvdCBpcyB0aGVpclxuKyAqIHplcm8tZXh0ZW5zaW9uLiBBIGxhdGVyIG5hcnJvd2luZyBvZiB0aGUgc291cmNlIG11c3Qgc3RpbGwgcmVhY2ggYW55dGhpbmdcbisgKiBmaWxsZWQgYmFjayBvdXQgb2YgdGhhdCBzbG90LlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9rZWVwc19saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzY1x1MDAzYz0gMzI7XHRcdFx0XHRcdFx0XFxcbitcdHI2IHw9IHIwO1x0XHQvKiByNiA9IGZ1bGwgNjQtYml0IHVua25vd24gKi9cdFxcXG4rXHQqKHUzMiAqKShyMTAgLSA4KSA9IHI2O1x0LyogbmFycm93aW5nIHNwaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcXFxuK1x0cjIgPSAqKHUzMiAqKShyMTAgLSA4KTtcdC8qIGZpbGwgaXQgYmFjayAqL1x0XHRcXFxuK1x0aWYgdzYgIT0gMCBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxuK1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBzdWItd29yZCBzcGlsbCBpcyBiZWxvdyB0aGUgbG93LTMyIG1vZGVsLCBzbyBubyBsaW5rIGlzIGZvcm1lZCB0aGVyZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9ieXRlX25vX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgfD0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTggKikocjEwIC0gOCkgPSByNjtcdC8qIDEtYnl0ZSBzcGlsbDogbm8gbGluayAqL1x0XFxcbitcdHIyID0gKih1OCAqKShyMTAgLSA4KTtcdFx0XHRcdFx0XFxcbitcdGlmIHc2ICE9IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdGlmIHIyID09IDAgZ290byAxZjtcdC8qIG5vdCBkZWR1Y2VkICovXHRcdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2lmZGVmIENBTl9VU0VfTU9WU1hcbitcbisvKlxuKyAqIEEgMzItYml0IHNpZ24gZXh0ZW5zaW9uIGtlZXBzIHRoZSBsb3cgMzIgYml0cywgc28gbmFycm93aW5nIHRoZSBzb3VyY2VcbisgKiByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbiB0aGUgc2FtZSB3YXkgaXQgZG9lcyBmb3IgYSB6ZXJvIGV4dGVuc2lvbi4gVGhlIGhpZ2hcbisgKiBoYWxmIGZvbGxvd3MgdGhlIHNpZ24sIHNvIHRoZSB2YWx1ZSBzZWVuIGhlcmUgaXMgbmVnYXRpdmUuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzXG4rX19uYWtlZCB2b2lkIHNleHRfbW92X3dpZGVfc3JjKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjcgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuK1x0aWYgdzYgIT0gLTEgZ290byAxZjtcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXFxcbitcdGlmIHI3ID09IC0xIGdvdG8gMWY7XHQvKiBzaWduLWV4dGVuZGVkLCBub3QgMHhmZmZmZmZmZiAqLyBcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogcjAgPSAoczMyKXIwIGlzIGhvdyBhIHNpZ24tZXh0ZW5kZWQgaW50IHJldHVybiBsYW5kcy4gc3JjIGFuZCBkc3QgYXJlIHRoZVxuKyAqIHNhbWUgcmVnaXN0ZXIsIGJ1dCByMCBpcyBhbHJlYWR5IGxpbmtlZCwgc28gdGhlcmUgaXMgYSBzZXQgZm9yIGl0IHRvIHN0YXlcbisgKiBpbiBhbmQgdGhlIG5hcnJvd2luZyBzdGlsbCBwcm9wYWdhdGVzLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X2tlZXBzX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNyA9IHI2O1x0XHQvKiByNiwgcjcgbGlua2VkICovXHRcdFxcXG4rXHRyNyA9IChzMzIpcjc7XHRcdC8qIHNlbGYtbW92LCBrZWVwcyB0aGUgaWQgKi9cdFxcXG4rXHRpZiB3NiAhPSAtMSBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcXFxuK1x0aWYgcjcgPT0gLTEgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBzYW1lIHNlbGYtbW92IG9uIGFuIHVubGlua2VkIHJlZ2lzdGVyIGhhcyBub3RoaW5nIHRvIGxpbmsgdG8sIHNvIGl0XG4rICogbXVzdCBub3QgbWludCBhbiBpZCB0aGF0IHdvdWxkIGxlYXZlIHI2IGRlc2NyaWJpbmcgaXRzZWxmLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuKy8qIGFuIGlkIHdvdWxkIHByaW50IGFzIFI2PXNjYWxhcihpZD1OLmxvMzJzeCxzbWluPS4uLiAqL1xuK19fbXNnKFwiKGJmKSByNiA9IChzMzIpcjYge3suKn19IFI2PXNjYWxhcihzbWluPVwiKVxuK19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBePSAwO1x0XHQvKiBkcm9wIHRoZSBpZCAqL1x0XHRcXFxuK1x0cjYgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyBubyBsaW5rICovXHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBkZWx0YSBvbiB0aGUgYnJhbmNoIHJlZ2lzdGVyIGlzIG5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGEgbG93LTMyXG4rICogbGluaywgc28gdGhlIHByb3BhZ2F0aW9uIGlzIHNraXBwZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZCBhdC5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCBzZXh0X25vX3N5bmNfd2hlbl9iYXNlX2hhc19kZWx0YSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHI3ID0gKHMzMilyNjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbitcdHI4ICs9IDM7XHRcdC8qIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnICovXHRcXFxuK1x0aWYgcjggIT0gMyBnb3RvIDFmO1x0LyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI3ICovXHRcXFxuK1x0aWYgcjcgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogLi4uIGFuZCB3aXRoIHRoZSBsaW5rIGFzIHRoZSBicmFuY2ggcmVnaXN0ZXIgdGhlIHByb3BhZ2F0aW9uIG11c3Qgbm90IHJ1blxuKyAqIGJhY2t3YXJkczogYSAtXHUwMDNlc3VicmVnIHJlZ2lzdGVyIGtub3dzIG5vdGhpbmcgYWJvdXQgdGhlIGJhc2UncyBoaWdoIGhhbGYsIHNvXG4rICogbmFycm93aW5nIGl0IG11c3QgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIHNldCBhbG9uZS4gV2VyZSB0aGUgZ3VhcmQgbWlzc2luZyxcbisgKiByOCB3b3VsZCBiZSByZWJ1aWx0IGFzIHI3ICsgMyA9PSAyLCB0cmVhdGluZyByNyBhcyBpZiBpdCB3ZXJlIHRoZSBiYXNlLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImRpdiBieSB6ZXJvXCIpXG4rX19uYWtlZCB2b2lkIHNleHRfbm9fc3luY19mcm9tX3N1YnJlZ19iYXNlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjcgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuK1x0cjggPSByNjtcdFx0XHRcdFx0XHRcXFxuK1x0cjggKz0gMztcdFx0LyogZGVsdGEgb24gcjggKi9cdFx0XFxcbitcdGlmIHI3ICE9IC0xIGdvdG8gMWY7XHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi9cdFxcXG4rXHRpZiByOCA9PSAyIGdvdG8gMWY7XHQvKiB0YWtlbiBvbmx5IGlmIHI4IHdyb25nbHkgbmFycm93ZWQgKi9cdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgdHdvIGtpbmRzIHJlYnVpbGQgdGhlIGhpZ2ggaGFsZiBkaWZmZXJlbnRseTogdGhlIHNhbWUgbG93IGhhbGYgcmVhY2hlc1xuKyAqIC0xIHRocm91Z2ggYSBzaWduIGV4dGVuc2lvbiBhbmQgMHhmZmZmZmZmZiB0aHJvdWdoIGEgemVybyBleHRlbnNpb24sIHNvIG9ubHlcbisgKiBvbmUgcGF0aCBjbGVhcnMgdGhlIGd1YXJkLiBBcyBhYm92ZSB0aGlzIGNoZWNrcyB0aGUgb3V0Y29tZSAtLSB0aGUgZGlmZmVyaW5nXG4rICogcmFuZ2VzIGtlZXAgdGhlIHN0YXRlcyBhcGFydCBvbiB0aGVpciBvd24uXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBzZXh0X2tpbmRzX3JlYWNoX2RpZmZlcmVudF92YWx1ZXModm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBcdTAwMjY9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGlmIHI2IFx1MDAzZT0gMSBnb3RvIDJmO1x0XHRcdFx0XHRcXFxuK1x0LyogZXhwbG9yZWQgZmlyc3Q6IHI3IGlzIGEgc2lnbi1leHRlbmRlZCBsaW5rIG9mIHI4ICovXHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHI3ID0gKHMzMilyODtcdFx0XHRcdFx0XHRcXFxuK1x0Z290byAxZjtcdFx0XHRcdFx0XHRcXFxuKzI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHQvKiBydW50aW1lIHBhdGg6IHI3IGlzIGEgemVyby1leHRlbmRlZCBsaW5rIG9mIHI4ICovXHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHc3ID0gdzg7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgdzggIT0gLTEgZ290byAzZjtcdFx0XHRcdFx0XFxcbitcdGlmIHI3ID09IC0xIGdvdG8gM2Y7XHQvKiBvbmx5IHRoZSBzaWduLWV4dGVuZGVkIHBhdGggKi8gXFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiszOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBzaWduLWV4dGVuZGluZyBjb3VudGVycGFydDogdGhlIGZpbGxlZCByZWdpc3RlciBpcyB0aGUgc2lnbiBleHRlbnNpb24gb2ZcbisgKiB0aGUgc2xvdCdzIGxvdyAzMiBiaXRzLCBzbyBhIG5hcnJvd2luZyBvZiB0aG9zZSBiaXRzIGFycml2ZXMgc2lnbi1leHRlbmRlZC5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgc2V4dF9maWxsX25hcnJvd19mcm9tX3dpZGVfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgfD0gcjA7XHRcdC8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjY7XHQvKiBzbG90IGxpbmtlZCB0byByNiAqL1x0XHRcXFxuK1x0cjIgPSAqKHMzMiAqKShyMTAgLSA4KTtcdC8qIG5hcnJvd2luZyBzeCBmaWxsICovXHRcdFxcXG4rXHRpZiB3NiAhPSAtMSBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxuK1x0aWYgcjIgPT0gLTEgZ290byAxZjtcdC8qIHNpZ24tZXh0ZW5kZWQsIG5vdCAweGZmZmZmZmZmICovIFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgc2FtZSwgZm9yIHRoZSB0d28gZmlsbCBraW5kcyBvZmYgb25lIHNsb3QuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBmaWxsX2tpbmRzX3JlYWNoX2RpZmZlcmVudF92YWx1ZXModm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBcdTAwMjY9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyOCA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjggfD0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjg7XHRcdFx0XHRcdFxcXG4rXHRpZiByNiBcdTAwM2U9IDEgZ290byAyZjtcdFx0XHRcdFx0XFxcbitcdHIyID0gKihzMzIgKikocjEwIC0gOCk7XHQvKiBzaWduLWV4dGVuZGluZyBmaWxsICovXHRcXFxuK1x0Z290byAxZjtcdFx0XHRcdFx0XHRcXFxuKzI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMiA9ICoodTMyICopKHIxMCAtIDgpO1x0LyogemVyby1leHRlbmRpbmcgZmlsbCAqL1x0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgdzggIT0gLTEgZ290byAzZjtcdFx0XHRcdFx0XFxcbitcdGlmIHIyID09IC0xIGdvdG8gM2Y7XHQvKiBvbmx5IHRoZSBzaWduLWV4dGVuZGluZyBwYXRoICovIFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMzpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2VuZGlmIC8qIENBTl9VU0VfTU9WU1ggKi9cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guY1xuaW5kZXggMTk1YjI3YTUxMjI0Zi4uM2EwZTY3ZWJiOTYzZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guY1xuQEAgLTIwMiw2ICsyMDIsNTcgQEAgbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLypcbisgKiBBIHJhbmdlIHRoYXQgYWxyZWFkeSBmaXRzIHRoZSBmaWVsZCBpcyB1bmNoYW5nZWQgYnkgdGhlIHNpZ24gZXh0ZW5zaW9uLlxuKyAqIEJvdGggb2YgdGhlc2Ugc3RyYWRkbGUgemVybywgc28gdGhlIGhpZ2ggYml0cyBvZiBzbWluIGFuZCBzbWF4IGRpZmZlciBhbmRcbisgKiB0aGUgdG9wX3MqX3ZhbHVlIHRlc3QgYWxvbmUgd291bGQgZmFsbCBiYWNrIHRvIHRoZSBmdWxsIGZpZWxkIHJhbmdlLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJNT1Y2NFNYLCBTMzIsIG5lZ2F0aXZlIHJhbmdlIGlzIHByZXNlcnZlZFwiKVxuK19fc3VjY2VzcyBfX3N1Y2Nlc3NfdW5wcml2IF9fcmV0dmFsKDApXG4rX19uYWtlZCB2b2lkIG1vdjY0c3hfczMyX25lZ2F0aXZlX3JhbmdlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MCBcdTAwMjY9IDB4ZmZmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLT0gMHhmZmY7XHRcdFx0XHRcdFxcXG4rXHQvKiByMCBpcyBbLTQwOTUsIDBdLCBhbHJlYWR5IGEgdmFsaWQgczMyICovXHRcXFxuK1x0cjAgPSAoczMyKXIwO1x0XHRcdFx0XHRcXFxuK1x0aWYgcjAgc1x1MDAzYyAtMHhmZmYgZ290byBsMF8lPTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuK1x0LyogdW5yZWFjaGFibGUgdW5sZXNzIHRoZSByYW5nZSB3YXMgd2lkZW5lZCAqL1x0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJNT1Y2NFNYLCBTOCwgbmVnYXRpdmUgcmFuZ2UgaXMgcHJlc2VydmVkXCIpXG4rX19zdWNjZXNzIF9fc3VjY2Vzc191bnByaXYgX19yZXR2YWwoMClcbitfX25ha2VkIHZvaWQgbW92NjRzeF9zOF9uZWdhdGl2ZV9yYW5nZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzAgXHUwMDI2PSAweDNmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLT0gMHgzZjtcdFx0XHRcdFx0XFxcbitcdC8qIHIwIGlzIFstNjMsIDBdLCBhbHJlYWR5IGEgdmFsaWQgczggKi9cdFxcXG4rXHRyMCA9IChzOClyMDtcdFx0XHRcdFx0XFxcbitcdGlmIHIwIHNcdTAwM2MgLTB4M2YgZ290byBsMF8lPTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuK1x0LyogdW5yZWFjaGFibGUgdW5sZXNzIHRoZSByYW5nZSB3YXMgd2lkZW5lZCAqL1x0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIFNFQyhcInNvY2tldFwiKVxuIF9fZGVzY3JpcHRpb24oXCJNT1Y2NFNYLCBTMTYsIFIxMCBTaWduIEV4dGVuc2lvblwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlIxIHR5cGU9c2NhbGFyIGV4cGVjdGVkPWZwLCBwa3QsIHBrdF9tZXRhLCBtYXBfa2V5LCBtYXBfdmFsdWUsIG1lbSwgcmluZ2J1Zl9tZW0sIGJ1ZiwgdHJ1c3RlZF9wdHJfXCIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXG5pbmRleCBkYzFkOGMzMGZiMGVlLi4zNDIxNGVjOTI2NzA2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmVnX2VxdWFsLmNcbkBAIC0zMSwyMyArMzEsMjMgQEAgbDFfJT06XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4gfVxuIFxuIFNFQyhcInNvY2tldFwiKVxuLV9fZGVzY3JpcHRpb24oXCJjaGVjayB3IHJlZyBub3QgZXF1YWwgaWYgciByZWcgdXBwZXIzMiBiaXRzIG5vdCAwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgIXJlYWRfb2tcIilcbitfX2Rlc2NyaXB0aW9uKFwiY2hlY2sgdyByZWcgZXF1YWwgaWYgciByZWcgdXBwZXIzMiBiaXRzIG5vdCAwXCIpXG4rX19zdWNjZXNzXG4gX19uYWtlZCB2b2lkIHN1YnJlZ19lcXVhbGl0eV8yKHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuIFx0Y2FsbCAlW2JwZl9rdGltZV9nZXRfbnNdO1x0XHRcdFxcXG4gXHRyMiA9IHIwO1x0XHRcdFx0XHRcXFxuLVx0LyogVXBwZXIgNC1ieXRlcyBvZiByMiBtYXkgbm90IGJlIDAsIHRodXMgaW5zblx0XFxcbi1cdCAqIHczID0gdzIgc2hvdWxkIG5vdCBwcm9wYWdhdGUgcmVnIGlkLFx0YW5kXHRcXFxuLVx0ICogdzIgXHUwMDNjIDkgY29tcGFyaXNvbiBzaG91bGQgbm90IHByb3BhZ2F0ZVx0XFxcbi1cdCAqIHRoZSByYW5nZSBmb3IgcjMgZWl0aGVyLlx0XHRcdFxcXG4rXHQvKiBVcHBlciA0LWJ5dGVzIG9mIHIyIG1heSBub3QgYmUgMCwgc28gcjMgZG9lc1x0XFxcbitcdCAqIG5vdCBlcXVhbCByMi4gSXQgZG9lcyBzaGFyZSByMidzIGxvdyAzMiBiaXRzXHRcXFxuK1x0ICogdGhvdWdoLCBzbyB3MiBcdTAwM2MgOSBzdGlsbCBib3VuZHMgcjM6IHRoZVx0XFxcbitcdCAqIHplcm8tZXh0ZW5kaW5nIG1vdiBsZWF2ZXMgbm90aGluZyBhYm92ZSB0aGVtLlxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuIFx0dzMgPSB3MjtcdFx0XHRcdFx0XFxcbiBcdGlmIHcyIFx1MDAzYyA5IGdvdG8gbDBfJT07XHRcdFx0XHRcXFxuIFx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuIGwwXyU9Olx0aWYgcjMgXHUwMDNjIDkgZ290byBsMV8lPTtcdFx0XHRcdFxcXG4tXHQvKiByMSByZWFkIGlzIGlsbGVnYWwgYXQgdGhpcyBwb2ludCAqL1x0XHRcXFxuK1x0LyogdW5yZWFjaGFibGUsIHNvIHRoZSByMSByZWFkIGlzIG5ldmVyIG1hZGUgKi9cdFxcXG4gXHRyMCAtPSByMTtcdFx0XHRcdFx0XFxcbiBsMV8lPTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiBcIlx0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5pbmRleCAzOWExNzY2ZGFlM2YxLi4xMDQyODU2Yjk3YzI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xuQEAgLTQ2NCw5ICs0NjQsMTMgQEAgbDBfJT06XHRyMSBcdTAwM2VcdTAwM2U9IDE2O1x0XHRcdFx0XHRcXFxuIFNFQyhcInJhd190cFwiKVxuIF9fbG9nX2xldmVsKDIpXG4gX19zdWNjZXNzXG4tX19tc2coXCJmcC04PTBtPz9zY2FsYXIoKVwiKVxuLV9fbXNnKFwiZnAtMTY9MDBtbT8/c2NhbGFyKClcIilcbi1fX21zZyhcImZwLTI0PTAwbW0/Pz9zY2FsYXIoKVwiKVxuKy8qXG4rICogVGhlIHNsb3QgcmVjb3JkcyB3aGF0IHRoZSBzdG9yZSBwdXQgdGhlcmUsIG5vdCB0aGUgd2lkZXIgc291cmNlIGl0IGNhbWVcbisgKiBmcm9tLCBzbyBlYWNoIHNjYWxhciBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIGl0cyBzcGlsbC5cbisgKi9cbitfX21zZyhcImZwLTg9MG0/P3NjYWxhcihpZD17e1swLTldK319LmxvMzIsc21pbj0wLHNtYXg9dW1heD0weGZmZmZmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmZmZmZikpXCIpXG4rX19tc2coXCJmcC0xNj0wMG1tPz9zY2FsYXIoc21pbj1zbWluMzI9MCxzbWF4PXVtYXg9c21heDMyPXVtYXgzMj0weGZmZmYsdmFyX29mZj0oMHgwOyAweGZmZmYpKVwiKVxuK19fbXNnKFwiZnAtMjQ9MDBtbT8/P3NjYWxhcihzbWluPXNtaW4zMj0wLHNtYXg9dW1heD1zbWF4MzI9dW1heDMyPTI1NSx2YXJfb2ZmPSgweDA7IDB4ZmYpKVwiKVxuIF9fbmFrZWQgdm9pZCBzcGlsbF9zdWJyZWdzX3ByZXNlcnZlX3N0YWNrX3plcm8odm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MTAuMTgwMTEzMjc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4ODI5MTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQlBGIHZlcmlmaWVyIOKAkyBzcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXM6IGBicGZfdmVyaWZpZXIuaGAsIGB0bnVtLmhgLCBgbG9nLmNgLCBgc3RhdGVzLmNgLCBgdG51bS5jYCwgYW5kIGB2ZXJpZmllci5jYCB3aXRoaW4gdGhlIGtlcm5lbCBCUEYgZGlyZWN0b3J5LCBwbHVzIHNvbWUgc2VsZnRlc3RzLCB3aGljaCBpcyBzdGFuZGFyZCBwcm9jZWR1cmUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhlc2UgYXMgdGhlIGd1dHMgb2YgdGhlIHZlcmlmaWVyIGxvZ2ljLlxuXG5GaXJzdCB0aG91Z2h0OiBSZWFjaGFiaWxpdHkgaXMga2V5LiBUaGUgQlBGIHZlcmlmaWVyIGlzLCB3aXRob3V0IGEgZG91YnQsIGEgdGFyZ2V0LiBJdCdzIHJlYWNoZWQgdGhyb3VnaCBgYnBmKClgIOKAkyB0aGUgcHJpbWFyeSBCUEYgc3lzdGVtIGNhbGwuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCdzIHByZXNlbnQgaW4gbW9zdCBtb2Rlcm4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBTeXprYWxsZXIgaXMga25vd24gdG8gZ2l2ZSB0aGlzIGNvZGUgYmFzZSBhIHNlcmlvdXMgd29ya291dCB3aXRoIGZ1enppbmcgYXMgd2VsbCwgd2hpY2ggbWFrZXMgdGhpcyBldmVuIG1vcmUgaW50ZXJlc3RpbmcuXG5cblNlY29uZCB0aG91Z2h0OiAqV29ydGhGdXp6aW5nKiBoYXMgdG8gYmUgYHRydWVgIGhlcmUuIE5vIHF1ZXN0aW9uLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSB0aGF0J3MgZGlyZWN0bHkgcmVhY2hhYmxlLiBJdCdzIHRvdWNoaW5nIGNvcmUgc3Vic3lzdGVtcywgQlBGIGl0c2VsZiwgc28gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBzaWduaWZpY2FudCwgYW5kIHRoZSB2dWxuZXJhYmlsaXR5IHJpc2sgaGVyZSBpcyBoaWdoLiBNeSBhbmFseXNpcyBzdG9wcyB0aGVyZSB0byBnZXQgdG8gdGhlIG5leHQgc3RlcC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYWxsIGZ1bmN0aW9ucyBhbmQgY29uZmlnIG9wdGlvbnMgYXJlIGNvbnNpZGVyZWQuIEkgc2hvdWxkIHVzZSBgZ3JlcHBlcmAgb3Igb3RoZXIgdG9vbHMgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgQlBGIHZlcmlmaWVyLiBHb3R0YSBkbyB0aGUgYmFzaWNzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU0NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjE0LjM2ODQwODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTAwODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MTQuNDcyNTE1MzQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MjE2NTc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYWN0dWFsbHkgZW5hYmxlIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBjb21wb25lbnRzIOKAkyBzcGVjaWZpY2FsbHksIGB2ZXJpZmllci5jYCwgYHN0YXRlcy5jYCwgYW5kIGB0bnVtLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQlBGIGRpcmVjdG9yeS4gU2luY2UgdGhlc2UgYXJlIGNvcmUgcGllY2VzLCB0aGV5J2xsIGxpa2VseSBiZSB0aWVkIHRvIHNwZWNpZmljIGtlcm5lbCBidWlsZCBvcHRpb25zLiBTbywgSSdsbCBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiB0aGluZy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGBDT05GSUdfYCBmbGFncyBvciBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHRoZWlyIGNvbXBpbGF0aW9uIGFuZCBpbmNsdXNpb24gaW4gdGhlIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBuZWVkcyB0byBiZSBzZXQgdG8gaW5jbHVkZSB0aGVzZSBpbiB0aGUgZmluYWwga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjIzMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjE2Ljg0NDY5NjE0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA2OTcwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyaWZpZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MTYuOTY1Mzk5MDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwODExOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBWZXJpZmllciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgZW50aXJlIEJQRiB2ZXJpZmllciBpbmZyYXN0cnVjdHVyZS4gVGhhdCBtZWFucyB0aGUgd2hvbGUgc3VpdGUgb2YgdG9vbHMg4oCTIGB2ZXJpZmllci5vYCwgYHRudW0ub2AsIGBsb2cub2AsIGFuZCBhbGwgdGhlIHJlc3Qg4oCTIGhpbmdlcyBvbiB0aGF0IG9uZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHN0YXRlcy5jYCBhbmQgdGhlIHZlcmlmaWVyIGl0c2VsZi4gSXMgaXQgZGlyZWN0bHkgaW5jbHVkZWQgd2l0aGluIGB2ZXJpZmllci5jYCwgb3IgaXMgaXQgY29tcGlsZWQgYXMgYSBzZXBhcmF0ZSBvYmplY3QgZmlsZSB0aGF0IHRoZSB2ZXJpZmllciBsaW5rcyBhZ2FpbnN0PyBUaGF0J3MgdGhlIGNydWNpYWwgZGV0YWlsIHRvIGZpZ3VyZSBvdXQuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV2ZWFscy4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgY2x1ZXMgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjI0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MTkuNTczNTIwNDM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDI1Mjk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZXNcXFxcLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MTkuNjcyNTU1ODI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg0MDkyMjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSByaWdodCBpbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkNoZWNraW5nIEJQRiBWZXJpZmllciBJbmNsdXNpb24qKlxuXG5SaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQlBGIHZlcmlmaWVyJ3Mgb3BlcmF0aW9uLCBhbmQgdGhlIGlzc3VlIHNlZW1zIGxpa2UgaXQgbWlnaHQgcmVsYXRlIHRvIGhvdyBzdGF0ZSBpcyBoYW5kbGVkLiBHaXZlbiB0aGF0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIGhvdyB0aGUgdmVyaWZpZXIgY29kZSBpcyBzdHJ1Y3R1cmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gc3RhdGUgbWFuYWdlbWVudC4gVGhhdCBtZWFucywgbGV0J3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQgbWUgY2hlY2sgdGhlIGluY2x1c2lvbiBkaXJlY3RpdmVzLiBNeSB0YXJnZXQ6IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgc3RhdGVzLmNgIChvciBzb21lIHJlbGF0ZWQgc3RhdGUtbWFuYWdlbWVudCBjb21wb25lbnQpIGlzIGluY2x1ZGVkIGRpcmVjdGx5IG9yIHRocm91Z2ggc29tZSBvdGhlciBoZWFkZXIuIFRoaXMgd2lsbCBnaXZlIG1lIGEgdmVyeSBxdWljayBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBkaXJlY3QgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHZlcmlmaWVyIGl0c2VsZiBhbmQgYW55IHN0YXRlLWhhbmRsaW5nIG1vZHVsZXMuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB3aGVyZSB0byB0cmFjZSB0aGUgcHJvZ3JhbSB0byBmaW5kIGEgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjIzLjUxMzQ4MTM0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3OTUzNjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpbmNsdWRlLipzdGF0ZXNcXFxcLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MjMuNTgwMjg0ODk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1Mzc2NTA5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGlzIGJ1aWx0IHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgcnVsZXMgZm9yIGNvbXBpbGluZyBCUEYgcHJvZ3JhbXMsIGxpbmtpbmcgdGhlbSwgYW5kIGluY29ycG9yYXRpbmcgdGhlbSBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIHVzZWQgKGVzcGVjaWFsbHkgYC1PMmAsIGAtZlBJQ2AsIGAtV2FsbGAsIGAtV2Vycm9yYCksIGFueSBzcGVjaWZpYyBsaW5rZXIgc2NyaXB0cywgYW5kIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpbnRlcmFjdHMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBkdXJpbmcgdGhlIGJ1aWxkLiBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGJ1aWxkIHRhcmdldHMsIGFzIHRoZXNlIGNvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byBob3cgZGlmZmVyZW50IEJQRiBmZWF0dXJlcyBvciBhcmNoaXRlY3R1cmVzIGFyZSBoYW5kbGVkLiBJIGFsc28gbmVlZCB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgQlRGIGdlbmVyYXRpb24uIEZyb20gdGhlcmUgSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGJ1aWxkIHByb2Nlc3MgZG93biB0aGUgcmFiYml0IGhvbGUgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCBvdmVydmlldyBvZiBob3cgZXZlcnl0aGluZyBoYW5ncyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMDoyNy4xMTc5MzkzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai15IDo9IGNvcmUub1xcbiAgIDM6XFx0aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbiAgIDQ6XFx0IyBfX19icGZfcHJvZ19ydW4oKSBuZWVkcyBHQ1NFIGRpc2FibGVkIG9uIHg4Njsgc2VlIDMxOTNjMDgzNmYyMDMgZm9yIGRldGFpbHNcXG4gICA1OlxcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXFxuICAgNjpcXHRlbmRpZlxcbiAgIDc6XFx0Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19LRVlTKSx5KVxcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrZXlzLm9cXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDM0OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzU6XFx0ZW5kaWZcXG4gIDM2OlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzODpcXHRlbmRpZlxcbiAgMzk6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICA0MDpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgNDI6XFx0ZW5kaWZcXG4gIDQzOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbiAgNDU6XFx0ZW5kaWZcXG4gIDQ2OlxcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxuICA0NzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG4gIDQ4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICA0OTpcXHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4gIDUwOlxcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjI3LjExODA2MjUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NDExNTEwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gbG9va2luZyBhdCBsaW5lIDE0IG9mIHRoZSBtYWtlZmlsZSwgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9gIHRlbGxzIG1lIHRoYXQgb25seSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBuZWVkZWQgdG8gZW5hYmxlIHRoZSBjaGFuZ2VzIEknbSBpbnRlcmVzdGVkIGluLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZmlndXJlIG91dCAqd2hhdCogZXhhY3RseSBoYXMgY2hhbmdlZC4gVGltZSB0byBtZXRpY3Vsb3VzbHkgZGlzc2VjdCB0aGlzIGRpZmYuIExldCdzIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIG1vZGlmaWVkIGFuZCBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9ucywgYW5kIGFueSBhc3NvY2lhdGVkIGBGb2N1c1N5bWJvbHNgOlxuXG4xLiAgYHRudW1fc2V4dGAgaW4gYGtlcm5lbC9icGYvdG51bS5jYFxuMi4gIGBjaGVja19zY2FsYXJfaWRzYCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgKHN0YXRpYylcbjMuICBgcmVnc19leGFjdGAgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgIChzdGF0aWMpXG40LiAgYHJlZ3NhZmVgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAoc3RhdGljIG9yIGV4cG9ydGVkIGludGVybmFsbHk/IE5lZWQgdG8gY2hlY2sgaGVhZGVyIGZpbGVzLilcbjUuICBgX19tYXJrX3JlZ19rbm93bmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcbjYuICBgY2xlYXJfc2NhbGFyX2lkYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKVxuNy4gIGBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3ZgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpXG44LiAgYGNvZXJjZV9yZWdfdG9fc2l6ZWAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcbjkuICBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKVxuMTAuIGBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcbjExLiBgY2hlY2tfc3RhY2tfcmVhZGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcbjEyLiBgc2V4dF8zMl90b182NGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcbjEzLiBgY29lcmNlX3JlZ190b19zaXplX3N4YCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKVxuMTQuIGBjaGVja19tZW1fYWNjZXNzYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKVxuMTUuIGBhZGp1c3RfcmVnX21pbl9tYXhfdmFsc2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcbjE2LiBgY2hlY2tfYWx1X29wYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKVxuMTcuIGBfX2NvbGxlY3RfbGlua2VkX3JlZ3NgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpXG4xOC4gYGNvbGxlY3RfbGlua2VkX3JlZ3NgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpXG4xOS4gYHJlY29uc3RydWN0X3pleHQzMmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcbjIwLiBgcmVjb25zdHJ1Y3Rfc2V4dDMyYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKVxuMjEuIGBzeW5jX2xpbmtlZF9yZWdzYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKVxuMjIuIGBicGZfY2xlYXJfc2luZ3VsYXJfaWRzYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYFxuMjMuIGBicGZfY2hlY2tgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgXG5cblJpZ2h0LCBub3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGByZWdzYWZlYCwgYGJwZl9jbGVhcl9zaW5ndWxhcl9pZHNgLCBgc3luY19saW5rZWRfcmVnc2AsIGBjaGVja19hbHVfb3BgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGFuZCBgdG51bV9zZXh0YC4gQXJlIHRoZXkgc3RhdGljIHRvIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMsIG9yIGFyZSB0aGV5IGV4cG9ydGVkPyAgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGRlZmluaXRpb25zIGFuZCB0aGVuIGNoZWNrIGB2bWxpbnV4YCB0byBkZXRlcm1pbmUgd2hpY2ggb25lcyBhcmUgZ2xvYmFsIHN5bWJvbHMuIFRoYXQgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIEJQRiBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTg2LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MzMuOTU5MjE2MDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1NzY5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxib29sfHN0cnVjdCB0bnVtKSAoYnBmX2NsZWFyX3Npbmd1bGFyX2lkc3xyZWdzYWZlfHN5bmNfbGlua2VkX3JlZ3N8Y2hlY2tfYWx1X29wfGNoZWNrX21lbV9hY2Nlc3N8dG51bV9zZXh0fGJwZl9jaGVjaylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NmZy5jPTQ1Mz1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTU4OS0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjU5MDppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNTkxLXtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9NDEwPWludCBicGZfcHJlcGFyZV9idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzctXFxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgKiBjb25zdCBicGZfbWFwX3R5cGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo5MTppbnQgYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKGJwZnB0cl90IHVhZGRyLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkyLVxcdFxcdFxcdCAgICAgc2l6ZV90IGV4cGVjdGVkX3NpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3RudW0uYz0xOTY9c3RydWN0IHRudW0gdG51bV9jYXN0KHN0cnVjdCB0bnVtIGEsIHU4IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL3RudW0uYy0yMDItXFxua2VybmVsL2JwZi90bnVtLmM6MjAzOnN0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKVxcbmtlcm5lbC9icGYvdG51bS5jLTIwNC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgzODg9c3RhdGljIHUzMiBpZHNldF9jbnRfZ2V0KHN0cnVjdCBicGZfaWRzZXQgKmlkc2V0LCB1MzIgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg0MDMtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NDA0OnZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODQwNS1cXHRcXHRcXHQgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA0Nzk9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQ5Mi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA0OTM6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDk0LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5MTY9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDE2OmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjE0ODE9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE2MDQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNjA1OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTYwNi1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MzQuMDYyNzk4MTkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDcyODgzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLZXJuZWwgQlBGIFN0YXRlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzdGF0ZSBvZiBgcmVnc2FmZWAgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50IGlzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlZ2lzdGVyIHNhZmV0eSBpcyBtYW5hZ2VkIGhlcmUsIGFuZCBob3cgb3RoZXIgZnVuY3Rpb25zIGludGVycGxheSB3aXRoIHRoYXQuIEknbSBmb2N1c2luZyBvbiB0aGF0IHBhcnRpY3VsYXIgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgQlBGIHN0YXRlIGlzIGhhbmRsZWQgYW5kIHRvIHNlZSBpZiBJIGNhbiBzcG90IGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCByZXF1aXJlIGEgZGVlcCBkaXZlIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjUyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6MzcuMzcwMDg4NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjQyMzg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdzYWZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9iYWNrdHJhY2suYz02Nzk9dm9pZCBicGZfbWFya19hbGxfc2NhbGFyc19wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTc0OS0gKiBJbiB0aGUgZm9ybWVyIGNhc2UsIHByZWNpc2UgbWFya2luZ3MgaW4gY3VycmVudCBzdGF0ZSBhcmUgY29tcGxldGVseVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzUwOiAqIGlnbm9yZWQgYnkgc3RhdGUgY29tcGFyaXNvbiBjb2RlIChzZWUgcmVnc2FmZSgpIGZvciBkZXRhaWxzKS4gT25seVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzUxLSAqIGNoZWNrcG9pbnRlZCAoXFxcIm9sZFxcXCIpIHN0YXRlIHByZWNpc2UgbWFya2luZ3MgYXJlIGltcG9ydGFudCwgYW5kIGlmIG9sZFxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzUyOiAqIHN0YXRlJ3MgcmVnaXN0ZXIvc2xvdCBpcyBwcmVjaXNlLCByZWdzYWZlKCkgYXNzdW1lcyBjdXJyZW50IHN0YXRlJ3NcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTc1My0gKiByZWdpc3Rlci9zbG90IGFzIHByZWNpc2UgYW5kIGNoZWNrcyB2YWx1ZSByYW5nZXMgZXhhY3RseSBhbmQgcHJlY2lzZWx5LiBJZlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz00ODQ9ZW51bSBleGFjdF9sZXZlbCB7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5MC0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ5MTpzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDkyLVxcdFxcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTY4NT1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTczMi1cXHRcXHQgKiBDb25zdHJ1Y3QgYSBmYWtlIHJlZ2lzdGVyIGZvciBzdWNoIHN0YWNrIGFuZCBjYWxsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3MzM6XFx0XFx0ICogcmVnc2FmZSgpIHRvIGVuc3VyZSBzY2FsYXIgaWRzIGFyZSBjb21wYXJlZC5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTczNC1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzM4LVxcdFxcdFxcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IGN1cl9yZWcpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjczOTpcXHRcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzQwLVxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzc1LVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6Nzc2OlxcdFxcdFxcdGlmICghcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03NzctXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBpZG1hcCwgZXhhY3QpKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04MzA9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg0NC1cXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrX2FyZ19yZWdzW2ldIDogXFx1MDAyNm5vdF9pbml0O1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODQ1OlxcdFxcdGlmICghcmVnc2FmZShlbnYsIG9sZF9hcmcsIGN1cl9hcmcsIGlkbWFwLCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDYtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05Mjg9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0MS1cXHRcXHRpZiAoKCgxIFxcdTAwM2NcXHUwMDNjIGkpIFxcdTAwMjYgbGl2ZV9yZWdzKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQyOlxcdFxcdCAgICAhcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXJlZ3NbaV0sIFxcdTAwMjZjdXItXFx1MDAzZXJlZ3NbaV0sXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDMtXFx0XFx0XFx0ICAgICBcXHUwMDI2ZW52LVxcdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjM3LjQ3NjUyMDcxOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTgwNDUzNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQ3Jvc3MtTW9kdWxlIERlcGVuZGVuY2llczogYHN0YXRlcy5jYCBhbmQgYHZlcmlmaWVyLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gZGVwZW5kZW5jaWVzIGJldHdlZW4gYHN0YXRlcy5jYCBhbmQgYHZlcmlmaWVyLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgd2l0aGluIGBzdGF0ZXMuY2AgYXJlIGVpdGhlciBjYWxsZWQgZGlyZWN0bHkgYnkgYHZlcmlmaWVyLmNgLCBvciBhcmUgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzLCB3aGljaCBpbiB0aGlzIGNvbnRleHQsIGNvdWxkIGluY2x1ZGUgYHZlcmlmaWVyLmNgLiBUaGlzIGlzIGEgY2xhc3NpYyBkZXBlbmRlbmN5IGFuYWx5c2lzIHByb2JsZW0uIEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY3Jvc3MtbW9kdWxlIGZ1bmN0aW9uIGNhbGxzLCBsaWtlbHkgdXNpbmcgYSB0b29sIGlmIGF2YWlsYWJsZSwgb3IgbWFudWFsbHkgc2Nhbm5pbmcgdGhlIGNvZGUgaWYgbm8gdG9vbCBpcyBwcmVzZW50LiBUaGUgZXhwb3J0IHBhcnQgSSdsbCBsaWtlbHkgY2hlY2sgdGhyb3VnaCB0aGUgaGVhZGVyIGZpbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBob3cgY2xvc2VseSBjb3VwbGVkIHRoZXNlIHR3byBmaWxlcyBhcmUuIEFyZSB0aGVyZSBjbGVhciBpbnRlcmZhY2VzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHRpZ2h0LCBjb21wbGV4IHJlbGF0aW9uc2hpcHMsIG9yIG1vcmUgbW9kdWxhciBpbnRlcmFjdGlvbnM/IEtub3dpbmcgdGhpcyB3aWxsIGluZm9ybSBhbnkgcG90ZW50aWFsIHJlZmFjdG9yaW5nIG9yIGJ1ZyBmaXhpbmcgZWZmb3J0cyBJIG1pZ2h0IHVuZGVydGFrZSBsYXRlciBvbi4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZpbGVzIGZpdCBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzMjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMDo0Mi4wNTY5NzcxODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzQ5NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgfF5ib29sIHxedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTI1OT1zdGF0aWMgYm9vbCBpbmNvbXBsZXRlX3JlYWRfbWFya3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMjcyLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MjczOmludCBicGZfdXBkYXRlX2JyYW5jaF9jb3VudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNzQte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTk3PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjIxLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIyMjppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIyMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjQyLjE1NjczMTU1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDc5MDkwMjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNraW5nLCBhbmQgaXQgY2FsbHMgYSBidW5jaCBvZiBvdGhlciBmdW5jdGlvbnMgbGlrZSBgZnVuY19zdGF0ZXNfZXF1YWxgLCBgcmVnc2FmZWAsIGBjaGVja19zY2FsYXJfaWRzYCwgYW5kIGByZWdzX2V4YWN0YC4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGVCUEYgdmVyaWZpZXIgY2hhbmdlcyBhbmQgZGV0ZXJtaW5lIHdoYXQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuXG5cbkZpcnN0LCBJJ20gY2hlY2tpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBJIHNlZSBgYnBmX2NsZWFyX3Npbmd1bGFyX2lkc2AgaXMgZ2xvYmFsbHkgYWNjZXNzaWJsZSAoZXhwb3J0ZWQgdGhyb3VnaCBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGApIGFuZCBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGl0c2VsZi4gIEFsc28sIGB0bnVtX3NleHRgIGluIGBrZXJuZWwvYnBmL3RudW0uY2AgaXMgZXhwb3J0ZWQgKGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L3RudW0uaGApLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyBleHBvcnRlZCBmcm9tIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gIFRoZXJlIGFyZSBhbHNvIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHZlcmlmaWVyLmNgIGxpa2UgYGNoZWNrX2FsdV9vcGAsIGBjaGVja19tZW1fYWNjZXNzYCwgYHN5bmNfbGlua2VkX3JlZ3NgLCBgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHNgLCBgY2hlY2tfc3RhY2tfcmVhZGAsIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgLCBgcmVjb25zdHJ1Y3RfemV4dDMyYCwgYW5kIGByZWNvbnN0cnVjdF9zZXh0MzJgLlxuXG5Ob3csIGFjY29yZGluZyB0byBTeXprYWxsZXIgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlICpyaWdodCogb25lcyB0byB0YXJnZXQgZm9yIGZ1enppbmcuICBJIG5lZWQgdG8gYXZvaWQgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgYW5kIGluc3RlYWQgZm9jdXMgb24gc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5cG9pbnRzLiAgU3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIHRyaWNreSwgYnV0IEkgbmVlZCB0byBpZGVudGlmeSBub24tc3RhdGljIGNhbGxlcnMgdGhhdCBleGVyY2lzZSB0aG9zZSBjaGFuZ2VzLiAgU28sIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgZmVhdHVyZSBsb2dpYy5cblxuU28sIGxldCdzIGxpc3QgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBtb2RpZmllZCBvciByZWxldmFudCBpbiBga2VybmVsL2JwZi9gOiAgSGVyZeKAmXMgd2hhdCBJJ3ZlIGlkZW50aWZpZWQgYXMgY3JpdGljYWw6XG5cbiogICBgc3luY19saW5rZWRfcmVnc2BcbiogICBgY2hlY2tfYWx1X29wYFxuKiAgIGBjaGVja19tZW1fYWNjZXNzYFxuKiAgIGBhZGp1c3RfcmVnX21pbl9tYXhfdmFsc2BcbiogICBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgXG4qICAgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmBcbiogICBgY29lcmNlX3JlZ190b19zaXplX3N4YFxuKiAgIGB0bnVtX3NleHRgXG4qICAgYGJwZl9jbGVhcl9zaW5ndWxhcl9pZHNgXG4qICAgYGJwZl9pc19zdGF0ZV92aXNpdGVkYFxuKiAgIGByZWdzYWZlYFxuKiAgIGBicGZfY2hlY2tgXG5cbkknbSBhbHNvIGRvdWJsZS1jaGVja2luZyBhbGwgdGhlIGZpbGVzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdG8gZ2V0IGEgZnVsbCBwaWN0dXJlOlxuXG4xLiAgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgOiAgVGhlcmUgYXJlIGNoYW5nZXMgdG8gdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuXG4yLiAgYGluY2x1ZGUvbGludXgvdG51bS5oYDogIERlY2xhcmVzIGB0bnVtX3NleHRgLlxuMy4gIGBrZXJuZWwvYnBmL2xvZy5jYDogIEZvcm1hdHRpbmcgZm9yIGAubG8zMmAgYW5kIGAubG8zMnN4YC5cbjQuICBga2VybmVsL2JwZi9zdGF0ZXMuY2A6ICBUaGlzIGFmZmVjdHMgYGNoZWNrX3NjYWxhcl9pZHNgLCBgcmVnc19leGFjdGAsIGByZWdzYWZlYC5cbjUuICBga2VybmVsL2JwZi90bnVtLmNgOiAgVGhpcyBpbXBsZW1lbnRzIGB0bnVtX3NleHRgLlxuNi4gIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGluY2x1ZGluZyBgX19tYXJrX3JlZ19rbm93bmAsIGBjbGVhcl9zY2FsYXJfaWRgLCBgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92YCwgYGNvZXJjZV9yZWdfdG9fc2l6ZWAsIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfcmVhZGAsIGBzZXh0XzMyX3RvXzY0YCwgYGNvZXJjZV9yZWdfdG9fc2l6ZV9zeGAsIGBjaGVja19tZW1fYWNjZXNzYCwgYGFkanVzdF9yZWdfbWluX21heF92YWxzYCwgYGNoZWNrX2FsdV9vcGAsIGBfX2NvbGxlY3RfbGlua2VkX3JlZ3NgLCBgY29sbGVjdF9saW5rZWRfcmVnc2AsIGByZWNvbnN0cnVjdF96ZXh0MzJgLCBgcmVjb25zdHJ1Y3Rfc2V4dDMyYCwgYHN5bmNfbGlua2VkX3JlZ3NgLCBhbmQgYGJwZl9jbGVhcl9zaW5ndWxhcl9pZHNgLlxuNy4gIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYDogIFNlbGYgdGVzdCB1cGRhdGVzIGFuZCBuZXcgdGVzdHMgYXJlIGFkZGVkLlxuXG5Ob3csIGZvciBjb25maWcgcmVxdWlyZW1lbnRzLCBJIHNlZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlnLCBhcyBpdCBlbmFibGVzIHRoZSBlQlBGIHZlcmlmaWVyIGFuZCB0aGUgYGJwZigpYCBzeXNjYWxsLlxuXG5UbyBzdW1tYXJpemUsIEkndmUgZ290IHRoaXMgb3JnYW5pemVkIGludG8gYSBjbGVhciBzdHJ1Y3R1cmU6XG5cbiogICBgV29ydGhGdXp6aW5nYDogIFRydWVcbiogICBgRW5hYmxlQ29uZmlnc2A6ICBgXG5cbiIsIklucHV0VG9rZW5zIjozMjg2OSwiT3V0cHV0VG9rZW5zIjoyMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjUyLjk0NzYzODE0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODQxMzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInN5bmNfbGlua2VkX3JlZ3NcIixcbiAgICBcImNoZWNrX2FsdV9vcFwiLFxuICAgIFwiY2hlY2tfbWVtX2FjY2Vzc1wiLFxuICAgIFwiYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHNcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNvZXJjZV9yZWdfdG9fc2l6ZV9zeFwiLFxuICAgIFwidG51bV9zZXh0XCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICAgIFwiYnBmX2NsZWFyX3Npbmd1bGFyX2lkc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciBzY2FsYXIgcmVnaXN0ZXIgbGlua2FnZSwgaW50cm9kdWNpbmcgc3VicmVnIHRyYWNraW5nIChTVUJSRUdfWkVYVCwgU1VCUkVHX1NFWFQpIGZvciAzMi1iaXQgbmFycm93aW5nIG9wZXJhdGlvbnMsIHNpZ24tZXh0ZW5zaW9uIHRudW0gaGVscGVycyAodG51bV9zZXh0KSwgc3RhY2sgc3BpbGwvZmlsbCBzY2FsYXIgdHJhY2tpbmcsIGFuZCB1cGRhdGluZyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgKHJlZ3NhZmUpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyBhbmQgYm91bmRzIHRyYWNraW5nIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInN5bmNfbGlua2VkX3JlZ3NcIixcbiAgICBcImNoZWNrX2FsdV9vcFwiLFxuICAgIFwiY2hlY2tfbWVtX2FjY2Vzc1wiLFxuICAgIFwiYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHNcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNvZXJjZV9yZWdfdG9fc2l6ZV9zeFwiLFxuICAgIFwidG51bV9zZXh0XCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICAgIFwiYnBmX2NsZWFyX3Npbmd1bGFyX2lkc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciBzY2FsYXIgcmVnaXN0ZXIgbGlua2FnZSwgaW50cm9kdWNpbmcgc3VicmVnIHRyYWNraW5nIChTVUJSRUdfWkVYVCwgU1VCUkVHX1NFWFQpIGZvciAzMi1iaXQgbmFycm93aW5nIG9wZXJhdGlvbnMsIHNpZ24tZXh0ZW5zaW9uIHRudW0gaGVscGVycyAodG51bV9zZXh0KSwgc3RhY2sgc3BpbGwvZmlsbCBzY2FsYXIgdHJhY2tpbmcsIGFuZCB1cGRhdGluZyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgKHJlZ3NhZmUpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyBhbmQgYm91bmRzIHRyYWNraW5nIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjUzLjA3NjA2MDUzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTI3NDM1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMDo1My4wNzY2MjYyMTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1Mzc1MjE3Mjc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBhbmQgZW5oYW5jZXMgcmVnaXN0ZXIgcmVsYXRpb25zaGlwIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKHNwZWNpZmljYWxseSBoYW5kbGluZyBzY2FsYXIgc3VicmVnaXN0ZXIgcmVsYXRpb25zIGxpa2UgMzItYml0IHplcm8tIGFuZCBzaWduLWV4dGVuc2lvbnMsIG5hcnJvdyBzdGFjayBzcGlsbHMvZmlsbHMsIGFuZCBtb3ZpbmcgYWRkLWNvbnN0IGZsYWdzIGZyb20gcmVnaXN0ZXIgSURzIGludG8gZGVkaWNhdGVkIHN0cnVjdCBmaWVsZHMpLlxcblxcbi0gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlIChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhlIEJQRiB2ZXJpZmllciBkdXJpbmcgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuXFxuLSBSZWdpc3RlciBzdGF0ZSBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCAodmlhIG1lbXNldCBpbiBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Ugb3IgZXhwbGljaXQgYXNzaWdubWVudCBpbiBfX21hcmtfcmVnX2tub3duIGFuZCBjbGVhcl9zY2FsYXJfaWQpLCBzbyBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC5cXG4tIFB1cmUgYXJpdGhtZXRpYyBoZWxwZXJzIGxpa2UgdG51bV9zZXh0IG9wZXJhdGUgZW50aXJlbHkgb24gcGFzcy1ieS12YWx1ZSBzdHJ1Y3RzIHdpdGggaW5pdGlhbGl6ZWQgYXJndW1lbnRzLlxcbi0gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHJhbmdlIHRyYWNraW5nIG9yIHJlZ2lzdGVyIHN5bmNocm9uaXphdGlvbiBjb3VsZCBsZWFkIHRvIHVuc291bmQgdmVyaWZpZXIgbG9naWMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBhbmQgS0FTQU4sIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrIGludHJvZHVjZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmY5NWExM2Y1NmQ4NjJmZGI1NzhlZmExMGQwYzI4ZmMzZjE2ZmVkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE4OjMwOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDk3MjdkZjVhZjgzYWIuLjkyMGM5NDkwZWNjODIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMzUsNiArMzUsMjcgQEAgZW51bSBicGZfaXRlcl9zdGF0ZSB7XG4gXHRCUEZfSVRFUl9TVEFURV9EUkFJTkVELFxuIH07XG4gXG4rLypcbisgKiBSZWNvcmRzIHRoYXQgYSByZWdpc3RlciBpcyAoYmFzZSArIC1cdTAwM2VkZWx0YSkgd2l0aGluIGl0cyAtXHUwMDNlaWQgc2V0OlxuKyAqIHIxICs9IDEwOyAgIHIxIGdldHMgQUREX0NPTlNUXzY0IGRlbHRhXG4rICogdzMgKz0gMTA7ICAgcjMgZ2V0cyBBRERfQ09OU1RfMzIgZGVsdGFcbisgKi9cbitlbnVtIGJwZl9hZGRfY29uc3Qge1xuK1x0QUREX0NPTlNUX05PTkUgPSAwLFxuK1x0QUREX0NPTlNUXzMyLFx0XHQvKiBkZWx0YSB3YXMgYWRkZWQgd2l0aCBhIDMyLWJpdCBBTFUgb3AgKi9cbitcdEFERF9DT05TVF82NCxcdFx0LyogLi4uIHdpdGggYSA2NC1iaXQgQUxVIG9wICovXG4rfTtcbitcbisvKlxuKyAqIFJlY29yZHMgdGhhdCBhIHJlZ2lzdGVyIHNoYXJlcyBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSBvZiBpdHNcbisgKiAtXHUwMDNlaWQgc2V0LCBhbmQgaG93IGl0cyBoaWdoIGJpdHMgZm9sbG93IGZyb20gdGhlbS5cbisgKi9cbitlbnVtIGJwZl9zdWJyZWcge1xuK1x0U1VCUkVHX05PTkUgPSAwLFxuK1x0U1VCUkVHX1pFWFQsXHRcdC8qIGhpZ2ggYml0cyBhcmUgemVybyAoMzItYml0IHplcm8tZXh0ZW5kaW5nIG1vdikgKi9cbitcdFNVQlJFR19TRVhULFx0XHQvKiBoaWdoIGJpdHMgcmVwZWF0IGJpdCAzMSAoMzItYml0IHNpZ24tZXh0ZW5kaW5nIG1vdikgKi9cbit9O1xuK1xuIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXG4gXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xuQEAgLTEzNiwxNiArMTU3LDkgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUge1xuIFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cbiBcdCAqL1xuIFx0Lypcbi1cdCAqIFVwcGVyIGJpdCBvZiBJRCBpcyB1c2VkIHRvIHJlbWVtYmVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFwibGlua2VkXCJcbi1cdCAqIHJlZ2lzdGVycy4gRXhhbXBsZTpcbitcdCAqIFJlZ2lzdGVycyBzaGFyaW5nIGFuIC1cdTAwM2VpZCBhcmUgXCJsaW5rZWRcIjpcbiBcdCAqIHIxID0gcjI7ICAgIGJvdGggd2lsbCBoYXZlIHIxLVx1MDAzZWlkID09IHIyLVx1MDAzZWlkID09IE5cbi1cdCAqIHIxICs9IDEwOyAgIHIxLVx1MDAzZWlkID09IE4gfCBCUEZfQUREX0NPTlNUIGFuZCByMS1cdTAwM2VkZWx0YSA9PSAxMFxuLVx0ICogcjMgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjMtXHUwMDNlaWQgPT0gcjItXHUwMDNlaWQgPT0gTlxuLVx0ICogdzMgKz0gMTA7ICAgcjMtXHUwMDNlaWQgPT0gTiB8IEJQRl9BRERfQ09OU1QzMiBhbmQgcjMtXHUwMDNlZGVsdGEgPT0gMTBcbiBcdCAqL1xuLSNkZWZpbmUgQlBGX0FERF9DT05TVDY0ICgxVSBcdTAwM2NcdTAwM2MgMzEpXG4tI2RlZmluZSBCUEZfQUREX0NPTlNUMzIgKDFVIFx1MDAzY1x1MDAzYyAzMClcbi0jZGVmaW5lIEJQRl9BRERfQ09OU1QgKEJQRl9BRERfQ09OU1Q2NCB8IEJQRl9BRERfQ09OU1QzMilcbiBcdHUzMiBpZDtcbiBcdC8qXG4gXHQgKiBUcmFja3MgdGhlIHBhcmVudCBvYmplY3QgdGhpcyByZWdpc3RlciB3YXMgZGVyaXZlZCBmcm9tLlxuQEAgLTE2NCw2ICsxNzgsMTIgQEAgc3RydWN0IGJwZl9yZWdfc3RhdGUge1xuIFx0dTMyIGZyYW1lbm87XG4gXHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbid0IGFmZmVjdCBzYWZldHkgKi9cbiBcdGJvb2wgcHJlY2lzZTtcbitcdC8qXG4rXHQgKiBIb3cgdGhpcyByZWdpc3RlciByZWxhdGVzIHRvIHRoZSBvdGhlcnMgc2hhcmluZyBpdHMgLVx1MDAzZWlkLlxuK1x0ICogTm9uLXplcm8gb25seSBpZiAtXHUwMDNlaWQgaXMuXG4rXHQgKi9cbitcdGVudW0gYnBmX2FkZF9jb25zdCBhZGRfY29uc3Q6MjtcbitcdGVudW0gYnBmX3N1YnJlZyBzdWJyZWc6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90bnVtLmggYi9pbmNsdWRlL2xpbnV4L3RudW0uaFxuaW5kZXggY2EyY2ZlYzhkZTA4YS4uODY2ODAzZGU1ODQxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdG51bS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3RudW0uaFxuQEAgLTYzLDYgKzYzLDkgQEAgc3RydWN0IHRudW0gdG51bV91bmlvbihzdHJ1Y3QgdG51bSB0MSwgc3RydWN0IHRudW0gdDIpO1xuIC8qIFJldHVybiBAYSB3aXRoIGFsbCBidXQgdGhlIGxvd2VzdCBAc2l6ZSBieXRlcyBjbGVhcmVkICovXG4gc3RydWN0IHRudW0gdG51bV9jYXN0KHN0cnVjdCB0bnVtIGEsIHU4IHNpemUpO1xuIFxuKy8qIFJldHVybiB0aGUgbG93ZXN0IEBzaXplIGJ5dGVzIG9mIEBhIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyAqL1xuK3N0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKTtcbitcbiAvKiBTd2FwIHRoZSBieXRlcyBvZiBhIHRudW0gKi9cbiBzdHJ1Y3QgdG51bSB0bnVtX2Jzd2FwMTYoc3RydWN0IHRudW0gYSk7XG4gc3RydWN0IHRudW0gdG51bV9ic3dhcDMyKHN0cnVjdCB0bnVtIGEpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbG9nLmMgYi9rZXJuZWwvYnBmL2xvZy5jXG5pbmRleCBmYjAzMmRmZGMwZGVlLi5iNjdiYmQ0ZDU3ZjQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9sb2cuY1xuKysrIGIva2VybmVsL2JwZi9sb2cuY1xuQEAgLTY1MSw5ICs2NTEsMTMgQEAgc3RhdGljIHZvaWQgcHJpbnRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHZlcmJvc2UoZW52LCBcIiVzXCIsIGJ0Zl90eXBlX25hbWUocmVnLVx1MDAzZWJ0ZiwgcmVnLVx1MDAzZWJ0Zl9pZCkpO1xuIFx0dmVyYm9zZShlbnYsIFwiKFwiKTtcbiBcdGlmIChyZWctXHUwMDNlaWQpXG4tXHRcdHZlcmJvc2VfYShcImlkPSVkXCIsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpO1xuLVx0aWYgKHJlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbitcdFx0dmVyYm9zZV9hKFwiaWQ9JWRcIiwgcmVnLVx1MDAzZWlkKTtcbitcdGlmIChyZWctXHUwMDNlYWRkX2NvbnN0KVxuIFx0XHR2ZXJib3NlKGVudiwgXCIlK2RcIiwgcmVnLVx1MDAzZWRlbHRhKTtcbitcdGlmIChyZWctXHUwMDNlc3VicmVnID09IFNVQlJFR19aRVhUKVxuK1x0XHR2ZXJib3NlKGVudiwgXCIubG8zMlwiKTtcbitcdGVsc2UgaWYgKHJlZy1cdTAwM2VzdWJyZWcgPT0gU1VCUkVHX1NFWFQpXG4rXHRcdHZlcmJvc2UoZW52LCBcIi5sbzMyc3hcIik7XG4gXHRpZiAocmVnLVx1MDAzZXBhcmVudF9pZClcbiBcdFx0dmVyYm9zZV9hKFwicGFyZW50X2lkPSVkXCIsIHJlZy1cdTAwM2VwYXJlbnRfaWQpO1xuIFx0aWYgKHR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCA2NmZiMTFiNmM2YTc2Li4xNjE4Yzc3MTA1YWIwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTM2OSwxMyArMzY5LDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuICAqIGFuZCByNy5pZD0wIChib3RoIGluZGVwZW5kZW50KSwgd2l0aG91dCB0ZW1wIElEcyBib3RoIHdvdWxkIG1hcCBvbGRfaWQ9WFxuICAqIHRvIGN1cl9pZD0wIGFuZCBwYXNzLiBXaXRoIHRlbXAgSURzOiByNiBtYXBzIFgtXHUwMDNldGVtcDEsIHI3IHRyaWVzIHRvIG1hcFxuICAqIFgtXHUwMDNldGVtcDIsIGJ1dCBYIGlzIGFscmVhZHkgbWFwcGVkIHRvIHRlbXAxLCBzbyB0aGUgY2hlY2sgZmFpbHMgY29ycmVjdGx5LlxuLSAqXG4tICogV2hlbiBvbGRfaWQgaGFzIEJQRl9BRERfQ09OU1Qgc2V0LCB0aGUgY29tcG91bmQgaWQgKGJhc2UgfCBmbGFnKSBhbmQgdGhlXG4tICogYmFzZSBpZCAoZmxhZyBzdHJpcHBlZCkgbXVzdCBib3RoIG1hcCBjb25zaXN0ZW50bHkuIEV4YW1wbGU6IG9sZCBoYXNcbi0gKiByMi5pZD1BLCByMy5pZD1BfGZsYWcgKHIzID0gcjIgKyBkZWx0YSksIGN1ciBoYXMgcjIuaWQ9QiwgcjMuaWQ9Q3xmbGFnXG4tICogKHIzIGRlcml2ZWQgZnJvbSB1bnJlbGF0ZWQgcjQpLiBXaXRob3V0IHRoZSBiYXNlIGNoZWNrLCBpZG1hcCBnZXRzIHR3b1xuLSAqIGluZGVwZW5kZW50IGVudHJpZXMgQS1cdTAwM2VCIGFuZCBBfGZsYWctXHUwMDNlQ3xmbGFnLCBtaXNzaW5nIHRoYXQgQS1cdTAwM2VDIGNvbmZsaWN0c1xuLSAqIHdpdGggQS1cdTAwM2VCLiBUaGUgYmFzZSBJRCBjcm9zcy1jaGVjayBjYXRjaGVzIHRoaXMuXG4gICovXG4gc3RhdGljIGJvb2wgY2hlY2tfc2NhbGFyX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiB7XG5AQCAtMzg0LDE1ICszNzcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIFxuIFx0Y3VyX2lkID0gY3VyX2lkID8gY3VyX2lkIDogKytpZG1hcC1cdTAwM2V0bXBfaWRfZ2VuO1xuIFxuLVx0aWYgKCFjaGVja19pZHMob2xkX2lkLCBjdXJfaWQsIGlkbWFwKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKG9sZF9pZCBcdTAwMjYgQlBGX0FERF9DT05TVCkge1xuLVx0XHRvbGRfaWQgXHUwMDI2PSB+QlBGX0FERF9DT05TVDtcbi1cdFx0Y3VyX2lkIFx1MDAyNj0gfkJQRl9BRERfQ09OU1Q7XG4tXHRcdGlmICghY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuQEAgLTQ5MCw2ICs0NzUsOCBAQCBzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4ge1xuIFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgaWQpKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJvbGQtXHUwMDNlYWRkX2NvbnN0ID09IHJjdXItXHUwMDNlYWRkX2NvbnN0IFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJvbGQtXHUwMDNlc3VicmVnID09IHJjdXItXHUwMDNlc3VicmVnIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAgY2hlY2tfaWRzKHJvbGQtXHUwMDNlcGFyZW50X2lkLCByY3VyLVx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xuIH1cbkBAIC01NDIsOCArNTI5LDcgQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0XHQvKiBleHBsb3JlX2FsdV9saW1pdHMgZGlzYWJsZXMgdG51bV9pbigpIGFuZCByYW5nZV93aXRoaW4oKVxuIFx0XHRcdCAqIGxvZ2ljIGFuZCByZXF1aXJlcyBldmVyeXRoaW5nIHRvIGJlIHN0cmljdFxuIFx0XHRcdCAqL1xuLVx0XHRcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgICAgY2hlY2tfc2NhbGFyX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCk7XG4rXHRcdFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xuIFx0XHR9XG4gXHRcdGlmICghcm9sZC1cdTAwM2VwcmVjaXNlIFx1MDAyNlx1MDAyNiBleGFjdCA9PSBOT1RfRVhBQ1QpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtNTUxLDcgKzUzNyw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4gXHRcdCAqIExpbmtlZCByZWdpc3RlciB0cmFja2luZyB1c2VzIHJvbGQtXHUwMDNlaWQgdG8gZGV0ZWN0IHJlbGF0aW9uc2hpcHMuXG4gXHRcdCAqIFdoZW4gcm9sZC1cdTAwM2VpZCA9PSAwLCB0aGUgcmVnaXN0ZXIgaXMgaW5kZXBlbmRlbnQgYW5kIGFueSBsaW5raW5nXG4gXHRcdCAqIGluIHJjdXIgb25seSBhZGRzIGNvbnN0cmFpbnRzLiBXaGVuIHJvbGQtXHUwMDNlaWQgIT0gMCwgd2UgbXVzdCB2ZXJpZnlcbi1cdFx0ICogaWQgbWFwcGluZyBhbmQgKGZvciBCUEZfQUREX0NPTlNUKSBvZmZzZXQgY29uc2lzdGVuY3kuXG4rXHRcdCAqIGlkIG1hcHBpbmcgYW5kIHRoYXQgdGhlIGxpbmsga2luZHMgYWdyZWUsIGFsb25nIHdpdGggYW55IGRlbHRhXG4rXHRcdCAqIHRoZXkgY2FycnkuXG4gXHRcdCAqXG4gXHRcdCAqICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiBcdFx0ICogfCAgICAgICAgICAgICAgICAgIHwgcm9sZC1cdTAwM2VpZCAgfCByb2xkICsgQUREX0NPTlNUIHwgcm9sZC1cdTAwM2VpZCA9PSAwIHxcbkBAIC01ODcsMTcgKzU3NCwxNiBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHQgKi9cbiBcbiBcdFx0Lypcbi1cdFx0ICogQUREX0NPTlNUIGZsYWdzIG11c3QgbWF0Y2ggZXhhY3RseTogQlBGX0FERF9DT05TVDMyIGFuZFxuLVx0XHQgKiBCUEZfQUREX0NPTlNUNjQgaGF2ZSBkaWZmZXJlbnQgbGlua2luZyBzZW1hbnRpY3MgaW5cbi1cdFx0ICogc3luY19saW5rZWRfcmVncygpIChhbHUzMiB6ZXJvLWV4dGVuZHMsIGFsdTY0IGRvZXMgbm90KSxcbi1cdFx0ICogc28gcHJ1bmluZyBhY3Jvc3MgZGlmZmVyZW50IGZsYWcgdHlwZXMgaXMgdW5zYWZlLlxuK1x0XHQgKiBUaGUgbGluayBraW5kcyBtdXN0IG1hdGNoOiBhbHUzMiBhbmQgYWx1NjQgYWRkcyBoYXZlIGRpZmZlcmVudFxuK1x0XHQgKiBsaW5raW5nIHNlbWFudGljcyBpbiBzeW5jX2xpbmtlZF9yZWdzKCkgKGFsdTMyIHplcm8tZXh0ZW5kcyxcbitcdFx0ICogYWx1NjQgZG9lcyBub3QpLCBzbyBwcnVuaW5nIGFjcm9zcyB0aGVtIGlzIHVuc2FmZS5cbiBcdFx0ICovXG4tXHRcdGlmIChyb2xkLVx1MDAzZWlkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKHJvbGQtXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpICE9IChyY3VyLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSlcbitcdFx0aWYgKHJvbGQtXHUwMDNlaWQgXHUwMDI2XHUwMDI2IChyb2xkLVx1MDAzZWFkZF9jb25zdCAhPSByY3VyLVx1MDAzZWFkZF9jb25zdCB8fFxuK1x0XHRcdFx0IHJvbGQtXHUwMDNlc3VicmVnICE9IHJjdXItXHUwMDNlc3VicmVnKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdC8qIEJvdGggaGF2ZSBvZmZzZXQgbGlua2FnZTogb2Zmc2V0cyBtdXN0IG1hdGNoICovXG4tXHRcdGlmICgocm9sZC1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkgXHUwMDI2XHUwMDI2IHJvbGQtXHUwMDNlZGVsdGEgIT0gcmN1ci1cdTAwM2VkZWx0YSlcbitcdFx0aWYgKHJvbGQtXHUwMDNlYWRkX2NvbnN0IFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWRlbHRhICE9IHJjdXItXHUwMDNlZGVsdGEpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHRpZiAoIWNoZWNrX3NjYWxhcl9pZHMocm9sZC1cdTAwM2VpZCwgcmN1ci1cdTAwM2VpZCwgaWRtYXApKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdG51bS5jIGIva2VybmVsL2JwZi90bnVtLmNcbmluZGV4IGVjOWMzMTBjZjVkN2YuLmUxZGM1N2FmZDNkMzMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RudW0uY1xuKysrIGIva2VybmVsL2JwZi90bnVtLmNcbkBAIC0yMDAsNiArMjAwLDIxIEBAIHN0cnVjdCB0bnVtIHRudW1fY2FzdChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKVxuIFx0cmV0dXJuIGE7XG4gfVxuIFxuK3N0cnVjdCB0bnVtIHRudW1fc2V4dChzdHJ1Y3QgdG51bSBhLCB1OCBzaXplKVxuK3tcbitcdHU4IHNoaWZ0ID0gNjQgLSBzaXplICogODtcbitcbitcdC8qXG4rXHQgKiBTaGlmdGluZyB0aGUgZmllbGQgdXAgdG8gdGhlIHRvcCBhbmQgYmFjayBkb3duIGFyaXRobWV0aWNhbGx5XG4rXHQgKiByZXBsaWNhdGVzIGl0cyBzaWduIGJpdCB0aHJvdWdoIHRoZSBoaWdoIGhhbGYuIEFwcGx5aW5nIHRoYXQgdG8gdGhlXG4rXHQgKiBtYXNrIGFzIHdlbGwgY2FycmllcyBvdmVyIHdoZXRoZXIgdGhlIHNpZ24gd2FzIGtub3duOiBhbiB1bmtub3duXG4rXHQgKiBzaWduIGJpdCBsZWF2ZXMgZXZlcnkgaGlnaCBiaXQgdW5rbm93bi5cbitcdCAqL1xuK1x0YSA9IHRudW1fY2FzdChhLCBzaXplKTtcbitcdHJldHVybiBUTlVNKChzNjQpKGEudmFsdWUgXHUwMDNjXHUwMDNjIHNoaWZ0KSBcdTAwM2VcdTAwM2Ugc2hpZnQsXG4rXHRcdCAgICAoczY0KShhLm1hc2sgXHUwMDNjXHUwMDNjIHNoaWZ0KSBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuK31cbitcbiBib29sIHRudW1faXNfYWxpZ25lZChzdHJ1Y3QgdG51bSBhLCB1NjQgc2l6ZSlcbiB7XG4gXHRpZiAoIXNpemUpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA5ZTc5NzUwZTI0ODA4Li45ZTYzZWRkYjkwMjNiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xOTA3LDYgKzE5MDcsOCBAQCBzdGF0aWMgdm9pZCBfX21hcmtfcmVnX2tub3duKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHU2NCBpbW0pXG4gXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpIC0gc2l6ZW9mKHJlZy1cdTAwM2V0eXBlKSk7XG4gXHRyZWctXHUwMDNlaWQgPSAwO1xuIFx0cmVnLVx1MDAzZXBhcmVudF9pZCA9IDA7XG4rXHRyZWctXHUwMDNlYWRkX2NvbnN0ID0gQUREX0NPTlNUX05PTkU7XG4rXHRyZWctXHUwMDNlc3VicmVnID0gU1VCUkVHX05PTkU7XG4gXHRfX19tYXJrX3JlZ19rbm93bihyZWcsIGltbSk7XG4gfVxuIFxuQEAgLTM0ODAsNiArMzQ4Miw4IEBAIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdHJlZy1cdTAwM2VpZCA9IDA7XG4gXHRyZWctXHUwMDNlZGVsdGEgPSAwO1xuK1x0cmVnLVx1MDAzZWFkZF9jb25zdCA9IEFERF9DT05TVF9OT05FO1xuK1x0cmVnLVx1MDAzZXN1YnJlZyA9IFNVQlJFR19OT05FO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbkBAIC0zNDkxLDggKzM0OTUsMTAgQEAgc3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiBUaGUgdmVyaWZpZXIgaXMgcHJvY2Vzc2luZyByWCA9IHJZIGluc24gYW5kXG4gXHQgKiByWS1cdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cbiBcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxuK1x0ICogQSAtXHUwMDNlc3VicmVnIGxpbmsgY2FuIGJlIHNoYXJlZDogaXQgZGVzY3JpYmVzIHNyYydzIG93biByZWxhdGlvbnNoaXBcbitcdCAqIHRvIHRoZSBzZXQsIG5vdCBhIGRlbHRhIHRvIHVud2luZC5cbiBcdCAqL1xuLVx0aWYgKHNyY19yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpXG4rXHRpZiAoc3JjX3JlZy1cdTAwM2VhZGRfY29uc3QpXG4gXHRcdGNsZWFyX3NjYWxhcl9pZChzcmNfcmVnKTtcbiBcdC8qXG4gXHQgKiBFbnN1cmUgdGhhdCBzcmNfcmVnIGhhcyBhIHZhbGlkIElEIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG9cbkBAIC0zNTAzLDYgKzM1MDksMzEgQEAgc3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHNyY19yZWctXHUwMDNlaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcbit7XG4rXHR1NjQgbWFzaztcbitcbitcdC8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi9cbitcdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy1cdTAwM2V2YXJfb2ZmLCBzaXplKTtcbitcbitcdC8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqL1xuK1x0bWFzayA9ICgodTY0KTEgXHUwMDNjXHUwMDNjIChzaXplICogOCkpIC0gMTtcbitcdGlmICgocmVnX3VtaW4ocmVnKSBcdTAwMjYgfm1hc2spID09IChyZWdfdW1heChyZWcpIFx1MDAyNiB+bWFzaykpXG4rXHRcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCByZWdfdW1pbihyZWcpIFx1MDAyNiBtYXNrLCByZWdfdW1heChyZWcpIFx1MDAyNiBtYXNrKTtcbitcdGVsc2VcbitcdFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spO1xuK1xuK1x0LypcbitcdCAqIElmIHNpemUgaXMgc21hbGxlciB0aGFuIDMyYml0IHJlZ2lzdGVyIHRoZSAzMmJpdCByZWdpc3RlclxuK1x0ICogdmFsdWVzIGFyZSBhbHNvIHRydW5jYXRlZCBzbyB3ZSBwdXNoIDY0LWJpdCBib3VuZHMgaW50b1xuK1x0ICogMzItYml0IGJvdW5kcy4gQWJvdmUgd2VyZSB0cnVuY2F0ZWQgXHUwMDNjIDMyLWJpdHMgYWxyZWFkeS5cbitcdCAqL1xuK1x0aWYgKHNpemUgXHUwMDNjIDQpXG4rXHRcdF9fbWFya19yZWczMl91bmJvdW5kZWQocmVnKTtcbitcbitcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzYXZlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxuIFx0XHRcdFx0aW50IHNwaSwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbkBAIC0zNjM0LDE1ICszNjY1LDM4IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbiBcdGlmIChyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbiBcdFx0Ym9vbCByZWdfdmFsdWVfZml0cztcbitcdFx0Ym9vbCBzdWJyZWdfbGluaztcbiBcbiBcdFx0cmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcbitcdFx0LypcbitcdFx0ICogQSBuYXJyb3dpbmcgc3BpbGwgc3RvcmVzIHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgc291cmNlLCBzb1xuK1x0XHQgKiB0aGUgc2xvdCBpcyB0aGVpciB6ZXJvLWV4dGVuc2lvbjogcmVjb3JkIGEgbG93LTMyIGxpbmtcbitcdFx0ICogcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlIHJlbGF0aW9uLCBhcyBhIDMyLWJpdCBtb3YgZG9lcy5cbitcdFx0ICogQSBzdG9yZSBuZXZlciBzaWduLWV4dGVuZHMsIHNvIHRoZXJlIGlzIG9ubHkgb25lIGtpbmQgaGVyZS5cbitcdFx0ICovXG4rXHRcdHN1YnJlZ19saW5rID0gIXJlZ192YWx1ZV9maXRzIFx1MDAyNlx1MDAyNiBzaXplID09IDQ7XG4rXG4gXHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHJlZyBoYWQgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbiBvbiBzcGlsbC4gKi9cbi1cdFx0aWYgKHJlZ192YWx1ZV9maXRzKVxuK1x0XHRpZiAocmVnX3ZhbHVlX2ZpdHMgfHwgc3VicmVnX2xpbmspXG4gXHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4tXHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbi1cdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcbitcdFx0aWYgKCFyZWdfdmFsdWVfZml0cykge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogT25seSB0aGUgbG93IEBzaXplIGJ5dGVzIHJlYWNoIG1lbW9yeSwgc28gcmVjb3JkXG4rXHRcdFx0ICogd2hhdCB0aGUgc2xvdCBob2xkcyByYXRoZXIgdGhhbiB0aGUgd2lkZXIgc291cmNlXG4rXHRcdFx0ICogaXQgY2FtZSBmcm9tLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNvZXJjZV9yZWdfdG9fc2l6ZShcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBzaXplKTtcbitcdFx0XHRpZiAoc3VicmVnX2xpbmsgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2VpZClcbitcdFx0XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuc3VicmVnID0gU1VCUkVHX1pFWFQ7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIE5vdGhpbmcgdG8gcmVsYXRlOiBlaXRoZXIgdGhlIHNvdXJjZSBoYXMgbm9cbitcdFx0XHRcdCAqIGlkIHRvIHNoYXJlLCBvciB0aGUgc3RvcmUgaXMgbmFycm93ZXIgdGhhblxuK1x0XHRcdFx0ICogdGhlIDMyIGJpdHMgYSBsaW5rIGNhbiBkZXNjcmliZS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xuK1x0XHR9XG4gXHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4gXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuQEAgLTM5MjEsNyArMzk3NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGluXG4gc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgLyogZnVuYyB3aGVyZSBzcmMgcmVnaXN0ZXIgcG9pbnRzIHRvICovXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnJlZ19zdGF0ZSxcbi1cdFx0XHRcdCAgICAgIGludCBvZmYsIGludCBzaXplLCBpbnQgZHN0X3JlZ25vKVxuK1x0XHRcdFx0ICAgICAgaW50IG9mZiwgaW50IHNpemUsIGludCBkc3RfcmVnbm8sXG4rXHRcdFx0XHQgICAgICBib29sIGlzX2xkc3gpXG4ge1xuIFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSB2c3RhdGUtXHUwMDNlZnJhbWVbdnN0YXRlLVx1MDAzZWN1cmZyYW1lXTtcbkBAIC0zOTYyLDE4ICs0MDE3LDM0IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2M9IHNwaWxsX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbi1cdFx0XHRcdGlmIChlbnYtXHUwMDNlYnBmX2NhcGFibGUgXHUwMDI2XHUwMDI2IHNpemUgPT0gNCBcdTAwMjZcdTAwMjYgc3BpbGxfc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ICAgIGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2M9IDMyKVxuK1x0XHRcdFx0Ym9vbCBuYXJyb3dpbmcgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNlIHNpemUgKiBCSVRTX1BFUl9CWVRFO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIEEgbmFycm93aW5nIGZpbGwga2VlcHMgb25seSB0aGUgc2xvdCdzIGxvdyAzMiBiaXRzLFxuK1x0XHRcdFx0ICogc28gcmVjb3JkIGEgbG93LTMyIGxpbmsgcmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlXG4rXHRcdFx0XHQgKiByZWxhdGlvbiwgYXMgYSAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSBkb2VzLlxuK1x0XHRcdFx0ICogV2hpY2gga2luZCBkZXBlbmRzIG9uIGhvdyB0aGUgbG9hZCBmaWxscyB0aGUgaGlnaFxuK1x0XHRcdFx0ICogaGFsZiwgaGVuY2UgaXNfbGRzeC5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0Ym9vbCBzdWJyZWdfbGluayA9IG5hcnJvd2luZyBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0O1xuK1xuK1x0XHRcdFx0aWYgKGVudi1cdTAwM2VicGZfY2FwYWJsZSBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgIChzdWJyZWdfbGluayB8fCAoc3BpbGxfc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNiAhbmFycm93aW5nKSkpXG4gXHRcdFx0XHRcdC8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uXG4gXHRcdFx0XHRcdCAqIHdpdGggdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9uIGZpbGwuXG4gXHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCByZWcpO1xuIFx0XHRcdFx0c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKnJlZztcbiBcbi1cdFx0XHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBmaWxsLlxuLVx0XHRcdFx0ICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzZSBzaXplICogQklUU19QRVJfQllURSlcbitcdFx0XHRcdGlmIChzdWJyZWdfbGluayBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZWlkKVxuK1x0XHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnID1cbitcdFx0XHRcdFx0XHRpc19sZHN4ID8gU1VCUkVHX1NFWFQgOiBTVUJSRUdfWkVYVDtcbitcdFx0XHRcdGVsc2UgaWYgKG5hcnJvd2luZylcbitcdFx0XHRcdFx0LypcbitcdFx0XHRcdFx0ICogTm90aGluZyB0byByZWxhdGU6IGVpdGhlciB0aGUgc2xvdCBoYXNcbitcdFx0XHRcdFx0ICogbm8gaWQgdG8gc2hhcmUsIG9yIHRoZSBmaWxsIGlzIG5hcnJvd2VyXG4rXHRcdFx0XHRcdCAqIHRoYW4gdGhlIDMyIGJpdHMgYSBsaW5rIGNhbiBkZXNjcmliZS5cbitcdFx0XHRcdFx0ICogY29lcmNlX3JlZ190b19zaXplIGFkanVzdHMgdGhlIGJvdW5kcy5cbitcdFx0XHRcdFx0ICovXG4gXHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10pO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpbnQgc3BpbGxfY250ID0gMCwgemVyb19jbnQgPSAwO1xuQEAgLTQxMzgsNyArNDIwOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnXG4gICovXG4gc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgcHRyX2FyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSxcbi1cdFx0XHQgICAgaW50IGRzdF9yZWdubylcbitcdFx0XHQgICAgaW50IGRzdF9yZWdubywgYm9vbCBpc19sZHN4KVxuIHtcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XG4gXHRpbnQgZXJyO1xuQEAgLTQxNzcsNyArNDI0OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKCF2YXJfb2ZmKSB7XG4gXHRcdG9mZiArPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiBcdFx0ZXJyID0gY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxuLVx0XHRcdFx0XHRcdCBkc3RfcmVnbm8pO1xuK1x0XHRcdFx0XHRcdCBkc3RfcmVnbm8sIGlzX2xkc3gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogVmFyaWFibGUgb2Zmc2V0IHN0YWNrIHJlYWRzIG5lZWQgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmdcbiBcdFx0ICogdGhhbiBmaXhlZCBvZmZzZXQgb25lcy4gTm90ZSB0aGF0IGRzdF9yZWdubyBcdTAwM2U9IDAgb24gdGhpc1xuQEAgLTU3MDIsMzMgKzU3NzMsMTkgQEAgc3RhdGljIHZvaWQgemV4dF8zMl90b182NChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIHJlZ191MzJfbWluKHJlZyksIHJlZ191MzJfbWF4KHJlZykpO1xuIH1cbiBcbi0vKiB0cnVuY2F0ZSByZWdpc3RlciB0byBzbWFsbGVyIHNpemUgKGluIGJ5dGVzKVxuLSAqIG11c3QgYmUgY2FsbGVkIHdpdGggc2l6ZSBcdTAwM2MgQlBGX1JFR19TSVpFXG4rLypcbisgKiBUaGUgc2lnbi1leHRlbmRpbmcgY291bnRlcnBhcnQuIFNpZ25lZCBib3VuZHMgY2Fycnkgb3ZlciBkaXJlY3RseSBiZWNhdXNlXG4rICogc2lnbiBleHRlbnNpb24gaXMgbW9ub3RvbmljIG92ZXIgdGhlIHNpZ25lZCAzMi1iaXQgcmFuZ2UuXG4gICovXG4tc3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuK3N0YXRpYyB2b2lkIHNleHRfMzJfdG9fNjQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4tXHR1NjQgbWFzaztcbi1cbi1cdC8qIGNsZWFyIGhpZ2ggYml0cyBpbiBiaXQgcmVwcmVzZW50YXRpb24gKi9cbi1cdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jYXN0KHJlZy1cdTAwM2V2YXJfb2ZmLCBzaXplKTtcbi1cbi1cdC8qIGZpeCBhcml0aG1ldGljIGJvdW5kcyAqL1xuLVx0bWFzayA9ICgodTY0KTEgXHUwMDNjXHUwMDNjIChzaXplICogOCkpIC0gMTtcbi1cdGlmICgocmVnX3VtaW4ocmVnKSBcdTAwMjYgfm1hc2spID09IChyZWdfdW1heChyZWcpIFx1MDAyNiB+bWFzaykpXG4tXHRcdHJlZ19zZXRfdXJhbmdlNjQocmVnLCByZWdfdW1pbihyZWcpIFx1MDAyNiBtYXNrLCByZWdfdW1heChyZWcpIFx1MDAyNiBtYXNrKTtcbi1cdGVsc2Vcbi1cdFx0cmVnX3NldF91cmFuZ2U2NChyZWcsIDAsIG1hc2spO1xuLVxuLVx0LyogSWYgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMzJiaXQgcmVnaXN0ZXIgdGhlIDMyYml0IHJlZ2lzdGVyXG4tXHQgKiB2YWx1ZXMgYXJlIGFsc28gdHJ1bmNhdGVkIHNvIHdlIHB1c2ggNjQtYml0IGJvdW5kcyBpbnRvXG4tXHQgKiAzMi1iaXQgYm91bmRzLiBBYm92ZSB3ZXJlIHRydW5jYXRlZCBcdTAwM2MgMzItYml0cyBhbHJlYWR5LlxuLVx0ICovXG4tXHRpZiAoc2l6ZSBcdTAwM2MgNClcbi1cdFx0X19tYXJrX3JlZzMyX3VuYm91bmRlZChyZWcpO1xuLVxuLVx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4rXHRyZWctXHUwMDNldmFyX29mZiA9IHRudW1fc2V4dChyZWctXHUwMDNldmFyX29mZiwgNCk7XG4rXHRyZWdfc2V0X3NyYW5nZTY0KHJlZywgcmVnX3MzMl9taW4ocmVnKSwgcmVnX3MzMl9tYXgocmVnKSk7XG4gfVxuIFxuKy8qIHRydW5jYXRlIHJlZ2lzdGVyIHRvIHNtYWxsZXIgc2l6ZSAoaW4gYnl0ZXMpXG4rICogbXVzdCBiZSBjYWxsZWQgd2l0aCBzaXplIFx1MDAzYyBCUEZfUkVHX1NJWkVcbisgKi9cbiBzdGF0aWMgdm9pZCBzZXRfc2V4dDY0X2RlZmF1bHRfdmFsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuIHtcbiBcdGlmIChzaXplID09IDEpIHtcbkBAIC01NzQ4LDYgKzU4MDUsNyBAQCBzdGF0aWMgdm9pZCBzZXRfc2V4dDY0X2RlZmF1bHRfdmFsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcbiB7XG4gXHRzNjQgaW5pdF9zNjRfbWF4LCBpbml0X3M2NF9taW4sIHM2NF9tYXgsIHM2NF9taW4sIHU2NF9jdmFsO1xuK1x0czY0IGZpZWxkX3NtaW4sIGZpZWxkX3NtYXg7XG4gXHR1NjQgdG9wX3NtYXhfdmFsdWUsIHRvcF9zbWluX3ZhbHVlO1xuIFx0dTY0IG51bV9iaXRzID0gc2l6ZSAqIDg7XG4gXG5AQCAtNTc2Nyw2ICs1ODI1LDI3IEBAIHN0YXRpYyB2b2lkIGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgc2l6ZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0aWYgKHNpemUgPT0gMSkge1xuK1x0XHRmaWVsZF9zbWluID0gUzhfTUlOO1xuK1x0XHRmaWVsZF9zbWF4ID0gUzhfTUFYO1xuK1x0fSBlbHNlIGlmIChzaXplID09IDIpIHtcbitcdFx0ZmllbGRfc21pbiA9IFMxNl9NSU47XG4rXHRcdGZpZWxkX3NtYXggPSBTMTZfTUFYO1xuK1x0fSBlbHNlIHtcbitcdFx0Lyogc2l6ZSA9PSA0ICovXG4rXHRcdGZpZWxkX3NtaW4gPSBTMzJfTUlOO1xuK1x0XHRmaWVsZF9zbWF4ID0gUzMyX01BWDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcmFuZ2UgYWxyZWFkeSBmaXRzIHRoZSBmaWVsZCwgc28gKHNOKXYgPT0gdiBmb3IgZXZlcnkgdmFsdWUgdGhlXG4rXHQgKiByZWdpc3RlciBjYW4gaG9sZCBhbmQgdGhlIHNpZ24gZXh0ZW5zaW9uIGNoYW5nZXMgbm90aGluZy4gVGhlIHRlc3RzXG4rXHQgKiBiZWxvdyBjYW5ub3QgcmVhY2ggdGhpcyBjYXNlIG9uY2Ugc21pbiBpcyBuZWdhdGl2ZTogYSBuZWdhdGl2ZSBzbWluXG4rXHQgKiBhbmQgYSBub24tbmVnYXRpdmUgc21heCBuZXZlciBzaGFyZSB0aGVpciBoaWdoIGJpdHMuXG4rXHQgKi9cbitcdGlmIChyZWdfc21pbihyZWcpIFx1MDAzZT0gZmllbGRfc21pbiBcdTAwMjZcdTAwMjYgcmVnX3NtYXgocmVnKSBcdTAwM2M9IGZpZWxkX3NtYXgpXG4rXHRcdHJldHVybjtcbitcbiBcdHRvcF9zbWF4X3ZhbHVlID0gKCh1NjQpcmVnX3NtYXgocmVnKSBcdTAwM2VcdTAwM2UgbnVtX2JpdHMpIFx1MDAzY1x1MDAzYyBudW1fYml0cztcbiBcdHRvcF9zbWluX3ZhbHVlID0gKCh1NjQpcmVnX3NtaW4ocmVnKSBcdTAwM2VcdTAwM2UgbnVtX2JpdHMpIFx1MDAzY1x1MDAzYyBudW1fYml0cztcbiBcbkBAIC02NjAxLDcgKzY2ODAsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFxuIFx0XHRpZiAodCA9PSBCUEZfUkVBRClcbiBcdFx0XHRlcnIgPSBjaGVja19zdGFja19yZWFkKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLFxuLVx0XHRcdFx0XHQgICAgICAgdmFsdWVfcmVnbm8pO1xuK1x0XHRcdFx0XHQgICAgICAgdmFsdWVfcmVnbm8sIGlzX2xkc3gpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGUoZW52LCByZWcsIG9mZiwgc2l6ZSxcbiBcdFx0XHRcdFx0XHR2YWx1ZV9yZWdubywgaW5zbl9pZHgpO1xuQEAgLTY2OTgsMTMgKzY3NzcsMTUgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcbiBcdFx0XHQgKiBTaWduLWV4dGVuc2lvbiBjYW4gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZSByZWxhdGl2ZVxuIFx0XHRcdCAqIHRvIGEgc2NhbGFyIGl0IGlzIGxpbmtlZCB3aXRoIGJ5IGlkIChlLmcuIGEgemVyby1cbiBcdFx0XHQgKiBleHRlbmRpbmcgZmlsbCBvZiB0aGUgc2FtZSBzcGlsbGVkIHN0YWNrIHNsb3QpLCB0aHVzXG4tXHRcdFx0ICogZHJvcCB0aGUgc2hhcmVkIGlkIGluIHRoYXQgY2FzZS5cbitcdFx0XHQgKiBkcm9wIHRoZSBzaGFyZWQgaWQgaW4gdGhhdCBjYXNlLiBBIC1cdTAwM2VzdWJyZWcgbGluayBpc1xuK1x0XHRcdCAqIHRoZSBleGNlcHRpb246IGl0IGFscmVhZHkgcmVjb3JkcyB0aGF0IG9ubHkgdGhlIGxvd1xuK1x0XHRcdCAqIDMyIGJpdHMgYXJlIHNoYXJlZCwgYW5kIGhvdyB0aGUgaGlnaCBoYWxmIGZvbGxvd3MuXG4gXHRcdFx0ICovXG4gXHRcdFx0Ym9vbCBub19zZXh0ID0gcmVnX3VtYXgoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pIFx1MDAzY1xuIFx0XHRcdFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgKHNpemUgKiBCSVRTX1BFUl9CWVRFIC0gMSkpO1xuIFxuIFx0XHRcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSwgc2l6ZSk7XG4tXHRcdFx0aWYgKCFub19zZXh0KVxuK1x0XHRcdGlmICghbm9fc2V4dCBcdTAwMjZcdTAwMjYgIXJlZ3NbdmFsdWVfcmVnbm9dLnN1YnJlZylcbiBcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNjExNyw3ICsxNjE5OCw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRvZmYgPSAtb2ZmO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChkc3RfcmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSB7XG4rXHRcdGlmIChkc3RfcmVnLVx1MDAzZWFkZF9jb25zdCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhlIHJlZ2lzdGVyIGFscmVhZHkgd2VudCB0aHJvdWdoIHJYICs9IHZhbFxuIFx0XHRcdCAqIHdlIGNhbm5vdCBhY2N1bXVsYXRlIGFub3RoZXIgdmFsIGludG8gcngtXHUwMDNlb2ZmLlxuQEAgLTE2MTI2LDkgKzE2MjA3LDkgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpZiAoYWx1MzIpXG4tXHRcdFx0XHRkc3RfcmVnLVx1MDAzZWlkIHw9IEJQRl9BRERfQ09OU1QzMjtcbitcdFx0XHRcdGRzdF9yZWctXHUwMDNlYWRkX2NvbnN0ID0gQUREX0NPTlNUXzMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdGRzdF9yZWctXHUwMDNlaWQgfD0gQlBGX0FERF9DT05TVDY0O1xuK1x0XHRcdFx0ZHN0X3JlZy1cdTAwM2VhZGRfY29uc3QgPSBBRERfQ09OU1RfNjQ7XG4gXHRcdFx0ZHN0X3JlZy1cdTAwM2VkZWx0YSA9IG9mZjtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbkBAIC0xNjIyMCwxMiArMTYzMDEsMjMgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNyY19yZWctXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUpIHtcbiBcdFx0XHRcdFx0XHRib29sIG5vX3NleHQ7XG4rXHRcdFx0XHRcdFx0LypcbitcdFx0XHRcdFx0XHQgKiBBIDMyLWJpdCBzaWduIGV4dGVuc2lvbiBrZWVwcyB0aGUgbG93IDMyXG4rXHRcdFx0XHRcdFx0ICogYml0cywgc28gcmVjb3JkIGEgbG93LTMyIGxpbmsgYXMgdGhlXG4rXHRcdFx0XHRcdFx0ICogemVyby1leHRlbmRpbmcgbW92IGRvZXMuIEEgc2VsZi1tb3ZcbitcdFx0XHRcdFx0XHQgKiBxdWFsaWZpZXMgb25seSBpZiBzcmMgaXMgYWxyZWFkeSBsaW5rZWQuXG4rXHRcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdFx0Ym9vbCBzdWJyZWdfbGluayA9IChpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMykgPT0gNCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0XHRcdFx0ICAgKHNyY19yZWcgIT0gZHN0X3JlZyB8fFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgc3JjX3JlZy1cdTAwM2VpZCk7XG4gXG4gXHRcdFx0XHRcdFx0bm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuLVx0XHRcdFx0XHRcdGlmIChub19zZXh0KVxuK1x0XHRcdFx0XHRcdGlmIChub19zZXh0IHx8IHN1YnJlZ19saW5rKVxuIFx0XHRcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbi1cdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4rXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0IFx1MDAyNlx1MDAyNiBzdWJyZWdfbGluayBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbitcdFx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnID0gU1VCUkVHX1NFWFQ7XG4rXHRcdFx0XHRcdFx0ZWxzZSBpZiAoIW5vX3NleHQpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4gXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbkBAIC0xNjI0MiwxNSArMTYzMzQsMjIgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0fSBlbHNlIGlmIChzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XG4gXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZW9mZiA9PSAwKSB7XG4gXHRcdFx0XHRcdFx0Ym9vbCBpc19zcmNfcmVnX3UzMiA9IGdldF9yZWdfd2lkdGgoc3JjX3JlZykgXHUwMDNjPSAzMjtcbitcdFx0XHRcdFx0XHQvKlxuK1x0XHRcdFx0XHRcdCAqIEEgd2lkZSBzcmMgc2hhcmVzIG9ubHkgaXRzIGxvdyAzMiBiaXRzLiBBXG4rXHRcdFx0XHRcdFx0ICogZnVsbCBsaW5rIHdvdWxkIGxldCBkc3QncyBbMCwgVTMyX01BWF1cbitcdFx0XHRcdFx0XHQgKiBwcm9wYWdhdGUgb250byBzcmMncyB1bmtub3duIGhpZ2ggYml0cywgc29cbitcdFx0XHRcdFx0XHQgKiByZWNvcmQgYSBsb3ctMzItb25seSBsaW5rIGluc3RlYWQuIEFcbitcdFx0XHRcdFx0XHQgKiBzZWxmLW1vdiBoYXMgbm90aGluZyB0byBsaW5rLlxuK1x0XHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRcdGJvb2wgc3VicmVnX2xpbmsgPSAhaXNfc3JjX3JlZ191MzIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdFx0XHRcdCAgIHNyY19yZWcgIT0gZHN0X3JlZztcbiBcbi1cdFx0XHRcdFx0XHRpZiAoaXNfc3JjX3JlZ191MzIpXG4rXHRcdFx0XHRcdFx0aWYgKGlzX3NyY19yZWdfdTMyIHx8IHN1YnJlZ19saW5rKVxuIFx0XHRcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbi1cdFx0XHRcdFx0XHQvKiBNYWtlIHN1cmUgSUQgaXMgY2xlYXJlZCBpZiBzcmNfcmVnIGlzIG5vdCBpbiB1MzJcbi1cdFx0XHRcdFx0XHQgKiByYW5nZSBvdGhlcndpc2UgZHN0X3JlZyBtaW4vbWF4IGNvdWxkIGJlIGluY29ycmVjdGx5XG4tXHRcdFx0XHRcdFx0ICogcHJvcGFnYXRlZCBpbnRvIHNyY19yZWcgYnkgc3luY19saW5rZWRfcmVncygpXG4tXHRcdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdFx0aWYgKCFpc19zcmNfcmVnX3UzMilcbitcdFx0XHRcdFx0XHRpZiAoc3VicmVnX2xpbmsgXHUwMDI2XHUwMDI2IHNyY19yZWctXHUwMDNlaWQpXG4rXHRcdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZyA9IFNVQlJFR19aRVhUO1xuK1x0XHRcdFx0XHRcdGVsc2UgaWYgKCFpc19zcmNfcmVnX3UzMilcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0XHQvKiBjYXNlOiBXMSA9IChzOCwgczE2KVcyICovXG5AQCAtMTcwNjcsNyArMTcxNjYsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdFxuIHtcbiBcdHN0cnVjdCBsaW5rZWRfcmVnICplO1xuIFxuLVx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCAocmVnLVx1MDAzZWlkIFx1MDAyNiB+QlBGX0FERF9DT05TVCkgIT0gaWQpXG4rXHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZy1cdTAwM2VpZCAhPSBpZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0ZSA9IGxpbmtlZF9yZWdzX3B1c2gocmVnX3NldCk7XG5AQCAtMTcwOTUsNyArMTcxOTQsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR1MTYgbGl2ZV9yZWdzO1xuIFx0aW50IGksIGo7XG4gXG4tXHRpZCA9IGlkIFx1MDAyNiB+QlBGX0FERF9DT05TVDtcbiBcdGZvciAoaSA9IHZzdGF0ZS1cdTAwM2VjdXJmcmFtZTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIFx0XHRsaXZlX3JlZ3MgPSBhdXhbYnBmX2ZyYW1lX2luc25faWR4KHZzdGF0ZSwgaSldLmxpdmVfcmVnc19iZWZvcmU7XG4gXHRcdGZ1bmMgPSB2c3RhdGUtXHUwMDNlZnJhbWVbaV07XG5AQCAtMTcxMTQsNiArMTcyMTIsNDAgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFNldCBAcmVnIHRvIHRoZSB6ZXJvLWV4dGVuc2lvbiBvZiBAa25vd25fcmVnJ3MgbG93IDMyIGJpdHM6IGl0IHNoYXJlcyB0aG9zZVxuKyAqIGJpdHMgYW5kIGl0cyBoaWdoIGhhbGYgaXMgemVyby4gQ29weSB0aGUgYmFzZSB0byBrZWVwIGl0cyBwcmVjaXNlIGxvdy0zMlxuKyAqIHRudW0sIHRoZW4gcmUtYXBwbHkgdGhlIHpleHRfMzJfdG9fNjQoKSB0aGUgMzItYml0IG1vdiBpdHNlbGYgdXNlZC5cbisgKiBAcmVnLVx1MDAzZWlkIGFuZCAtXHUwMDNlZGVsdGEgYWxyZWFkeSBlcXVhbCBAa25vd25fcmVnJ3M7IG9ubHkgLVx1MDAzZXN1YnJlZyBpcyBpdHMgb3duLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJlY29uc3RydWN0X3pleHQzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqa25vd25fcmVnKVxuK3tcbitcdGVudW0gYnBmX3N1YnJlZyBzdWJyZWcgPSByZWctXHUwMDNlc3VicmVnO1xuK1xuK1x0KnJlZyA9ICprbm93bl9yZWc7XG4rXHRyZWctXHUwMDNlc3VicmVnID0gc3VicmVnO1xuK1x0emV4dF8zMl90b182NChyZWcpO1xuK1x0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4rfVxuK1xuKy8qXG4rICogVGhlIHNpZ24tZXh0ZW5kaW5nIGNvdW50ZXJwYXJ0LiBOb3RlIHRoaXMgZHJpdmVzIG9mZiB0aGUgYmFzZSdzIDMyLWJpdFxuKyAqIHJhbmdlLCBub3QgY29lcmNlX3JlZ190b19zaXplX3N4KCk6IGFmdGVyIGEgMzItYml0IGNvbXBhcmUgaXQgaXMgdGhlIGxvd1xuKyAqIGhhbGYgdGhhdCBoYXMgYmVlbiBuYXJyb3dlZCwgYW5kIHRoZSA2NC1iaXQgYm91bmRzIHN0aWxsIGRlc2NyaWJlIHRoZVxuKyAqIGJhc2UncyBoaWdoIGJpdHMsIHdoaWNoIGFyZSBub3Qgb3Vycy5cbisgKi9cbitzdGF0aWMgdm9pZCByZWNvbnN0cnVjdF9zZXh0MzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZylcbit7XG4rXHRlbnVtIGJwZl9zdWJyZWcgc3VicmVnID0gcmVnLVx1MDAzZXN1YnJlZztcbitcbitcdCpyZWcgPSAqa25vd25fcmVnO1xuK1x0cmVnLVx1MDAzZXN1YnJlZyA9IHN1YnJlZztcbitcdHNleHRfMzJfdG9fNjQocmVnKTtcbitcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xuK31cbitcbiAvKiBGb3IgYWxsIFIgaW4gbGlua2VkX3JlZ3MsIGNvcHkga25vd25fcmVnIHJhbmdlIGludG8gUlxuICAqIGlmIFItXHUwMDNlaWQgPT0ga25vd25fcmVnLVx1MDAzZWlkLlxuICAqL1xuQEAgLTE3MTMxLDE4ICsxNzI2Myw0NCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdFx0OiBcdTAwMjZ2c3RhdGUtXHUwMDNlZnJhbWVbZS1cdTAwM2VmcmFtZW5vXS1cdTAwM2VzdGFja1tlLVx1MDAzZXNwaV0uc3BpbGxlZF9wdHI7XG4gXHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnID09IGtub3duX3JlZylcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKChyZWctXHUwMDNlaWQgXHUwMDI2IH5CUEZfQUREX0NPTlNUKSAhPSAoa25vd25fcmVnLVx1MDAzZWlkIFx1MDAyNiB+QlBGX0FERF9DT05TVCkpXG4rXHRcdGlmIChyZWctXHUwMDNlaWQgIT0ga25vd25fcmVnLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHQvKlxuK1x0XHQgKiBBIC1cdTAwM2VzdWJyZWcgcmVnaXN0ZXIgc2hhcmVzIG9ubHkgdGhlIGJhc2UncyBsb3cgMzIgYml0cywgc28gaXRcbitcdFx0ICogaXMgcmVidWlsdCByYXRoZXIgdGhhbiBjb3BpZWQuIE5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGFcbitcdFx0ICogZGVsdGEsIHNvIHNraXAgaWYgZWl0aGVyIHNpZGUgaGFzIG9uZSAoc291bmQsIGxlc3MgcHJlY2lzZSkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmVnLVx1MDAzZXN1YnJlZykge1xuK1x0XHRcdGlmIChyZWctXHUwMDNlYWRkX2NvbnN0IHx8IGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRpZiAocmVnLVx1MDAzZXN1YnJlZyA9PSBTVUJSRUdfWkVYVClcbitcdFx0XHRcdHJlY29uc3RydWN0X3pleHQzMihyZWcsIGtub3duX3JlZyk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmVjb25zdHJ1Y3Rfc2V4dDMyKHJlZywga25vd25fcmVnKTtcbitcdFx0XHRpZiAoZS1cdTAwM2Vpc19yZWcpXG4rXHRcdFx0XHRtYXJrX3JlZ19zY3JhdGNoZWQoZW52LCBlLVx1MDAzZXJlZ25vKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgZS1cdTAwM2VzcGkpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSByZXZlcnNlOiBrbm93bl9yZWcga25vd3Mgb25seSBpdHMgbG93IDMyIGJpdHMsIHdoaWNoIHNheVxuK1x0XHQgKiBub3RoaW5nIGFib3V0IHJlZydzIGhpZ2ggaGFsZi5cbitcdFx0ICovXG4rXHRcdGlmIChrbm93bl9yZWctXHUwMDNlc3VicmVnKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIG1peGVkIDMyLzY0LWJpdCBsaW5rczogdGhlIGRlbHRhIHJlbGF0aW9uc2hpcCBkb2Vzbid0XG4gXHRcdCAqIGhvbGQgYWNyb3NzIGRpZmZlcmVudCBBTFUgd2lkdGhzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCgocmVnLVx1MDAzZWlkIF4ga25vd25fcmVnLVx1MDAzZWlkKSBcdTAwMjYgQlBGX0FERF9DT05TVCkgPT0gQlBGX0FERF9DT05TVClcbitcdFx0aWYgKHJlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2IGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZWctXHUwMDNlYWRkX2NvbnN0ICE9IGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICgoIShyZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIFx1MDAyNlx1MDAyNiAhKGtub3duX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkpIHx8XG4rXHRcdGlmICgoIXJlZy1cdTAwM2VhZGRfY29uc3QgXHUwMDI2XHUwMDI2ICFrbm93bl9yZWctXHUwMDNlYWRkX2NvbnN0KSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHR9IGVsc2Uge1xuK1x0XHRcdGVudW0gYnBmX2FkZF9jb25zdCBzYXZlZF9hZGRfY29uc3QgPSByZWctXHUwMDNlYWRkX2NvbnN0O1xuIFx0XHRcdHMzMiBzYXZlZF9vZmYgPSByZWctXHUwMDNlZGVsdGE7XG4gXHRcdFx0dTMyIHNhdmVkX2lkID0gcmVnLVx1MDAzZWlkO1xuIFxuQEAgLTE3MTUyLDE2ICsxNzMxMCwxOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdC8qIHJlZyA9IGtub3duX3JlZzsgcmVnICs9IGRlbHRhICovXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuLVx0XHRcdCAqIHdpbGwgYmUgaW5jb3JyZWN0LlxuK1x0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgYWRkX2NvbnN0LCBvdGhlcndpc2UgYW5vdGhlclxuK1x0XHRcdCAqIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZWctXHUwMDNlZGVsdGEgPSBzYXZlZF9vZmY7XG4gXHRcdFx0cmVnLVx1MDAzZWlkID0gc2F2ZWRfaWQ7XG4rXHRcdFx0cmVnLVx1MDAzZWFkZF9jb25zdCA9IHNhdmVkX2FkZF9jb25zdDtcbiBcbiBcdFx0XHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbiBcdFx0XHRzY2FsYXJfbWluX21heF9hZGQocmVnLCBcdTAwMjZmYWtlX3JlZyk7XG4gXHRcdFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX2FkZChyZWctXHUwMDNldmFyX29mZiwgZmFrZV9yZWcudmFyX29mZik7XG4tXHRcdFx0aWYgKChyZWctXHUwMDNlaWQgfCBrbm93bl9yZWctXHUwMDNlaWQpIFx1MDAyNiBCUEZfQUREX0NPTlNUMzIpXG4rXHRcdFx0aWYgKHJlZy1cdTAwM2VhZGRfY29uc3QgPT0gQUREX0NPTlNUXzMyIHx8XG4rXHRcdFx0ICAgIGtub3duX3JlZy1cdTAwM2VhZGRfY29uc3QgPT0gQUREX0NPTlNUXzMyKVxuIFx0XHRcdFx0emV4dF8zMl90b182NChyZWcpO1xuIFx0XHRcdHJlZ19ib3VuZHNfc3luYyhyZWcpO1xuIFx0XHR9XG5AQCAtMTgyNTUsNyArMTg0MTUsNyBAQCB2b2lkIGJwZl9jbGVhcl9zaW5ndWxhcl9pZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFyZWctXHUwMDNlaWQpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlkc2V0X2NudF9pbmMoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpO1xuK1x0XHRpZHNldF9jbnRfaW5jKGlkc2V0LCByZWctXHUwMDNlaWQpO1xuIFx0fSkpO1xuIFxuIFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoc3QsIGZ1bmMsIHJlZywgKHtcbkBAIC0xODI2Myw3ICsxODQyMyw3IEBAIHZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXJlZy1cdTAwM2VpZClcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXG4rXHRcdGlmIChpZHNldF9jbnRfZ2V0KGlkc2V0LCByZWctXHUwMDNlaWQpID09IDEpXG4gXHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG4gXHR9KSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IGViODhkOWNlNmMzNDguLjQ1YmZhMDJhNTMzODAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0yNjksNiArMjY5LDE0IEBAXG4gI2RlZmluZSBDQU5fVVNFX0JQRl9TVFxuICNlbmRpZlxuIFxuKyNpZiAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fFx0XFxcbisgICAgIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8XHRcdFxcXG4rICAgICBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtKSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkgfHxcdFxcXG4rICAgICBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfbG9vbmdhcmNoKSkgXHUwMDI2XHUwMDI2XHRcdFx0XHRcXFxuK1x0KF9fY2xhbmdfbWFqb3JfXyBcdTAwM2U9IDE4IHx8IGRlZmluZWQoX19CUEZfRkVBVFVSRV9NT1ZTWCkpXG4rI2RlZmluZSBDQU5fVVNFX01PVlNYXG4rI2VuZGlmXG4rXG4gI2lmIF9fY2xhbmdfbWFqb3JfXyBcdTAwM2U9IDE4IFx1MDAyNlx1MDAyNiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0XFxcbiBcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8XHRcdFx0XHRcXFxuIFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG5pbmRleCBkZjhkNTMwOTY1N2UxLi5iNGVhZGJkODgzNTdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBfX25ha2VkIHZvaWQgc3ViMzJfZnVsbF9vdmVyZmxvdyh2b2lkKVxuIFNFQyhcInNvY2tldFwiKVxuIF9fZGVzY3JpcHRpb24oXCIzMi1iaXQgc3VidHJhY3Rpb24sIHBhcnRpYWwgb3ZlcmZsb3csIHJlc3VsdCBpbiB1bmJvdW5kZWQgdTMyIGJvdW5kc1wiKVxuIF9fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuLV9fbXNnKFwiMzogKDFjKSB3MyAtPSB3MiB7ey4qfX0gUjM9c2NhbGFyKHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKVwiKVxuK19fbXNnKFwiMzogKDFjKSB3MyAtPSB3MiB7ey4qfX0gUjM9c2NhbGFyKGlkPXt7WzAtOV0rfX0tMS5sbzMyLHNtaW49MCxzbWF4PXVtYXg9MHhmZmZmZmZmZix2YXJfb2ZmPSgweDA7IDB4ZmZmZmZmZmYpKVwiKVxuIF9fcmV0dmFsKDApXG4gX19uYWtlZCB2b2lkIHN1YjMyX3BhcnRpYWxfb3ZlcmZsb3codm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xpbmtlZF9zY2FsYXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuY1xuaW5kZXggZDU3MWZiZmM4NmEzYS4uY2E3NDcxZjAyOTNkZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9saW5rZWRfc2NhbGFycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGlua2VkX3NjYWxhcnMuY1xuQEAgLTM0OSw4ICszNDksOCBAQCBsMF8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gfVxuIFxuIC8qXG4tICogVGVzdCB0aGF0IHN5bmNfbGlua2VkX3JlZ3MoKSBjaGVja3MgcmVnLVx1MDAzZWlkICh0aGUgbGlua2VkIHRhcmdldCByZWdpc3Rlcilcbi0gKiBmb3IgQlBGX0FERF9DT05TVDMyIHJhdGhlciB0aGFuIGtub3duX3JlZy1cdTAwM2VpZCAodGhlIGJyYW5jaCByZWdpc3RlcikuXG4rICogVGVzdCB0aGF0IHN5bmNfbGlua2VkX3JlZ3MoKSBjaGVja3MgdGhlIGxpbmtlZCB0YXJnZXQgcmVnaXN0ZXIgKHJlZykgZm9yXG4rICogQUREX0NPTlNUXzMyIHJhdGhlciB0aGFuIHRoZSBicmFuY2ggcmVnaXN0ZXIgKGtub3duX3JlZykuXG4gICovXG4gU0VDKFwic29ja2V0XCIpXG4gX19zdWNjZXNzXG5AQCAtMzYwLDcgKzM2MCw3IEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX3pleHRfbGlua2VkX3JlZyh2b2lkKVxuIFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiBcdHc2ID0gdzA7XHRcdC8qIHI2IGluIFswLCAweEZGRkZGRkZGXSAqL1x0XFxcbiBcdHI3ID0gcjY7XHRcdC8qIGxpbmtlZDogc2FtZSBpZCBhcyByNiAqL1x0XFxcbi1cdHc3ICs9IDE7XHRcdC8qIGFsdTMyOiByNy5pZCB8PSBCUEZfQUREX0NPTlNUMzIgKi8gXFxcbitcdHc3ICs9IDE7XHRcdC8qIEFERF9DT05TVF8zMiBkZWx0YSAqLyBcXFxuIFx0cjggPSAweEZGRkZmZmZmIGxsO1x0XHRcdFx0XHRcXFxuIFx0aWYgcjYgXHUwMDNjIHI4IGdvdG8gbDBfJT07XHRcdFx0XHRcdFxcXG4gXHQvKiByNiBpbiBbMHhGRkZGRkZGRiwgMHhGRkZGRkZGRl0gKi9cdFx0XHRcXFxuQEAgLTM4MSw3ICszODEsNyBAQCBsMF8lPTpcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiAvKlxuICAqIFRlc3QgdGhhdCBzeW5jX2xpbmtlZF9yZWdzKCkgc2tpcHMgcHJvcGFnYXRpb24gd2hlbiBvbmUgcmVnaXN0ZXIgdXNlZFxuLSAqIGFsdTMyIChCUEZfQUREX0NPTlNUMzIpIGFuZCB0aGUgb3RoZXIgdXNlZCBhbHU2NCAoQlBGX0FERF9DT05TVDY0KS5cbisgKiBhbHUzMiAoQUREX0NPTlNUXzMyKSBhbmQgdGhlIG90aGVyIHVzZWQgYWx1NjQgKEFERF9DT05TVF82NCkuXG4gICogVGhlIGRlbHRhIHJlbGF0aW9uc2hpcCBkb2Vzbid0IGhvbGQgYWNyb3NzIGRpZmZlcmVudCBBTFUgd2lkdGhzLlxuICAqL1xuIFNFQyhcInNvY2tldFwiKVxuQEAgLTM5MiwxMyArMzkyLDEzIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX2FsdTY0X2Nyb3NzX3R5cGUodm9pZClcbiBcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4gXHR3NiA9IHcwO1x0XHQvKiByNiBpbiBbMCwgMHhGRkZGRkZGRl0gKi9cdFxcXG4gXHRyNyA9IHI2O1x0XHQvKiBsaW5rZWQ6IHNhbWUgaWQgYXMgcjYgKi9cdFxcXG4tXHR3NyArPSAxO1x0XHQvKiBhbHUzMjogQlBGX0FERF9DT05TVDMyLCBkZWx0YSA9IDEgKi8gXFxcbitcdHc3ICs9IDE7XHRcdC8qIEFERF9DT05TVF8zMiBkZWx0YSAqLyBcXFxuIFx0cjggPSByNjtcdFx0LyogbGlua2VkOiBzYW1lIGlkIGFzIHI2ICovXHRcXFxuLVx0cjggKz0gMjtcdFx0LyogYWx1NjQ6IEJQRl9BRERfQ09OU1Q2NCwgZGVsdGEgPSAyICovIFxcXG4rXHRyOCArPSAyO1x0XHQvKiBBRERfQ09OU1RfNjQgZGVsdGEgKi8gXFxcbiBcdHI5ID0gMHhGRkZGZmZmZiBsbDtcdFx0XHRcdFx0XFxcbiBcdGlmIHI3IFx1MDAzYyByOSBnb3RvIGwwXyU9O1x0XHRcdFx0XHRcXFxuIFx0LyogcjcgPSAweEZGRkZGRkZGICovXHRcdFx0XHRcdFxcXG4tXHQvKiBzeW5jOiBrbm93bl9yZWc9cjcgKEFERF9DT05TVDMyKSwgcmVnPXI4IChBRERfQ09OU1Q2NCkgKi8gXFxcbitcdC8qIHN5bmM6IGtub3duX3JlZz1yNyAoQUREX0NPTlNUXzMyKSwgcmVnPXI4IChBRERfQ09OU1RfNjQpICovIFxcXG4gXHQvKiBXaXRob3V0IGZpeDogcjggPSB6ZXh0KDB4RkZGRkZGRkYgKyAxKSA9IDAgKi9cdFxcXG4gXHQvKiBXaXRoIGZpeDogcjggc3RheXMgWzIsIDB4MTAwMDAwMDAxXSAocjggXHUwMDNlPSAyKSAqL1x0XFxcbiBcdGlmIHI4IFx1MDAzZSAwIGdvdG8gbDFfJT07XHRcdFx0XHRcdFxcXG5AQCAtNDE2LDcgKzQxNiw3IEBAIGwwXyU9Olx0XHRcdFx0XHRcdFx0XHRcXFxuIC8qXG4gICogVGVzdCB0aGF0IHJlZ3NhZmUoKSBwcmV2ZW50cyBwcnVuaW5nIHdoZW4gdHdvIHBhdGhzIHJlYWNoIHRoZSBzYW1lIHByb2dyYW1cbiAgKiBwb2ludCB3aXRoIGxpbmtlZCByZWdpc3RlcnMgY2FycnlpbmcgZGlmZmVyZW50IEFERF9DT05TVCBmbGFncyAob25lXG4tICogQlBGX0FERF9DT05TVDMyIGZyb20gYWx1MzIsIGFub3RoZXIgQlBGX0FERF9DT05TVDY0IGZyb20gYWx1NjQpLlxuKyAqIEFERF9DT05TVF8zMiBmcm9tIGFsdTMyLCBhbm90aGVyIEFERF9DT05TVF82NCBmcm9tIGFsdTY0KS5cbiAgKi9cbiBTRUMoXCJzb2NrZXRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuQEAgLTQzMSwxMSArNDMxLDExIEBAIF9fbmFrZWQgdm9pZCBzY2FsYXJzX2FsdTMyX2FsdTY0X3JlZ3NhZmVfcHJ1bmluZyh2b2lkKVxuIFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbiBcdGlmIHIwIFx1MDAzZSAwIGdvdG8gbF9wYXRoYl8lPTtcdFx0XHRcdFxcXG4gXHQvKiBQYXRoIEE6IGFsdTMyICovXHRcdFx0XHRcdFxcXG4tXHR3NyArPSAxO1x0XHQvKiBCUEZfQUREX0NPTlNUMzIsIGRlbHRhID0gMSAqL1xcXG4rXHR3NyArPSAxO1x0XHQvKiBBRERfQ09OU1RfMzIgZGVsdGEgKi9cXFxuIFx0Z290byBsX21lcmdlXyU9O1x0XHRcdFx0XHRcXFxuIGxfcGF0aGJfJT06XHRcdFx0XHRcdFx0XHRcXFxuIFx0LyogUGF0aCBCOiBhbHU2NCAqL1x0XHRcdFx0XHRcXFxuLVx0cjcgKz0gMTtcdFx0LyogQlBGX0FERF9DT05TVDY0LCBkZWx0YSA9IDEgKi9cXFxuK1x0cjcgKz0gMTtcdFx0LyogQUREX0NPTlNUXzY0IGRlbHRhICovXFxcbiBsX21lcmdlXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiBcdC8qIE1lcmdlIHBvaW50OiByZWdzYWZlKCkgY29tcGFyZXMgcGF0aCBCIGFnYWluc3QgY2FjaGVkIHBhdGggQS4gKi8gXFxcbiBcdC8qIE5hcnJvdyByNiB0byB0cmlnZ2VyIHN5bmNfbGlua2VkX3JlZ3MgZm9yIHI3ICovXHRcXFxuQEAgLTU5Myw3ICs1OTMsNyBAQCBsX2V4aXRfJT06XHRcdFx0XHRcdFx0XHRcXFxuIH1cbiBcbiAvKlxuLSAqIFRlc3QgdGhhdCBzdGFsZSBkZWx0YSBmcm9tIGEgY2xlYXJlZCBCUEZfQUREX0NPTlNUIGRvZXMgbm90IGxlYWtcbisgKiBUZXN0IHRoYXQgc3RhbGUgZGVsdGEgZnJvbSBhIGNsZWFyZWQgQUREX0NPTlNUXyogZG9lcyBub3QgbGVha1xuICAqIHRocm91Z2ggYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KCkgaW50byBhIG5ldyBpZCwgY2F1c2luZ1xuICAqIHN5bmNfbGlua2VkX3JlZ3MoKSB0byBjb21wdXRlIGFuIGluY29ycmVjdCBvZmZzZXQuXG4gICovXG5AQCAtNjA1LDEwICs2MDUsMTAgQEAgX19uYWtlZCB2b2lkIHNjYWxhcnNfc3RhbGVfZGVsdGFfZnJvbV9jbGVhcmVkX2lkKHZvaWQpXG4gXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbiBcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4gXHRyNiA9IHIwO1x0XHQvKiByNiB1bmtub3duLCBnZXRzIGlkIEEgKi9cdFxcXG4tXHRyNiArPSA1O1x0XHQvKiBpZCBBfEFERF9DT05TVCwgZGVsdGEgNSAqL1x0XFxcbitcdHI2ICs9IDU7XHRcdC8qIGlkIEEsIEFERF9DT05TVF82NCBkZWx0YSAqL1x0XFxcbiBcdHI2IF49IDA7XHRcdC8qIGlkIGNsZWFyZWQ7IGRlbHRhIHN0YXlzIDUgKi9cdFxcXG4gXHRyOCA9IHI2O1x0XHQvKiBuZXcgaWQgQiwgc3RhbGUgZGVsdGEgNSAqL1x0XFxcbi1cdHI4ICs9IDM7XHRcdC8qIGlkIEJ8QUREX0NPTlNULCBkZWx0YSAzICovXHRcXFxuK1x0cjggKz0gMztcdFx0LyogaWQgQiwgQUREX0NPTlNUXzY0IGRlbHRhICovXHRcXFxuIFx0cjkgPSByNjtcdFx0LyogaWQgQiwgc3RhbGUgZGVsdGEgNSAqL1x0XFxcbiBcdGlmIHI5ICE9IDEwIGdvdG8gbF9leGl0XyU9O1x0XHRcdFx0XFxcbiBcdC8qIEJ1ZzogcjggPSAxMCsoMy01KSA9IDg7IEZpeDogcjggPSAxMCsoMy0wKSA9IDEzICovXHRcXFxuQEAgLTY0OCwxMCArNjQ4LDEwIEBAIGxfZXhpdF8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gfVxuIFxuIC8qXG4tICogVGVzdCB0aGF0IHJlZ3NhZmUoKSB2ZXJpZmllcyBiYXNlX2lkIGNvbnNpc3RlbmN5IGZvciBCUEZfQUREX0NPTlNUXG4rICogVGVzdCB0aGF0IHJlZ3NhZmUoKSB2ZXJpZmllcyBiYXNlX2lkIGNvbnNpc3RlbmN5IGZvciBBRERfQ09OU1RfKlxuICAqIGxpbmtlZCBzY2FsYXJzIGR1cmluZyBzdGF0ZSBwcnVuaW5nLlxuICAqXG4tICogVGhlIGZhbHNlIGJyYW5jaCAoZXhwbG9yZWQgZmlyc3QpIGxpbmtzIFIzIHRvIFIyIHZpYSBBRERfQ09OU1QuXG4rICogVGhlIGZhbHNlIGJyYW5jaCAoZXhwbG9yZWQgZmlyc3QpIGxpbmtzIFIzIHRvIFIyIHZpYSBBRERfQ09OU1RfNjQuXG4gICogVGhlIHRydWUgYnJhbmNoIChydW50aW1lIHBhdGgpIGxpbmtzIFIzIHRvIFI0ICh1bnJlbGF0ZWQgYmFzZV9pZCkuXG4gICogQXQgdGhlIG1lcmdlIHBvaW50LCBwcnVuaW5nIG11c3QgZmFpbCBiZWNhdXNlIHRoZSBsaW5rYWdlIHRvcG9sb2d5XG4gICogZGlmZmVycy5cbkBAIC02NzUsNyArNjc1LDcgQEAgX19uYWtlZCB2b2lkIGFkZF9jb25zdF9iYXNlX2lkX3BydW5pbmcodm9pZClcbiBcdHIyID0gcjA7XHRcdFx0XHRcdFx0XFxcbiBcdHIyIFx1MDAyNj0gMHhmZjtcdFx0LyogUjIgPSBzY2FsYXIoaWQ9QSkgWzAsMjU1XSAqL1x0XFxcbiBcdHIzID0gcjI7XHRcdC8qIFIzIGxpbmtlZCB0byBSMiAoaWQ9QSkgKi9cdFxcXG4tXHRyMyArPSAxMDtcdFx0LyogUjMgaWQ9QXxBRERfQ09OU1QsIGRlbHRhPTEwICovXFxcbitcdHIzICs9IDEwO1x0XHQvKiBBRERfQ09OU1RfNjQgZGVsdGEgKi9cXFxuIFx0cjYgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbiBcdGdvdG8gbF9tZXJnZV8lPTtcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC02ODcsNyArNjg3LDcgQEAgbF90cnVlXyU9Olx0XHRcdFx0XHRcdFx0XFxcbiBcdHI0ID0gcjA7XHRcdFx0XHRcdFx0XFxcbiBcdHI0IFx1MDAyNj0gMHhmZjtcdFx0LyogUjQgPSBzY2FsYXIgWzAsMjU1XSwgaWQ9MCAqL1x0XFxcbiBcdHIzID0gcjQ7XHRcdC8qIFIzIGxpbmtlZCB0byBSNCAobmV3IGlkPUMpICovXFxcbi1cdHIzICs9IDEwO1x0XHQvKiBSMyBpZD1DfEFERF9DT05TVCwgZGVsdGE9MTAgKi9cXFxuK1x0cjMgKz0gMTA7XHRcdC8qIEFERF9DT05TVF82NCBkZWx0YSAqL1xcXG4gXHRyNiA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcXFxuIGxfbWVyZ2VfJT06XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTcxMCw0ICs3MTAsNjIzIEBAIGxfZXhpdF8lPTpcdFx0XHRcdFx0XHRcdFxcXG4gXHQ6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbisvKlxuKyAqIEEgMzItYml0IG1vdiBmcm9tIGEgd2lkZSBzb3VyY2Ugc2hhcmVzIG9ubHkgdGhlIGxvdyAzMiBiaXRzLiBOYXJyb3dpbmcgdGhlXG4rICogc291cmNlIG11c3QgcmVhY2ggdGhlIGRlc3RpbmF0aW9uIHRocm91Z2ggdGhhdCBsaW5rLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCB6ZXh0X21vdl9uYXJyb3dfc3JjKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdGlmIHc2ICE9IDAgZ290byAxZjtcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXFxcbitcdGlmIHc3ID09IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSByZXZlcnNlIGRvZXMgbm90IGhvbGQ6IG5hcnJvd2luZyB0aGUgbG93LTMyIGxpbmsgc2F5cyBub3RoaW5nIGFib3V0IHRoZVxuKyAqIGJhc2UncyBoaWdoIGJpdHMsIHNvIHI2IG11c3Qgc3RheSB1bmtub3duIGFuZCB0aGUgZGl2IHN0YXlzIHJlYWNoYWJsZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19kc3Rfa2VlcHNfYmFzZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHc3ID0gdzY7XHRcdC8qIGZvcm1zIHRoZSBsaW5rICovXHRcdFxcXG4rXHRpZiByNyAhPSAwIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI3LCBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjYgKi8gXFxcbitcdGlmIHI2ID09IDAgZ290byAxZjtcdC8qIHRha2VuIG9ubHkgaWYgcjYgd3JvbmdseSBuYXJyb3dlZCAqL1x0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEEgcHJvdmFibHktdTMyIHNvdXJjZSB0YWtlcyB0aGUgZnVsbC1lcXVhbGl0eSBwYXRoLCBub3QgdGhlIGxvdy0zMiBvbmU6XG4rICogbmFycm93aW5nIHRoZSBkZXN0aW5hdGlvbiBtdXN0IHJlYWNoIHRoZSBzb3VyY2UuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzXG4rX19uYWtlZCB2b2lkIHpleHRfdTMyX3NyY19pc19mdWxsX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHR3NiA9IHcwO1x0XHQvKiByNiBwcm92YWJseSB1MzIgKi9cdFx0XFxcbitcdHc3ID0gdzY7XHRcdC8qIGZ1bGwgbGluaywgbm90IGxvdy0zMiAqL1x0XFxcbitcdGlmIHI3IFx1MDAzZSAxMCBnb3RvIDFmO1x0LyogbmFycm93cyByNywgcHJvcGFnYXRlcyB0byByNiAqLyBcXFxuK1x0aWYgcjYgXHUwMDNlIDEwIGdvdG8gMmY7XHRcdFx0XHRcdFxcXG4rXHRnb3RvIDFmO1x0XHRcdFx0XHRcdFxcXG4rMjpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEEgc2VsZi1tb3YgaGFzIG5vdGhpbmcgdG8gbGluaywgc28gaXQgbXVzdCBub3QgbWludCBhbiBpZCBmb3IgcjYuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rLyogYW4gaWQgd291bGQgcHJpbnQgYXMgUjY9c2NhbGFyKGlkPU4ubG8zMixzbWluPS4uLiAqL1xuK19fbXNnKFwiKGJjKSB3NiA9IHc2IHt7Lip9fSBSNj1zY2FsYXIoc21pbj0wLFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBePSAwO1x0XHQvKiBkcm9wIHRoZSBpZCAqL1x0XHRcXFxuK1x0dzYgPSB3NjtcdFx0LyogZm9ybXMgbm8gbGluayAqL1x0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEEgbG93LTMyLWxpbmtlZCBzb3VyY2Uga2VlcHMgaXRzIGlkIGFuZCBmbGFnIGFjcm9zcyBhIGZ1cnRoZXIgMzItYml0IG1vdixcbisgKiBzbyBuYXJyb3dpbmcgdGhlIGJhc2Ugc3RpbGwgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBjaGFpbi5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgemV4dF9jaGFpbl9rZWVwc19saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHc4ID0gdzc7XHRcdC8qIGxpbmsgc3Vydml2ZXMgdGhlIDJuZCBtb3YgKi9cdFxcXG4rXHRpZiB3NiAhPSAwIGdvdG8gMWY7XHQvKiBuYXJyb3dzIHI2LCBwcm9wYWdhdGVzIHRvIHI4ICovIFxcXG4rXHRpZiB3OCA9PSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBBIGRlbHRhIG9uIGVpdGhlciBzaWRlIGlzIG5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGEgbG93LTMyIGxpbmssIHNvIG5vXG4rICogcmFuZ2UgcHJvcGFnYXRlczogaGVyZSB0aGUgYnJhbmNoIHJlZ2lzdGVyIGNhcnJpZXMgdGhlIGRlbHRhLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImRpdiBieSB6ZXJvXCIpXG4rX19uYWtlZCB2b2lkIHpleHRfbm9fc3luY193aGVuX2Jhc2VfaGFzX2RlbHRhKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbitcdHI4ICs9IDM7XHRcdC8qIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnICovXHRcXFxuK1x0aWYgcjggIT0gMyBnb3RvIDFmO1x0LyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI3ICovXHRcXFxuK1x0aWYgdzcgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogLi4uIGFuZCBoZXJlIHRoZSBsb3ctMzIgbGluayBpcyB0aGUgYnJhbmNoIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXJcbisgKiBjYXJyeWluZyB0aGUgZGVsdGEgbXVzdCBub3QgYmUgbmFycm93ZWQgZWl0aGVyLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImRpdiBieSB6ZXJvXCIpXG4rX19uYWtlZCB2b2lkIHpleHRfbm9fc3luY19mcm9tX3N1YnJlZ19iYXNlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3NjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbitcdHI4ICs9IDM7XHRcdC8qIGRlbHRhIG9uIHI4ICovXHRcdFxcXG4rXHRpZiB3NyAhPSAwIGdvdG8gMWY7XHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi9cdFxcXG4rXHRpZiByOCA9PSAzIGdvdG8gMWY7XHQvKiB0YWtlbiBvbmx5IGlmIHI4IHdyb25nbHkgbmFycm93ZWQgKi9cdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUd28gbG93LTMyIGxpbmtzIG9uIHRoZSBzYW1lIGJhc2UgZG8gcHJvcGFnYXRlIHRvIGVhY2ggb3RoZXI6IGJvdGggYXJlIHRoZVxuKyAqIHplcm8tZXh0ZW5zaW9uIG9mIHRoZSBzYW1lIGxvdyAzMiBiaXRzLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCB6ZXh0X3N5bmNfYmV0d2Vlbl90d29fc3VicmVncyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHc3ID0gdzY7XHRcdC8qIHR3byBsaW5rcyBvbiBvbmUgYmFzZSAqL1x0XFxcbitcdHc4ID0gdzY7XHRcdFx0XHRcdFx0XFxcbitcdGlmIHc3ICE9IDAgZ290byAxZjtcdC8qIG5hcnJvd3MgcjcsIHByb3BhZ2F0ZXMgdG8gcjggKi8gXFxcbitcdGlmIHc4ID09IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIE9ubHkgb25lIG9mIHRoZSB0d28gcGF0aHMgbGlua3MgcjcgdG8gcjgsIHNvIHRoZSBuYXJyb3dpbmcgb2YgdzggcmVhY2hlcyByN1xuKyAqIG9uIG9uZSBhbmQgbm90IHRoZSBvdGhlciBhbmQgdGhlIGRpdiBzdGF5cyByZWFjaGFibGUuIFRoaXMgY2hlY2tzIHRoZVxuKyAqIG91dGNvbWUsIG5vdCB0aGUgbWVjaGFuaXNtOiB0aGUgdHdvIHN0YXRlcyBkaWZmZXIgaW4gdGhlaXIgaWRzIGFuZCBjb250ZW50cyxcbisgKiBzbyByZWdzYWZlKCkgaGFzIG1hbnkgcmVhc29ucyB0byBrZWVwIHRoZW0gYXBhcnQgYW5kIGRpc2FibGluZyBhbnkgc2luZ2xlXG4rICogb25lIG9mIGl0cyBjaGVja3MgZG9lcyBub3QgbWFrZSB0aGlzIGZhaWwuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCB6ZXh0X3VubGlua2VkX3BhdGhfc3RheXNfcmVhY2hhYmxlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgXHUwMDI2PSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRpZiByNiBcdTAwM2U9IDEgZ290byAyZjtcdFx0XHRcdFx0XFxcbitcdC8qIGV4cGxvcmVkIGZpcnN0OiByNyBpcyBhIGxvdy0zMiBsaW5rIG9mIHI4ICovXHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjggPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0dzcgPSB3ODtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdGdvdG8gMWY7XHRcdFx0XHRcdFx0XFxcbisyOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0LyogcnVudGltZSBwYXRoOiByNyB1bnJlbGF0ZWQgdG8gcjggKi9cdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHR3NyA9IHcwO1x0XHQvKiBubyBsaW5rIGhlcmUgKi9cdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgdzggIT0gMCBnb3RvIDNmO1x0LyogcHJvcGFnYXRlcyB0byByNyBvbmx5IGlmIGxpbmtlZCAqLyBcXFxuK1x0aWYgdzcgPT0gMCBnb3RvIDNmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzM6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogRm9ybWluZyB0aGUgbGluayBjYWxscyBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoKSwgd2hpY2ggZHJvcHMgYSBkZWx0YVxuKyAqIGxpbmsgb24gdGhlIHNvdXJjZS4gVGhhdCBpcyB3aGF0IHRoZSBuYXJyb3ctc291cmNlIHBhdGggaGFzIGFsd2F5cyBkb25lLFxuKyAqIHNvIGEgd2lkZSBzb3VyY2UgYmVoYXZlcyB0aGUgc2FtZTogcjUgc3RvcHMgdHJhY2tpbmcgcjYuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX25ha2VkIHZvaWQgemV4dF9tb3ZfYnJlYWtzX2FkZF9jb25zdF9zcmModm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNSA9IHI2O1x0XHQvKiByNSwgcjYgbGlua2VkICovXHRcdFxcXG4rXHRyNSArPSAzO1x0XHQvKiByNSA9IGJhc2UgKyAzICovXHRcdFxcXG4rXHR3NyA9IHc1O1x0XHQvKiBicmVha3MgcjUncyBkZWx0YSBsaW5rICovXHRcXFxuK1x0aWYgcjYgXHUwMDNlIDkgZ290byAxZjtcdC8qIHI2IGluIFswLCA5XSAqL1x0XHRcXFxuK1x0aWYgcjUgXHUwMDNjIDEzIGdvdG8gMWY7XHQvKiB0YWtlbiBvbmx5IGlmIHI1IHN0aWxsIGxpbmtlZCAqLyBcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBuYXJyb3dpbmcgZmlsbCBrZWVwcyBvbmx5IHRoZSBzbG90J3MgbG93IDMyIGJpdHMsIHNvIGEgbGF0ZXIgbmFycm93aW5nIG9mXG4rICogdGhlIHNwaWxsZWQgdmFsdWUgbXVzdCBzdGlsbCByZWFjaCB0aGUgZmlsbGVkIHJlZ2lzdGVyLiBTYW1lIHJlbGF0aW9uIGFzIGFcbisgKiAzMi1iaXQgbW92IGZyb20gYSB3aWRlIHNvdXJjZSwgd2l0aCB0aGUgc3RhY2sgc2xvdCBhcyB0aGUgYmFzZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgemV4dF9maWxsX25hcnJvd19mcm9tX3dpZGVfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgfD0gcjA7XHRcdC8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjY7XHQvKiBzbG90IGxpbmtlZCB0byByNiAqL1x0XHRcXFxuK1x0cjIgPSAqKHUzMiAqKShyMTAgLSA4KTtcdC8qIG5hcnJvd2luZyBmaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcXFxuK1x0aWYgdzYgIT0gMCBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxuK1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBmdWxsLXdpZHRoIGZpbGwgb2YgYSB3aWRlIHNsb3QgaXMgYSBwbGFpbiA2NC1iaXQgZXF1YWxpdHksIG5vdCBhIGxvdy0zMlxuKyAqIGxpbmssIHNvIGl0IG11c3Qga2VlcCBwcm9wYWdhdGluZyBleGFjdGx5IGFzIGJlZm9yZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgemV4dF9maWxsX2Z1bGxfd2lkdGhfa2VlcHNfZnVsbF9saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzY1x1MDAzYz0gMzI7XHRcdFx0XHRcdFx0XFxcbitcdHI2IHw9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0cjIgPSAqKHU2NCAqKShyMTAgLSA4KTtcdC8qIG5vIG5hcnJvd2luZyAqL1x0XHRcXFxuK1x0aWYgcjYgIT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBzdWItd29yZCBmaWxsIGlzIGJlbG93IHRoZSBsb3ctMzIgbW9kZWwsIHNvIG5vIGxpbmsgaXMgZm9ybWVkIGFuZCB0aGVcbisgKiByZWxhdGlvbiBpcyBkcm9wcGVkIGFzIGJlZm9yZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2ZpbGxfYnl0ZV9mb3Jtc19ub19saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzY1x1MDAzYz0gMzI7XHRcdFx0XHRcdFx0XFxcbitcdHI2IHw9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0cjIgPSAqKHU4ICopKHIxMCAtIDgpO1x0LyogMS1ieXRlIGZpbGw6IG5vIGxpbmsgKi9cdFxcXG4rXHRpZiB3NiAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcdFxcXG4rXHRpZiByMiA9PSAwIGdvdG8gMWY7XHQvKiBub3QgZGVkdWNlZCAqL1x0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBuYXJyb3dpbmcgc3BpbGwgc3RvcmVzIG9ubHkgdGhlIHNvdXJjZSdzIGxvdyAzMiBiaXRzLCBzbyB0aGUgc2xvdCBpcyB0aGVpclxuKyAqIHplcm8tZXh0ZW5zaW9uLiBBIGxhdGVyIG5hcnJvd2luZyBvZiB0aGUgc291cmNlIG11c3Qgc3RpbGwgcmVhY2ggYW55dGhpbmdcbisgKiBmaWxsZWQgYmFjayBvdXQgb2YgdGhhdCBzbG90LlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9rZWVwc19saW5rKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzY1x1MDAzYz0gMzI7XHRcdFx0XHRcdFx0XFxcbitcdHI2IHw9IHIwO1x0XHQvKiByNiA9IGZ1bGwgNjQtYml0IHVua25vd24gKi9cdFxcXG4rXHQqKHUzMiAqKShyMTAgLSA4KSA9IHI2O1x0LyogbmFycm93aW5nIHNwaWxsLCBmb3JtcyB0aGUgbGluayAqLyBcXFxuK1x0cjIgPSAqKHUzMiAqKShyMTAgLSA4KTtcdC8qIGZpbGwgaXQgYmFjayAqL1x0XHRcXFxuK1x0aWYgdzYgIT0gMCBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxuK1x0aWYgcjIgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBzdWItd29yZCBzcGlsbCBpcyBiZWxvdyB0aGUgbG93LTMyIG1vZGVsLCBzbyBubyBsaW5rIGlzIGZvcm1lZCB0aGVyZS5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd2luZ19zcGlsbF9ieXRlX25vX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgfD0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTggKikocjEwIC0gOCkgPSByNjtcdC8qIDEtYnl0ZSBzcGlsbDogbm8gbGluayAqL1x0XFxcbitcdHIyID0gKih1OCAqKShyMTAgLSA4KTtcdFx0XHRcdFx0XFxcbitcdGlmIHc2ICE9IDAgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdGlmIHIyID09IDAgZ290byAxZjtcdC8qIG5vdCBkZWR1Y2VkICovXHRcdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2lmZGVmIENBTl9VU0VfTU9WU1hcbitcbisvKlxuKyAqIEEgMzItYml0IHNpZ24gZXh0ZW5zaW9uIGtlZXBzIHRoZSBsb3cgMzIgYml0cywgc28gbmFycm93aW5nIHRoZSBzb3VyY2VcbisgKiByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbiB0aGUgc2FtZSB3YXkgaXQgZG9lcyBmb3IgYSB6ZXJvIGV4dGVuc2lvbi4gVGhlIGhpZ2hcbisgKiBoYWxmIGZvbGxvd3MgdGhlIHNpZ24sIHNvIHRoZSB2YWx1ZSBzZWVuIGhlcmUgaXMgbmVnYXRpdmUuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzXG4rX19uYWtlZCB2b2lkIHNleHRfbW92X3dpZGVfc3JjKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjcgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuK1x0aWYgdzYgIT0gLTEgZ290byAxZjtcdC8qIG5hcnJvd3MgcjYsIHByb3BhZ2F0ZXMgdG8gcjcgKi8gXFxcbitcdGlmIHI3ID09IC0xIGdvdG8gMWY7XHQvKiBzaWduLWV4dGVuZGVkLCBub3QgMHhmZmZmZmZmZiAqLyBcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogcjAgPSAoczMyKXIwIGlzIGhvdyBhIHNpZ24tZXh0ZW5kZWQgaW50IHJldHVybiBsYW5kcy4gc3JjIGFuZCBkc3QgYXJlIHRoZVxuKyAqIHNhbWUgcmVnaXN0ZXIsIGJ1dCByMCBpcyBhbHJlYWR5IGxpbmtlZCwgc28gdGhlcmUgaXMgYSBzZXQgZm9yIGl0IHRvIHN0YXlcbisgKiBpbiBhbmQgdGhlIG5hcnJvd2luZyBzdGlsbCBwcm9wYWdhdGVzLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X2tlZXBzX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNyA9IHI2O1x0XHQvKiByNiwgcjcgbGlua2VkICovXHRcdFxcXG4rXHRyNyA9IChzMzIpcjc7XHRcdC8qIHNlbGYtbW92LCBrZWVwcyB0aGUgaWQgKi9cdFxcXG4rXHRpZiB3NiAhPSAtMSBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByNyAqLyBcXFxuK1x0aWYgcjcgPT0gLTEgZ290byAxZjtcdFx0XHRcdFx0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBzYW1lIHNlbGYtbW92IG9uIGFuIHVubGlua2VkIHJlZ2lzdGVyIGhhcyBub3RoaW5nIHRvIGxpbmsgdG8sIHNvIGl0XG4rICogbXVzdCBub3QgbWludCBhbiBpZCB0aGF0IHdvdWxkIGxlYXZlIHI2IGRlc2NyaWJpbmcgaXRzZWxmLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuKy8qIGFuIGlkIHdvdWxkIHByaW50IGFzIFI2PXNjYWxhcihpZD1OLmxvMzJzeCxzbWluPS4uLiAqL1xuK19fbXNnKFwiKGJmKSByNiA9IChzMzIpcjYge3suKn19IFI2PXNjYWxhcihzbWluPVwiKVxuK19fbmFrZWQgdm9pZCBzZXh0X3NlbGZfbW92X25vX2xpbmsodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBePSAwO1x0XHQvKiBkcm9wIHRoZSBpZCAqL1x0XHRcXFxuK1x0cjYgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyBubyBsaW5rICovXHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogQSBkZWx0YSBvbiB0aGUgYnJhbmNoIHJlZ2lzdGVyIGlzIG5vdCBtb2RlbGxlZCB0b2dldGhlciB3aXRoIGEgbG93LTMyXG4rICogbGluaywgc28gdGhlIHByb3BhZ2F0aW9uIGlzIHNraXBwZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZCBhdC5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkaXYgYnkgemVyb1wiKVxuK19fbmFrZWQgdm9pZCBzZXh0X25vX3N5bmNfd2hlbl9iYXNlX2hhc19kZWx0YSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHI3ID0gKHMzMilyNjtcdFx0LyogZm9ybXMgdGhlIGxpbmsgKi9cdFx0XFxcbitcdHI4ID0gcjY7XHRcdFx0XHRcdFx0XFxcbitcdHI4ICs9IDM7XHRcdC8qIGRlbHRhIG9uIHRoZSBicmFuY2ggcmVnICovXHRcXFxuK1x0aWYgcjggIT0gMyBnb3RvIDFmO1x0LyogbXVzdCBub3QgcHJvcGFnYXRlIHRvIHI3ICovXHRcXFxuK1x0aWYgcjcgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLz0gMDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qXG4rICogLi4uIGFuZCB3aXRoIHRoZSBsaW5rIGFzIHRoZSBicmFuY2ggcmVnaXN0ZXIgdGhlIHByb3BhZ2F0aW9uIG11c3Qgbm90IHJ1blxuKyAqIGJhY2t3YXJkczogYSAtXHUwMDNlc3VicmVnIHJlZ2lzdGVyIGtub3dzIG5vdGhpbmcgYWJvdXQgdGhlIGJhc2UncyBoaWdoIGhhbGYsIHNvXG4rICogbmFycm93aW5nIGl0IG11c3QgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIHNldCBhbG9uZS4gV2VyZSB0aGUgZ3VhcmQgbWlzc2luZyxcbisgKiByOCB3b3VsZCBiZSByZWJ1aWx0IGFzIHI3ICsgMyA9PSAyLCB0cmVhdGluZyByNyBhcyBpZiBpdCB3ZXJlIHRoZSBiYXNlLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImRpdiBieSB6ZXJvXCIpXG4rX19uYWtlZCB2b2lkIHNleHRfbm9fc3luY19mcm9tX3N1YnJlZ19iYXNlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjcgPSAoczMyKXI2O1x0XHQvKiBmb3JtcyB0aGUgbGluayAqL1x0XHRcXFxuK1x0cjggPSByNjtcdFx0XHRcdFx0XHRcXFxuK1x0cjggKz0gMztcdFx0LyogZGVsdGEgb24gcjggKi9cdFx0XFxcbitcdGlmIHI3ICE9IC0xIGdvdG8gMWY7XHQvKiBtdXN0IG5vdCBwcm9wYWdhdGUgdG8gcjggKi9cdFxcXG4rXHRpZiByOCA9PSAyIGdvdG8gMWY7XHQvKiB0YWtlbiBvbmx5IGlmIHI4IHdyb25nbHkgbmFycm93ZWQgKi9cdFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgdHdvIGtpbmRzIHJlYnVpbGQgdGhlIGhpZ2ggaGFsZiBkaWZmZXJlbnRseTogdGhlIHNhbWUgbG93IGhhbGYgcmVhY2hlc1xuKyAqIC0xIHRocm91Z2ggYSBzaWduIGV4dGVuc2lvbiBhbmQgMHhmZmZmZmZmZiB0aHJvdWdoIGEgemVybyBleHRlbnNpb24sIHNvIG9ubHlcbisgKiBvbmUgcGF0aCBjbGVhcnMgdGhlIGd1YXJkLiBBcyBhYm92ZSB0aGlzIGNoZWNrcyB0aGUgb3V0Y29tZSAtLSB0aGUgZGlmZmVyaW5nXG4rICogcmFuZ2VzIGtlZXAgdGhlIHN0YXRlcyBhcGFydCBvbiB0aGVpciBvd24uXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBzZXh0X2tpbmRzX3JlYWNoX2RpZmZlcmVudF92YWx1ZXModm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBcdTAwMjY9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGlmIHI2IFx1MDAzZT0gMSBnb3RvIDJmO1x0XHRcdFx0XHRcXFxuK1x0LyogZXhwbG9yZWQgZmlyc3Q6IHI3IGlzIGEgc2lnbi1leHRlbmRlZCBsaW5rIG9mIHI4ICovXHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHI3ID0gKHMzMilyODtcdFx0XHRcdFx0XHRcXFxuK1x0Z290byAxZjtcdFx0XHRcdFx0XHRcXFxuKzI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHQvKiBydW50aW1lIHBhdGg6IHI3IGlzIGEgemVyby1leHRlbmRlZCBsaW5rIG9mIHI4ICovXHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFx0XFxcbitcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdHc3ID0gdzg7XHRcdFx0XHRcdFx0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgdzggIT0gLTEgZ290byAzZjtcdFx0XHRcdFx0XFxcbitcdGlmIHI3ID09IC0xIGdvdG8gM2Y7XHQvKiBvbmx5IHRoZSBzaWduLWV4dGVuZGVkIHBhdGggKi8gXFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFx0XFxcbiszOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBzaWduLWV4dGVuZGluZyBjb3VudGVycGFydDogdGhlIGZpbGxlZCByZWdpc3RlciBpcyB0aGUgc2lnbiBleHRlbnNpb24gb2ZcbisgKiB0aGUgc2xvdCdzIGxvdyAzMiBiaXRzLCBzbyBhIG5hcnJvd2luZyBvZiB0aG9zZSBiaXRzIGFycml2ZXMgc2lnbi1leHRlbmRlZC5cbisgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgc2V4dF9maWxsX25hcnJvd19mcm9tX3dpZGVfc3BpbGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjYgfD0gcjA7XHRcdC8qIHI2ID0gZnVsbCA2NC1iaXQgdW5rbm93biAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjY7XHQvKiBzbG90IGxpbmtlZCB0byByNiAqL1x0XHRcXFxuK1x0cjIgPSAqKHMzMiAqKShyMTAgLSA4KTtcdC8qIG5hcnJvd2luZyBzeCBmaWxsICovXHRcdFxcXG4rXHRpZiB3NiAhPSAtMSBnb3RvIDFmO1x0LyogbmFycm93cyByNiwgcHJvcGFnYXRlcyB0byByMiAqLyBcXFxuK1x0aWYgcjIgPT0gLTEgZ290byAxZjtcdC8qIHNpZ24tZXh0ZW5kZWQsIG5vdCAweGZmZmZmZmZmICovIFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgc2FtZSwgZm9yIHRoZSB0d28gZmlsbCBraW5kcyBvZmYgb25lIHNsb3QuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGl2IGJ5IHplcm9cIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK19fbmFrZWQgdm9pZCBmaWxsX2tpbmRzX3JlYWNoX2RpZmZlcmVudF92YWx1ZXModm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRyNiBcdTAwMjY9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcdFxcXG4rXHRyOCA9IHIwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNjXHUwMDNjPSAzMjtcdFx0XHRcdFx0XHRcXFxuK1x0cjggfD0gcjA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjg7XHRcdFx0XHRcdFxcXG4rXHRpZiByNiBcdTAwM2U9IDEgZ290byAyZjtcdFx0XHRcdFx0XFxcbitcdHIyID0gKihzMzIgKikocjEwIC0gOCk7XHQvKiBzaWduLWV4dGVuZGluZyBmaWxsICovXHRcXFxuK1x0Z290byAxZjtcdFx0XHRcdFx0XHRcXFxuKzI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyMiA9ICoodTMyICopKHIxMCAtIDgpO1x0LyogemVyby1leHRlbmRpbmcgZmlsbCAqL1x0XFxcbisxOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgdzggIT0gLTEgZ290byAzZjtcdFx0XHRcdFx0XFxcbitcdGlmIHIyID09IC0xIGdvdG8gM2Y7XHQvKiBvbmx5IHRoZSBzaWduLWV4dGVuZGluZyBwYXRoICovIFxcXG4rXHRyMCAvPSAwO1x0XHRcdFx0XHRcdFxcXG4rMzpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2VuZGlmIC8qIENBTl9VU0VfTU9WU1ggKi9cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21vdnN4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guY1xuaW5kZXggMTk1YjI3YTUxMjI0Zi4uM2EwZTY3ZWJiOTYzZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tb3ZzeC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbW92c3guY1xuQEAgLTIwMiw2ICsyMDIsNTcgQEAgbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLypcbisgKiBBIHJhbmdlIHRoYXQgYWxyZWFkeSBmaXRzIHRoZSBmaWVsZCBpcyB1bmNoYW5nZWQgYnkgdGhlIHNpZ24gZXh0ZW5zaW9uLlxuKyAqIEJvdGggb2YgdGhlc2Ugc3RyYWRkbGUgemVybywgc28gdGhlIGhpZ2ggYml0cyBvZiBzbWluIGFuZCBzbWF4IGRpZmZlciBhbmRcbisgKiB0aGUgdG9wX3MqX3ZhbHVlIHRlc3QgYWxvbmUgd291bGQgZmFsbCBiYWNrIHRvIHRoZSBmdWxsIGZpZWxkIHJhbmdlLlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJNT1Y2NFNYLCBTMzIsIG5lZ2F0aXZlIHJhbmdlIGlzIHByZXNlcnZlZFwiKVxuK19fc3VjY2VzcyBfX3N1Y2Nlc3NfdW5wcml2IF9fcmV0dmFsKDApXG4rX19uYWtlZCB2b2lkIG1vdjY0c3hfczMyX25lZ2F0aXZlX3JhbmdlKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MCBcdTAwMjY9IDB4ZmZmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLT0gMHhmZmY7XHRcdFx0XHRcdFxcXG4rXHQvKiByMCBpcyBbLTQwOTUsIDBdLCBhbHJlYWR5IGEgdmFsaWQgczMyICovXHRcXFxuK1x0cjAgPSAoczMyKXIwO1x0XHRcdFx0XHRcXFxuK1x0aWYgcjAgc1x1MDAzYyAtMHhmZmYgZ290byBsMF8lPTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuK1x0LyogdW5yZWFjaGFibGUgdW5sZXNzIHRoZSByYW5nZSB3YXMgd2lkZW5lZCAqL1x0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJNT1Y2NFNYLCBTOCwgbmVnYXRpdmUgcmFuZ2UgaXMgcHJlc2VydmVkXCIpXG4rX19zdWNjZXNzIF9fc3VjY2Vzc191bnByaXYgX19yZXR2YWwoMClcbitfX25ha2VkIHZvaWQgbW92NjRzeF9zOF9uZWdhdGl2ZV9yYW5nZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzAgXHUwMDI2PSAweDNmO1x0XHRcdFx0XHRcXFxuK1x0cjAgLT0gMHgzZjtcdFx0XHRcdFx0XFxcbitcdC8qIHIwIGlzIFstNjMsIDBdLCBhbHJlYWR5IGEgdmFsaWQgczggKi9cdFxcXG4rXHRyMCA9IChzOClyMDtcdFx0XHRcdFx0XFxcbitcdGlmIHIwIHNcdTAwM2MgLTB4M2YgZ290byBsMF8lPTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rbDBfJT06XHRcdFx0XHRcdFx0XHRcXFxuK1x0LyogdW5yZWFjaGFibGUgdW5sZXNzIHRoZSByYW5nZSB3YXMgd2lkZW5lZCAqL1x0XFxcbitcdHIwIC89IDA7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIFNFQyhcInNvY2tldFwiKVxuIF9fZGVzY3JpcHRpb24oXCJNT1Y2NFNYLCBTMTYsIFIxMCBTaWduIEV4dGVuc2lvblwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlIxIHR5cGU9c2NhbGFyIGV4cGVjdGVkPWZwLCBwa3QsIHBrdF9tZXRhLCBtYXBfa2V5LCBtYXBfdmFsdWUsIG1lbSwgcmluZ2J1Zl9tZW0sIGJ1ZiwgdHJ1c3RlZF9wdHJfXCIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXG5pbmRleCBkYzFkOGMzMGZiMGVlLi4zNDIxNGVjOTI2NzA2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3JlZ19lcXVhbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmVnX2VxdWFsLmNcbkBAIC0zMSwyMyArMzEsMjMgQEAgbDFfJT06XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4gfVxuIFxuIFNFQyhcInNvY2tldFwiKVxuLV9fZGVzY3JpcHRpb24oXCJjaGVjayB3IHJlZyBub3QgZXF1YWwgaWYgciByZWcgdXBwZXIzMiBiaXRzIG5vdCAwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgIXJlYWRfb2tcIilcbitfX2Rlc2NyaXB0aW9uKFwiY2hlY2sgdyByZWcgZXF1YWwgaWYgciByZWcgdXBwZXIzMiBiaXRzIG5vdCAwXCIpXG4rX19zdWNjZXNzXG4gX19uYWtlZCB2b2lkIHN1YnJlZ19lcXVhbGl0eV8yKHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuIFx0Y2FsbCAlW2JwZl9rdGltZV9nZXRfbnNdO1x0XHRcdFxcXG4gXHRyMiA9IHIwO1x0XHRcdFx0XHRcXFxuLVx0LyogVXBwZXIgNC1ieXRlcyBvZiByMiBtYXkgbm90IGJlIDAsIHRodXMgaW5zblx0XFxcbi1cdCAqIHczID0gdzIgc2hvdWxkIG5vdCBwcm9wYWdhdGUgcmVnIGlkLFx0YW5kXHRcXFxuLVx0ICogdzIgXHUwMDNjIDkgY29tcGFyaXNvbiBzaG91bGQgbm90IHByb3BhZ2F0ZVx0XFxcbi1cdCAqIHRoZSByYW5nZSBmb3IgcjMgZWl0aGVyLlx0XHRcdFxcXG4rXHQvKiBVcHBlciA0LWJ5dGVzIG9mIHIyIG1heSBub3QgYmUgMCwgc28gcjMgZG9lc1x0XFxcbitcdCAqIG5vdCBlcXVhbCByMi4gSXQgZG9lcyBzaGFyZSByMidzIGxvdyAzMiBiaXRzXHRcXFxuK1x0ICogdGhvdWdoLCBzbyB3MiBcdTAwM2MgOSBzdGlsbCBib3VuZHMgcjM6IHRoZVx0XFxcbitcdCAqIHplcm8tZXh0ZW5kaW5nIG1vdiBsZWF2ZXMgbm90aGluZyBhYm92ZSB0aGVtLlxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuIFx0dzMgPSB3MjtcdFx0XHRcdFx0XFxcbiBcdGlmIHcyIFx1MDAzYyA5IGdvdG8gbDBfJT07XHRcdFx0XHRcXFxuIFx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuIGwwXyU9Olx0aWYgcjMgXHUwMDNjIDkgZ290byBsMV8lPTtcdFx0XHRcdFxcXG4tXHQvKiByMSByZWFkIGlzIGlsbGVnYWwgYXQgdGhpcyBwb2ludCAqL1x0XHRcXFxuK1x0LyogdW5yZWFjaGFibGUsIHNvIHRoZSByMSByZWFkIGlzIG5ldmVyIG1hZGUgKi9cdFxcXG4gXHRyMCAtPSByMTtcdFx0XHRcdFx0XFxcbiBsMV8lPTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiBcIlx0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5pbmRleCAzOWExNzY2ZGFlM2YxLi4xMDQyODU2Yjk3YzI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xuQEAgLTQ2NCw5ICs0NjQsMTMgQEAgbDBfJT06XHRyMSBcdTAwM2VcdTAwM2U9IDE2O1x0XHRcdFx0XHRcXFxuIFNFQyhcInJhd190cFwiKVxuIF9fbG9nX2xldmVsKDIpXG4gX19zdWNjZXNzXG4tX19tc2coXCJmcC04PTBtPz9zY2FsYXIoKVwiKVxuLV9fbXNnKFwiZnAtMTY9MDBtbT8/c2NhbGFyKClcIilcbi1fX21zZyhcImZwLTI0PTAwbW0/Pz9zY2FsYXIoKVwiKVxuKy8qXG4rICogVGhlIHNsb3QgcmVjb3JkcyB3aGF0IHRoZSBzdG9yZSBwdXQgdGhlcmUsIG5vdCB0aGUgd2lkZXIgc291cmNlIGl0IGNhbWVcbisgKiBmcm9tLCBzbyBlYWNoIHNjYWxhciBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIGl0cyBzcGlsbC5cbisgKi9cbitfX21zZyhcImZwLTg9MG0/P3NjYWxhcihpZD17e1swLTldK319LmxvMzIsc21pbj0wLHNtYXg9dW1heD0weGZmZmZmZmZmLHZhcl9vZmY9KDB4MDsgMHhmZmZmZmZmZikpXCIpXG4rX19tc2coXCJmcC0xNj0wMG1tPz9zY2FsYXIoc21pbj1zbWluMzI9MCxzbWF4PXVtYXg9c21heDMyPXVtYXgzMj0weGZmZmYsdmFyX29mZj0oMHgwOyAweGZmZmYpKVwiKVxuK19fbXNnKFwiZnAtMjQ9MDBtbT8/P3NjYWxhcihzbWluPXNtaW4zMj0wLHNtYXg9dW1heD1zbWF4MzI9dW1heDMyPTI1NSx2YXJfb2ZmPSgweDA7IDB4ZmYpKVwiKVxuIF9fbmFrZWQgdm9pZCBzcGlsbF9zdWJyZWdzX3ByZXNlcnZlX3N0YWNrX3plcm8odm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6NTMuMDc2NjI3MzgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NjI3MzUwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBhIGRlZGljYXRlZCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIHNlc3Npb24gZm9yIGl0LiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBmb2N1c2VkIHdpdGhpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBzdWJzeXN0ZW0uIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgd2l0aGluIHRoZSB2ZXJpZmllci5cblxuRmlyc3QsIEknbSBub3RpbmcgdGhlIGZpbGVzIGFmZmVjdGVkOiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAsIGBpbmNsdWRlL2xpbnV4L3RudW0uaGAsIGBrZXJuZWwvYnBmL3RudW0uY2AsIGBrZXJuZWwvYnBmL2xvZy5jYCwgYGtlcm5lbC9icGYvc3RhdGVzLmNgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIHNvbWUgc2VsZnRlc3RzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYC4gVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgIHNlZW0gdG8gYmUgaW50cm9kdWNpbmcgdGhlIGBlbnVtIGJwZl9hZGRfY29uc3RgIGFuZCBgZW51bSBicGZfc3VicmVnYCBmaWVsZHMgd2l0aGluIHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBJdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBiaXRmaWVsZHMgdXNlZCB0byB0cmFjayBzb21lIGZvcm0gb2YgY29uc3RhbnQgYWRkaXRpb24gYW5kIHN1YnJlZ2lzdGVyIHByb3BlcnRpZXMsIHJlc3BlY3RpdmVseS4gVGhlIHJlbW92YWwgb2YgdGhlIGAjZGVmaW5lIEJQRl9BRERfQ09OU1QqYCBtYWNyb3Mgc3VnZ2VzdHMgYSBzaGlmdCB0b3dhcmRzIHVzaW5nIGFuIGVudW1lcmF0aW9uIGZvciBiZXR0ZXIgdHlwZSBzYWZldHkgYW5kIGNsYXJpdHksIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS5cblxuVGhlIGluY2x1c2lvbiBvZiBgdG51bV9zZXh0YCBpbiBgaW5jbHVkZS9saW51eC90bnVtLmhgIGFuZCBga2VybmVsL2JwZi90bnVtLmNgIGxpa2VseSByZWxhdGVzIHRvIGEgc2lnbmVkIGV4dGVuc2lvbiBvZiB0YWdnZWQgbnVtYmVycyBhbmQgbmVlZHMgY2xvc2UgaW5zcGVjdGlvbi4gTG9nZ2luZyB1cGRhdGVzIGluIGBrZXJuZWwvYnBmL2xvZy5jYCBhbHdheXMgbWFrZXMgbWUgdGhpbmsgb2YgcG9zc2libGUgaW5mby1sZWFrcywgYW5kIEkgd2FudCB0byB2ZXJpZnkgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIHVwZGF0ZXMgdG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGluIGBjaGVja19zY2FsYXJfaWRzYCwgYHJlZ3NfZXhhY3RgLCBhbmQgYHJlZ3NhZmVgIGlzIGNydWNpYWwgYW5kIG5lZWQgdG8gcmV2aWV3IGNsb3NlbHkgdG8gZGV0ZXJtaW5lIHRoZSBlZmZlY3Qgb2YgdGhpcyBvbiBob3cgdGhlc2UgcmVnaXN0ZXJzIGFyZSBtYW5hZ2VkLiBUaGUgYnVsayBvZiB0aGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdpdGggdmVyaWZpZXIgcmVnaXN0ZXIgdHJhY2tpbmcsIHN1YnJlZ2lzdGVyIGxpbmtpbmcgKGZvciB6ZXJvLWV4dGVuc2lvbiBhbmQgc2lnbi1leHRlbnNpb24pLCBhbmQgc3RhY2sgaGFuZGxpbmcgYmVpbmcgdGhlIGtleSBhcmVhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldyBgYWRkX2NvbnN0YCBhbmQgYHN1YnJlZ2AgcHJvcGVydGllcyBpbnRlcmFjdCB3aXRoIHN0YWNrIG1lbW9yeSBhbmQgaWYgdGhleSBhcmUgaGFuZGxlZCBzYWZlbHkuXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGVyZSBhcmUgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm8ga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLCBubyB1bmV4cGVjdGVkIHBhZGRpbmcgaXNzdWVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCByZWFkcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgY29tbW9uIGluIGNvbXBsZXggY29kZSB3aXRoIG5ldyBzdGF0ZSBtYW5hZ2VtZW50LlxuXG5TcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoaXMgYHN0cnVjdCBicGZfcmVnX3N0YXRlYDpcblxuYGBgY1xuc3RydWN0IGJwZl9yZWdfc3RhdGUge1xuLi4uXG5cdGVudW0gYnBmX2FkZF9jb25zdCBhZGRfY29uc3Q6Mjtcblx0ZW51bSBicGZfc3VicmVnIHN1YnJlZzoyO1xufTtcbmBgYFxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hlcmUgYW5kIGhvdyBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEknbGwgbmVlZCB0byBncmVwIGZvciBgYnBmX3JlZ19zdGF0ZWAgYWxsb2NhdGlvbnMgYW5kIGluaXRpYWxpemF0aW9ucyB3aXRoaW4gdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5IHRvIHRyYWNrIHRoaXMgZG93biwgYW5kIGxvb2sgZm9yIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEkgd2lsbCBjYXJlZnVsbHkgc2NydXRpbml6ZSBhbGwgdGhlIHVzZXMgb2YgYGFkZF9jb25zdGAgYW5kIGBzdWJyZWdgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGNvdWxkIGJlIGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nIG9uY2UgSSB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzU2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzA6NTguMDM5MzY3MzA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk3NDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdzX2V4YWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9NDU2PXN0YXRpYyBpbnQgY2xlYW5fdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDcyLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDczOnN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00NzQtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz00OTE9c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDk1LVxcdGlmIChleGFjdCA9PSBFWEFDVClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ5NjpcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy00OTctXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUzMS1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUzMjpcXHRcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy01MzMtXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02MzAtXFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2MzE6XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApIFxcdTAwMjZcXHUwMDI2IHJvbGQtXFx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cXHUwMDNlZnJhbWVubztcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTYzMi1cXHRjYXNlIFBUUl9UT19BUkVOQTpcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjM3LVxcdGRlZmF1bHQ6XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2Mzg6XFx0XFx0cmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjM5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MDE2PXN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpmaW5kX3ByZXZfZW50cnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQxLSAqIENoZWNrIGlmIHNjYWxhciByZWdpc3RlcnMgYXJlIGV4YWN0IGZvciB0aGUgcHVycG9zZSBvZiBub3Qgd2lkZW5pbmcuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgwNDI6ICogTW9yZSBsZW5pZW50IHRoYW4gcmVnc19leGFjdCgpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNDMtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjU4LjEwNjM2NDU3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE0OTE1OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJQRiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZXhhY3QgcmVnaXN0ZXIgc3RhdGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEJQRiBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgemVybyBpbiBvbiB0aGUgYHJlZ3NfZXhhY3RgIHZhcmlhYmxlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIGlzIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGZpbmVyIHBvaW50cyBvZiBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBleGVjdXRpb24gZW52aXJvbm1lbnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMwOjU5LjgyMTI4NDA3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFx0cmV0dXJuIDA7XFxuIDQ3MTpcXHR9XFxuIDQ3MjpcXHRcXG4gNDczOlxcdHN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxuIDQ3NDpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxuIDQ3NTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIDQ3NjpcXHR7XFxuIDQ3NzpcXHRcXHRyZXR1cm4gbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gNDc4OlxcdFxcdCAgICAgICByb2xkLVxcdTAwM2VhZGRfY29uc3QgPT0gcmN1ci1cXHUwMDNlYWRkX2NvbnN0IFxcdTAwMjZcXHUwMDI2XFxuIDQ3OTpcXHRcXHQgICAgICAgcm9sZC1cXHUwMDNlc3VicmVnID09IHJjdXItXFx1MDAzZXN1YnJlZyBcXHUwMDI2XFx1MDAyNlxcbiA0ODA6XFx0XFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVxcdTAwM2VpZCwgcmN1ci1cXHUwMDNlaWQsIGlkbWFwKSBcXHUwMDI2XFx1MDAyNlxcbiA0ODE6XFx0XFx0ICAgICAgIGNoZWNrX2lkcyhyb2xkLVxcdTAwM2VwYXJlbnRfaWQsIHJjdXItXFx1MDAzZXBhcmVudF9pZCwgaWRtYXApO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRlbnVtIGV4YWN0X2xldmVsIHtcXG4gNDg1OlxcdFxcdE5PVF9FWEFDVCxcXG4gNDg2OlxcdFxcdEVYQUNULFxcbiA0ODc6XFx0XFx0UkFOR0VfV0lUSElOXFxuIDQ4ODpcXHR9O1xcbiA0ODk6XFx0XFxuIDQ5MDpcXHQvKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cXG4gNDkxOlxcdHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxuIDQ5MjpcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbiA0OTM6XFx0XFx0XFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxuIDQ5NDpcXHR7XFxuIDQ5NTpcXHRcXHRpZiAoZXhhY3QgPT0gRVhBQ1QpXFxuIDQ5NjpcXHRcXHRcXHRyZXR1cm4gcmVnc19leGFjdChyb2xkLCByY3VyLCBpZG1hcCk7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdGlmIChyb2xkLVxcdTAwM2V0eXBlID09IE5PVF9JTklUKVxcbiA0OTk6XFx0XFx0XFx0LyogZXhwbG9yZWQgc3RhdGUgY2FuJ3QgaGF2ZSB1c2VkIHRoaXMgKi9cXG4gNTAwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHQvKiBFbmZvcmNlIHRoYXQgcmVnaXN0ZXIgdHlwZXMgaGF2ZSB0byBtYXRjaCBleGFjdGx5LCBpbmNsdWRpbmcgdGhlaXJcXG4gNTAzOlxcdFxcdCAqIG1vZGlmaWVycyAobGlrZSBQVFJfTUFZQkVfTlVMTCwgTUVNX1JET05MWSwgZXRjKSwgYXMgYSBnZW5lcmFsXFxuIDUwNDpcXHRcXHQgKiBydWxlLlxcbiA1MDU6XFx0XFx0ICpcXG4gNTA2OlxcdFxcdCAqIE9uZSBjYW4gbWFrZSBhIHBvaW50IHRoYXQgdXNpbmcgYSBwb2ludGVyIHJlZ2lzdGVyIGFzIHVuYm91bmRlZFxcbiA1MDc6XFx0XFx0ICogU0NBTEFSIHdvdWxkIGJlIHRlY2huaWNhbGx5IGFjY2VwdGFibGUsIGJ1dCB0aGlzIGNvdWxkIGxlYWQgdG9cXG4gNTA4OlxcdFxcdCAqIHBvaW50ZXIgbGVha3MgYmVjYXVzZSBzY2FsYXJzIGFyZSBhbGxvd2VkIHRvIGxlYWsgd2hpbGUgcG9pbnRlcnNcXG4gNTA5OlxcdFxcdCAqIGFyZSBub3QuIFdlIGNvdWxkIG1ha2UgdGhpcyBzYWZlIGluIHNwZWNpYWwgY2FzZXMgaWYgcm9vdCBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMDo1OS44MjE1MzcyODhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzMjk0ODE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyJ3MgUmVnaXN0ZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyByZWdpc3RlciBzdGF0ZS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuIFdoZXJlIGlzIHRoYXQgbG9jYXRlZCBhZ2Fpbj8gQWgsIHJpZ2h0LCBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRpbWUgdG8gb3BlbiB0aGF0IHVwIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV0YWlscyBvZiBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgbW9kZWxlZCB3aXRoaW4gdGhlIHZlcmlmaWVyLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBmaWVsZHMgdGhhdCBkaWN0YXRlIGhvdyB0aGUgdmVyaWZpZXIgdHJhY2tzIHRoZSBwb3NzaWJsZSB2YWx1ZXMsIHJhbmdlcywgYW5kIHR5cGVzIHRoYXQgcmVnaXN0ZXJzIGNhbiBob2xkIHRocm91Z2hvdXQgdGhlIEJQRiBwcm9ncmFtJ3MgZXhlY3V0aW9uLiBHb3R0YSBnZXQgdGhpcyBzdHJhaWdodCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Mjk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMTowMS45NTQ0ODgyNDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdCAqIHJlc3VsdCBpbiBhIGJhZCBhY2Nlc3MuXFxuIDE0MTpcXHRcXHQgKiBUaGVzZSByZWZlciB0byB0aGUgc2FtZSB2YWx1ZSBhcyB2YXJfb2ZmLCBub3QgbmVjZXNzYXJpbHkgdGhlIGFjdHVhbFxcbiAxNDI6XFx0XFx0ICogY29udGVudHMgb2YgdGhlIHJlZ2lzdGVyLlxcbiAxNDM6XFx0XFx0ICovXFxuIDE0NDpcXHRcXHRzdHJ1Y3QgY251bTY0IHI2NDsgLyogNjQtYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxNDU6XFx0XFx0c3RydWN0IGNudW0zMiByMzI7IC8qIDMyLWJpdCByYW5nZSBhcyBjaXJjdWxhciBudW1iZXIgKi9cXG4gMTQ2OlxcdFxcdC8qIEZvciBQVFJfVE9fUEFDS0VULCB1c2VkIHRvIGZpbmQgb3RoZXIgcG9pbnRlcnMgd2l0aCB0aGUgc2FtZSB2YXJpYWJsZVxcbiAxNDc6XFx0XFx0ICogb2Zmc2V0LCBzbyB0aGV5IGNhbiBzaGFyZSByYW5nZSBrbm93bGVkZ2UuXFxuIDE0ODpcXHRcXHQgKiBGb3IgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBtYXAgdmFsdWUgd2VcXG4gMTQ5OlxcdFxcdCAqIGNhbWUgZnJvbSwgd2hlbiBvbmUgaXMgdGVzdGVkIGZvciAhPSBOVUxMLlxcbiAxNTA6XFx0XFx0ICogRm9yIFBUUl9UT19NRU1fT1JfTlVMTCB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgbWVtb3J5IGFsbG9jYXRpb25cXG4gMTUxOlxcdFxcdCAqIGZvciB0aGUgcHVycG9zZSBvZiB0cmFja2luZyB0aGF0IGl0J3MgZnJlZWQuXFxuIDE1MjpcXHRcXHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxcbiAxNTM6XFx0XFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cXG4gMTU0OlxcdFxcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xcbiAxNTU6XFx0XFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxNTY6XFx0XFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcXFwiYmVsb25naW5nXFxcIiBvZiBhIHJlZmVyZW5jZVxcbiAxNTc6XFx0XFx0ICogdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiBicGZfaXRlci5cXG4gMTU4OlxcdFxcdCAqL1xcbiAxNTk6XFx0XFx0LypcXG4gMTYwOlxcdFxcdCAqIFJlZ2lzdGVycyBzaGFyaW5nIGFuIC1cXHUwMDNlaWQgYXJlIFxcXCJsaW5rZWRcXFwiOlxcbiAxNjE6XFx0XFx0ICogcjEgPSByMjsgICAgYm90aCB3aWxsIGhhdmUgcjEtXFx1MDAzZWlkID09IHIyLVxcdTAwM2VpZCA9PSBOXFxuIDE2MjpcXHRcXHQgKi9cXG4gMTYzOlxcdFxcdHUzMiBpZDtcXG4gMTY0OlxcdFxcdC8qXFxuIDE2NTpcXHRcXHQgKiBUcmFja3MgdGhlIHBhcmVudCBvYmplY3QgdGhpcyByZWdpc3RlciB3YXMgZGVyaXZlZCBmcm9tLlxcbiAxNjY6XFx0XFx0ICogVXNlZCBmb3IgY2FzY2FkaW5nIGludmFsaWRhdGlvbjogd2hlbiB0aGUgcGFyZW50IG9iamVjdCBpc1xcbiAxNjc6XFx0XFx0ICogcmVsZWFzZWQgb3IgaW52YWxpZGF0ZWQsIGFsbCByZWdpc3RlcnMgd2l0aCBtYXRjaGluZyBwYXJlbnRfaWRcXG4gMTY4OlxcdFxcdCAqIGFyZSBhbHNvIGludmFsaWRhdGVkLiBGb3IgZXhhbXBsZSwgYSBzbGljZSBmcm9tIGJwZl9keW5wdHJfZGF0YSgpXFxuIDE2OTpcXHRcXHQgKiBnZXRzIHBhcmVudF9pZCBzZXQgdG8gdGhlIGR5bnB0cidzIGlkLlxcbiAxNzA6XFx0XFx0ICovXFxuIDE3MTpcXHRcXHR1MzIgcGFyZW50X2lkO1xcbiAxNzI6XFx0XFx0LyogSW5zaWRlIHRoZSBjYWxsZWUgdHdvIHJlZ2lzdGVycyBjYW4gYmUgYm90aCBQVFJfVE9fU1RBQ0sgbGlrZVxcbiAxNzM6XFx0XFx0ICogUjE9ZnAtOCBhbmQgUjI9ZnAtOCwgYnV0IG9uZSBvZiB0aGVtIHBvaW50cyB0byB0aGlzIGZ1bmN0aW9uIHN0YWNrXFxuIDE3NDpcXHRcXHQgKiB3aGlsZSBhbm90aGVyIHRvIHRoZSBjYWxsZXIncyBzdGFjay4gVG8gZGlmZmVyZW50aWF0ZSB0aGVtICdmcmFtZW5vJ1xcbiAxNzU6XFx0XFx0ICogaXMgdXNlZCB3aGljaCBpcyBhbiBpbmRleCBpbiBicGZfdmVyaWZpZXJfc3RhdGUtXFx1MDAzZWZyYW1lW10gYXJyYXlcXG4gMTc2OlxcdFxcdCAqIHBvaW50aW5nIHRvIGJwZl9mdW5jX3N0YXRlLlxcbiAxNzc6XFx0XFx0ICovXFxuIDE3ODpcXHRcXHR1MzIgZnJhbWVubztcXG4gMTc5OlxcdFxcdC8qIGlmICghcHJlY2lzZSBcXHUwMDI2XFx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXFxuIDE4MDpcXHRcXHRib29sIHByZWNpc2U7XFxuIDE4MTpcXHRcXHQvKlxcbiAxODI6XFx0XFx0ICogSG93IHRoaXMgcmVnaXN0ZXIgcmVsYXRlcyB0byB0aGUgb3RoZXJzIHNoYXJpbmcgaXRzIC1cXHUwMDNlaWQuXFxuIDE4MzpcXHRcXHQgKiBOb24temVybyBvbmx5IGlmIC1cXHUwMDNlaWQgaXMuXFxuIDE4NDpcXHRcXHQgKi9cXG4gMTg1OlxcdFxcdGVudW0gYnBmX2FkZF9jb25zdCBhZGRfY29uc3Q6MjtcXG4gMTg2OlxcdFxcdGVudW0gYnBmX3N1YnJlZyBzdWJyZWc6MjtcXG4gMTg3OlxcdH07XFxuIDE4ODpcXHRcXG4gMTg5OlxcdHN0YXRpYyBpbmxpbmUgczY0IHJlZ19zbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDE5MDpcXHR7XFxuIDE5MTpcXHRcXHRyZXR1cm4gY251bTY0X3NtaW4ocmVnLVxcdTAwM2VyNjQpO1xcbiAxOTI6XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRzdGF0aWMgaW5saW5lIHM2NCByZWdfc21heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMTowMS45NTQ2NzY4NjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyMTk1NDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllcidzIE1lbW9yeSBDb21wYXJpc29uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtY21wYCBjYWxsOiBgbWVtY21wKHJvbGQsIHJjdXIsIG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZCkpYC4gVGhpcyBpcyBjb21wYXJpbmcgc29tZSBtZW1vcnkgcmVnaW9ucywgYHJvbGRgIGFuZCBgcmN1cmAsIHVwIHRvIGEgY2VydGFpbiBvZmZzZXQuIFRoZSBvZmZzZXQgaXMgZGVmaW5lZCBieSBgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKWAuIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIHdlJ3JlIGNvbXBhcmluZyBldmVyeXRoaW5nICpiZWZvcmUqIHRoZSBgaWRgIG1lbWJlciB3aXRoaW4gdGhlIGBicGZfcmVnX3N0YXRlYCBzdHJ1Y3QuIFxuXG5XaGF0IGV4YWN0bHkgKmlzKiBiZWZvcmUgYGlkYCBpbiB0aGF0IHN0cnVjdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNvbXBhcmVkIGhlcmUuIE15IGd1dCBzYXlzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBzdGF0ZSB0cmFja2luZy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc3RydWN0IGRlZmluaXRpb24sIGFuZCB3aGVyZSBpdCdzIHVzZWQuXG5cblRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBzcGVjaWZpY2FsbHkgbGluZXMgNDAgdG8gMTQ1LCBhcyB0aGF0IHNob3VsZCBjb250YWluIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfcmVnX3N0YXRlYCBhbmQgcmVsYXRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIGNvbXBhcmVkIGluIHRoaXMgY3JpdGljYWwgbWVtb3J5IGNvbXBhcmlzb24uIEl0J3MgcHJvYmFibHkga2V5IHRvIGhvdyB0aGUgdmVyaWZpZXIncyBzdGF0ZSBpcyBiZWluZyB0cmFja2VkIGFuZCBjb21wYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBpdGVyYXRpb25zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMxOjA0LjI3NjYzMzc3OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NSxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NTpcXHRcXHRTVUJSRUdfWkVYVCxcXHRcXHQvKiBoaWdoIGJpdHMgYXJlIHplcm8gKDMyLWJpdCB6ZXJvLWV4dGVuZGluZyBtb3YpICovXFxuICA1NjpcXHRcXHRTVUJSRUdfU0VYVCxcXHRcXHQvKiBoaWdoIGJpdHMgcmVwZWF0IGJpdCAzMSAoMzItYml0IHNpZ24tZXh0ZW5kaW5nIG1vdikgKi9cXG4gIDU3OlxcdH07XFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDYwOlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA2MTpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNjI6XFx0XFx0LypcXG4gIDYzOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNjQ6XFx0XFx0ICovXFxuICA2NTpcXHRcXHRzMzIgZGVsdGE7XFxuICA2NjpcXHRcXHR1bmlvbiB7XFxuICA2NzpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNjg6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNzE6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDcyOlxcdFxcdFxcdCAqL1xcbiAgNzM6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDc0OlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNzU6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDc2OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA3ODpcXHRcXHRcXHRcXHQgKi9cXG4gIDc5OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgODA6XFx0XFx0XFx0fTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDgzOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NDpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA4NTpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgODY6XFx0XFx0XFx0fTtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDkwOlxcdFxcdFxcdH07XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDkzOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA5NDpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgOTU6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDk2OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgOTc6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDk4OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA5OTpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuIDEwMDpcXHRcXHRcXHRcXHQgKi9cXG4gMTAxOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gMTAyOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gMTA1OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDEwNjpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuIDEwNzpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuIDEwODpcXHRcXHRcXHRcXHQgKi9cXG4gMTA5OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gMTEwOlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuIDExMTpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gMTEyOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gMTEzOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gMTE0OlxcdFxcdFxcdH0gaXRlcjtcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAxMTc6XFx0XFx0XFx0c3RydWN0IHtcXG4gMTE4OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAxMTk6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gMTIwOlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMjE6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTIyOlxcdFxcdFxcdH0gaXJxO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEyNTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMjY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMjc6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMjg6XFx0XFx0XFx0fSByYXc7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMzE6XFx0XFx0fTtcXG4gMTMyOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDEzMzpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMzQ6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDEzNTpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMzY6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTM3OlxcdFxcdCAqL1xcbiAxMzg6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG4gMTM5OlxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMTowNC4yNzY3NjQ3MThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk1MzU2NTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gYHN0cnVjdCBicGZfcmVnX3N0YXRlYCoqXG5cbk9rYXksIHNvIHRoZXkgdGFja2VkIGBhZGRfY29uc3Q6MmAgYW5kIGBzdWJyZWc6MmAgb250byB0aGUgZW5kIG9mIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAsIHJpZ2h0IGFmdGVyIGBwcmVjaXNlYC4gTGV0J3Mgc2VlIGhvdyB0aGF0J3MgYmVpbmcgdXNlZC4gSW4gYHJlZ3NfZXhhY3RgLCB0aGV5J3JlIGRvaW5nIHRoaXMgY2FyZWZ1bCBjb21wYXJpc29uLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgdXNpbmcgYG9mZnNldG9mKHN0cnVjdCBicGZfcmVnX3N0YXRlLCBpZClgIGluIGBtZW1jbXBgLiBUaGF0IG1lYW5zIHRoZSBgbWVtY21wYCBvbmx5IGxvb2tzIGF0IHRoZSBmaWVsZHMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgaWRgIChzbyBgdHlwZWAsIGBkZWx0YWAsIGB1bmlvbmAsIGB2YXJfb2ZmYCwgYHI2NGAsIGByMzJgKS4gVGhlbiwgdGhleSBleHBsaWNpdGx5IGNvbXBhcmUgYGFkZF9jb25zdGAsIGBzdWJyZWdgLCBgaWRgLCBhbmQgYHBhcmVudF9pZGAuXG5cbkhtbSwgaXMgYGZyYW1lbm9gIG9yIGBwcmVjaXNlYCBwYXJ0IG9mIHRoZSBgcmVnc19leGFjdGAgY2hlY2s/IE5vLCB3YWl0LCBgcmVnc19leGFjdGAgaXMganVzdCBjb21wYXJpbmcgdGhlICpiYXJlIG1pbmltdW0qIGl0IG5lZWRzLCBhbmQgYHJlZ3NhZmVgIGRvZXMgYSBjaGVjazpcblxuYGBgY1xuY2FzZSBQVFJfVE9fU1RBQ0s6XG4gICAgcmV0dXJuIHJlZ3NfZXhhY3Qocm9sZCwgcmN1ciwgaWRtYXApIFx1MDAyNlx1MDAyNiByb2xkLVx1MDAzZWZyYW1lbm8gPT0gcmN1ci1cdTAwM2VmcmFtZW5vO1xuYGBgXG5cbkludGVyZXN0aW5nLiBTbywgYGZyYW1lbm9gICppcyogY29tcGFyZWQgaW4gYHJlZ3NhZmVgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hlcmUgYGJwZl9yZWdfc3RhdGVgIGlzIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCwgb3IgdXNlZCBieSBgY2xlYW5fZnVuY19zdGF0ZWAgb3IgYF9fY2xlYW5fZnVuY19zdGF0ZWAuIFRoYXQncyB3aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBiZSBsdXJraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMxOjA4LjIzMDMzMzgzNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MjkyNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fY2xlYW5fZnVuY19zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTM3Mz1zdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zODItXFxua2VybmVsL2JwZi9zdGF0ZXMuYzozODM6c3RhdGljIHZvaWQgX19jbGVhbl9mdW5jX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zODQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3QsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ1Nj1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ2Ny1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ2ODpcXHRcXHRfX2NsZWFuX2Z1bmNfc3RhdGUoZW52LCBzdC1cXHUwMDNlZnJhbWVbaV0sIGxpdmVfcmVncywgaSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy00NjktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMTowOC43NzQ2MzM2ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2NDE4NTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBfX2NsZWFuX2Z1bmNfc3RhdGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYF9fY2xlYW5fZnVuY19zdGF0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIGlzIHdpcGluZyBjbGVhbi4gSSBzdXNwZWN0IGl0J3MgcmVsYXRlZCB0byBzb21lIGZvcm0gb2Ygc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGlvbiwgYnV0IHRoZSBkZXRhaWxzIGFyZSBjcnVjaWFsLiBLbm93aW5nIHByZWNpc2VseSB3aGF0IGl0J3MgY2xlYXJpbmcgaXMgZnVuZGFtZW50YWwgdG8gZ3Jhc3BpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgaXRzIGFwcGxpY2F0aW9uLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggc3lzdGVtcy4gSSBuZWVkIHRvIHNlZSBpZiBpdOKAmXMgcmVzZXR0aW5nIHZhcmlhYmxlcywgZGVsZXRpbmcgb2JqZWN0cywgbW9kaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIFVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgXCJjbGVhbmluZ1wiIHByb2Nlc3Mgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyBzdGF0ZSBpcyBtYW5hZ2VkIGFuZCBwcmVzZXJ2ZWQgKG9yIG5vdCBwcmVzZXJ2ZWQpIGJldHdlZW4gZnVuY3Rpb24gY2FsbHMuIFRoaXMgaXMgY29yZSB0byBzdGFiaWxpdHkgYW5kIHByZWRpY3RhYmxlIGJlaGF2aW9yIOKAkyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6MTAuODM4ODIzMzY1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXHRyZXR1cm4gY2hlY2tfaWRzKG9sZF9pZCwgY3VyX2lkLCBpZG1hcCk7XFxuIDM4MTpcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdHN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiAzODQ6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3QsXFxuIDM4NTpcXHRcXHRcXHRcXHQgICAgICAgdTE2IGxpdmVfcmVncywgaW50IGZyYW1lKVxcbiAzODY6XFx0e1xcbiAzODc6XFx0XFx0aW50IGksIGo7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCUEZfUkVHX0ZQOyBpKyspIHtcXG4gMzkwOlxcdFxcdFxcdC8qIGxpdmVuZXNzIG11c3Qgbm90IHRvdWNoIHRoaXMgcmVnaXN0ZXIgYW55bW9yZSAqL1xcbiAzOTE6XFx0XFx0XFx0aWYgKCEobGl2ZV9yZWdzIFxcdTAwMjYgQklUKGkpKSlcXG4gMzkyOlxcdFxcdFxcdFxcdC8qIHNpbmNlIHRoZSByZWdpc3RlciBpcyB1bnVzZWQsIGNsZWFyIGl0cyBzdGF0ZVxcbiAzOTM6XFx0XFx0XFx0XFx0ICogdG8gbWFrZSBmdXJ0aGVyIGNvbXBhcmlzb24gc2ltcGxlclxcbiAzOTQ6XFx0XFx0XFx0XFx0ICovXFxuIDM5NTpcXHRcXHRcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2c3QtXFx1MDAzZXJlZ3NbaV0pO1xcbiAzOTY6XFx0XFx0fVxcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHQvKlxcbiAzOTk6XFx0XFx0ICogQ2xlYW4gZGVhZCA0LWJ5dGUgaGFsdmVzIHdpdGhpbiBlYWNoIFNQSSBpbmRlcGVuZGVudGx5LlxcbiA0MDA6XFx0XFx0ICogaGFsZl9zcGkgMippICAg4oaSIGxvd2VyIGhhbGY6IHNsb3RfdHlwZVswLi4zXSAoY2xvc2VyIHRvIEZQKVxcbiA0MDE6XFx0XFx0ICogaGFsZl9zcGkgMippKzEg4oaSIHVwcGVyIGhhbGY6IHNsb3RfdHlwZVs0Li43XSAoZmFydGhlciBmcm9tIEZQKVxcbiA0MDI6XFx0XFx0ICovXFxuIDQwMzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3QtXFx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XFxuIDQwNDpcXHRcXHRcXHRib29sIGxvX2xpdmUgPSBicGZfc3RhY2tfc2xvdF9hbGl2ZShlbnYsIGZyYW1lLCBpICogMik7XFxuIDQwNTpcXHRcXHRcXHRib29sIGhpX2xpdmUgPSBicGZfc3RhY2tfc2xvdF9hbGl2ZShlbnYsIGZyYW1lLCBpICogMiArIDEpO1xcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRpZiAoIWhpX2xpdmUgfHwgIWxvX2xpdmUpIHtcXG4gNDA4OlxcdFxcdFxcdFxcdGludCBzdGFydCA9ICFsb19saXZlID8gMCA6IEJQRl9SRUdfU0laRSAvIDI7XFxuIDQwOTpcXHRcXHRcXHRcXHRpbnQgZW5kID0gIWhpX2xpdmUgPyBCUEZfUkVHX1NJWkUgOiBCUEZfUkVHX1NJWkUgLyAyO1xcbiA0MTA6XFx0XFx0XFx0XFx0dTggc3R5cGUgPSBzdC1cXHUwMDNlc3RhY2tbaV0uc2xvdF90eXBlWzddO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRcXHRcXHQvKlxcbiA0MTM6XFx0XFx0XFx0XFx0ICogRG9uJ3QgY2xlYXIgc3BlY2lhbCBzbG90cy5cXG4gNDE0OlxcdFxcdFxcdFxcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoKSBuZWVkcyBTVEFDS19EWU5QVFIgdG9cXG4gNDE1OlxcdFxcdFxcdFxcdCAqIGRldGVjdCBvdmVyd3JpdGVzIGFuZCBpbnZhbGlkYXRlIGFzc29jaWF0ZWQgZGF0YSBzbGljZXMuXFxuIDQxNjpcXHRcXHRcXHRcXHQgKiBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoKSBhbmQgaXNfaXJxX2ZsYWdfcmVnX3ZhbGlkX3VuaW5pdCgpXFxuIDQxNzpcXHRcXHRcXHRcXHQgKiBjaGVjayBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBzbG90IHR5cGVzIHRvIGRldGVjdCBkb3VibGUtY3JlYXRlLlxcbiA0MTg6XFx0XFx0XFx0XFx0ICovXFxuIDQxOTpcXHRcXHRcXHRcXHRpZiAoc3R5cGUgPT0gU1RBQ0tfRFlOUFRSIHx8IHN0eXBlID09IFNUQUNLX0lURVIgfHxcXG4gNDIwOlxcdFxcdFxcdFxcdCAgICBzdHlwZSA9PSBTVEFDS19JUlFfRkxBRylcXG4gNDIxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRcXHRcXHQvKlxcbiA0MjQ6XFx0XFx0XFx0XFx0ICogT25seSBzY2FsYXIgc3BpbGxzIGNhbiBiZSBkZWdyYWRlZCB0byByYXcgc3RhY2sgYnl0ZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6MTAuODM4OTg2NTU1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3MTE3MDkwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfbWFya19yZWdfbm90X2luaXRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9tYXJrX3JlZ19ub3RfaW5pdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgcHVycG9zZS4gQmFzZWQgb24gdGhlIG5hbWUsIGl0IHNlZW1zIHRvIGZsYWcgb3Igc29tZWhvdyBtYXJrIHJlZ2lzdGVycyB0aGF0IGhhdmVuJ3QgYmVlbiBpbml0aWFsaXplZCBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhdGljIGFuYWx5c2lzIG9yIHJ1bnRpbWUgc2FmZXR5IGNoZWNrcyB0byBwcmV2ZW50IHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXMsIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSB0byBhdm9pZC4gSeKAmW0gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dCDigJMgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiB1c2VkPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gSXMgaXQgcGFydCBvZiBhIGJyb2FkZXIgZnJhbWV3b3JrIGZvciBCUEYgcmVnaXN0ZXIgdHJhY2tpbmcsIG9yIGlzIGl0IG1vcmUgb2YgYSBsb2NhbGl6ZWQgY2hlY2s/IERvZXMgaXQgaW50ZWdyYXRlIHdpdGggb3RoZXIgQlBGIHZlcmlmaWVyIGNvbXBvbmVudHM/IEtub3dpbmcgaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZWZmaWNhY3kgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXIgbWFya2VycyBhcmUgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3NzaWJsZSB3YXlzIHRvIGJ5cGFzcyB0aGUgY2hlY2tzLCBhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiBhbnkgYnlwYXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA2MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6MjAuNTUwNjk5MzMzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2MjE2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcmtfcmVnX25vdF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MzgzPXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zOTQtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzozOTU6XFx0XFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnN0LVxcdTAwM2VyZWdzW2ldKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM5Ni1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ0Ny1cXHRcXHRcXHRcXHR9XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0NDg6XFx0XFx0XFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3BpbGwpO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDQ5LVxcdFxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODM9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTI6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnN0YWNrWzBdLnNwaWxsZWRfcHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzkzOlxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZzdGFja1sxXS5zcGlsbGVkX3B0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE5PXN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjEtXFx0aWYgKCFlbnYtXFx1MDAzZWFsbG93X3B0cl9sZWFrcylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODIyOlxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMy1cXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxOT1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNjpcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBzdCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0Mj1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90X2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5ODpcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBzdCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTktXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjI2MD1zdGF0aWMgaW50IF9fbWFya19yZWdfczMyX3JhbmdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjI4MDp2b2lkIGJwZl9tYXJrX3JlZ19ub3RfaW5pdChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjgxLVxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjMxNj1zdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIzMjItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfUkVHOyBpKyspIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjMyMzpcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tpXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIzMjQtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk3NTg9c3RhdGljIHZvaWQgY2xlYXJfY2FsbGVyX3NhdmVkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NzY2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk3Njc6XFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk3NjgtXFx0XFx0X19jaGVja19yZWdfYXJnKGVudiwgcmVncywgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTc3Mj1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05Nzc4LVxcdFxcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tfYXJnX3JlZ3NbaV0sIEJQRl9ESUFHX01PRF9DQUxMRVJfU0FWRUQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5Nzc5OlxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tfYXJnX3JlZ3NbaV0pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NzgwLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDIwMj1pbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyMjYtXFx0LyogdW51c2VkICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjI3OlxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR181XSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjI4LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMjcxPXN0YXRpYyBpbnQgc2V0X2xvb3BfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI4My1cXHQvKiB1bnVzZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAyODQ6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAyODU6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAyODY6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzVdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyODctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyOTM9c3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMxOS1cXHQvKiB1bnVzZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzMjA6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzMjE6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzVdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzMjItXFx0Y2FsbGVlLVxcdTAwM2Vpbl9hc3luY19jYWxsYmFja19mbiA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzMjc9c3RhdGljIGludCBzZXRfZmluZF92bWFfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM0Ny1cXHQvKiB1bnVzZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNDg6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNDk6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzVdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNTAtXFx0Y2FsbGVlLVxcdTAwM2Vpbl9jYWxsYmFja19mbiA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTU9c3RhdGljIGludCBzZXRfdXNlcl9yaW5nYnVmX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjMtXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzY0OlxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18wXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzY1LVxcdG1hcmtfZHlucHRyX2NiX3JlZyhlbnYsIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18xXSwgQlBGX0RZTlBUUl9UWVBFX0xPQ0FMKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2OC1cXHQvKiB1bnVzZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNjk6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNzA6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNzE6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzVdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNzItXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNzg9c3RhdGljIGludCBzZXRfcmJ0cmVlX2FkZF9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwMzpcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwNDpcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwNTpcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNV0pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQwNi1cXHRjYWxsZWUtXFx1MDAzZWluX2NhbGxiYWNrX2ZuID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDQxMT1zdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQzNy1cXHQvKiB1bnVzZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0Mzg6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0Mzk6XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzVdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0NDAtXFx0Y2FsbGVlLVxcdTAwM2Vpbl9hc3luY19jYWxsYmFja19mbiA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwMDg9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyNzk6XFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjgwLVxcdFxcdGNoZWNrX3JlZ19hcmcoZW52LCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDA2MT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTIwLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEyMTpcXHRcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxMjItXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQzMDgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MzA5OlxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW3JlZ25vXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MzEwLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzcyNz1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3ODUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3ODY6XFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Nzg3LVxcdFxcdGNoZWNrX3JlZ19hcmcoZW52LCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6MjAuNjY5MzI1MjQxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODE2MDI3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGEgcG90ZW50aWFsIGlzc3VlLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24gd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9tYXJrX3JlZ19ub3RfaW5pdGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSdsbCBiZSBjaGVja2luZyB0aGlzIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyByZWdpc3RlciBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgYW5kIHB1cnBvc2UuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYyBoZXJlIHRoYXQgbmVlZHMgY2xhcmlmeWluZywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSB2ZXJpZmllciB0cmFja3Mgb3IgZmxhZ3MgdW5pbml0aWFsaXplZCByZWdpc3RlcnMuIFRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgcGllY2Ugb2YgdGhlIG92ZXJhbGwgdmVyaWZpY2F0aW9uIHB1enpsZSwgc28gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGFuZCB3aHkgaXQncyB1c2VkLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NDk5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6MjMuNDUwOTMyMTY3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODA6XFx0dm9pZCBicGZfbWFya19yZWdfbm90X2luaXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjgxOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMjI4MjpcXHR7XFxuMjI4MzpcXHRcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWcpO1xcbjIyODQ6XFx0XFx0cmVnLVxcdTAwM2V0eXBlID0gTk9UX0lOSVQ7XFxuMjI4NTpcXHR9XFxuMjI4NjpcXHRcXG4yMjg3OlxcdHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMjI4ODpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxcbjIyODk6XFx0XFx0XFx0XFx0ICAgZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUsXFxuMjI5MDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsXFxuMjI5MTpcXHRcXHRcXHRcXHQgICBlbnVtIGJwZl90eXBlX2ZsYWcgZmxhZylcXG4yMjkyOlxcdHtcXG4yMjkzOlxcdFxcdHN3aXRjaCAocmVnX3R5cGUpIHtcXG4yMjk0OlxcdFxcdGNhc2UgU0NBTEFSX1ZBTFVFOlxcbjIyOTU6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTtcXG4yMjk2OlxcdFxcdFxcdHJldHVybiAwO1xcbjIyOTc6XFx0XFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxcbjIyOTg6XFx0XFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIHJlZ25vKTtcXG4yMjk5OlxcdFxcdFxcdHJlZ3NbcmVnbm9dLnR5cGUgPSBQVFJfVE9fQlRGX0lEIHwgZmxhZztcXG4yMzAwOlxcdFxcdFxcdHJlZ3NbcmVnbm9dLmJ0ZiA9IGJ0ZjtcXG4yMzAxOlxcdFxcdFxcdHJlZ3NbcmVnbm9dLmJ0Zl9pZCA9IGJ0Zl9pZDtcXG4yMzAyOlxcdFxcdFxcdGlmICh0eXBlX21heV9iZV9udWxsKGZsYWcpKVxcbjIzMDM6XFx0XFx0XFx0XFx0cmVnc1tyZWdub10uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbjIzMDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjMwNTpcXHRcXHRjYXNlIFBUUl9UT19NRU06XFxuMjMwNjpcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgcmVnbm8pO1xcbjIzMDc6XFx0XFx0XFx0cmVnc1tyZWdub10udHlwZSA9IFBUUl9UT19NRU0gfCBmbGFnO1xcbjIzMDg6XFx0XFx0XFx0cmVnc1tyZWdub10ubWVtX3NpemUgPSAwO1xcbjIzMDk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjMxMDpcXHRcXHRkZWZhdWx0OlxcbjIzMTE6XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVuZXhwZWN0ZWQgcmVnX3R5cGUgJWQgaW4gJXNcXFxcblxcXCIsIHJlZ190eXBlLCBfX2Z1bmNfXyk7XFxuMjMxMjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yMzEzOlxcdFxcdH1cXG4yMzE0OlxcdH1cXG4yMzE1OlxcdFxcbjIzMTY6XFx0c3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMzE3OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXFxuMjMxODpcXHR7XFxuMjMxOTpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IHN0YXRlLVxcdTAwM2VyZWdzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMToyMy40NTMzNDc1NzdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUwNjQ0OTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYF9fbWFya19yZWdfdW5rbm93bmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgX19tYXJrX3JlZ191bmtub3duYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBTZWVpbmcgdGhpcyBuYW1lLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaXRzIHJvbGUgaW4gcmVnaXN0ZXIgbWFuYWdlbWVudCBvciB0cmFja2luZy4gVGhlIFwidW5rbm93blwiIHBhcnQgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgcmVnaXN0ZXJzIHdob3NlIHN0YXRlIGlzbid0IHByZWNpc2VseSBkZWZpbmVkIGF0IGEgY2VydGFpbiBwb2ludCwgb3IgcGVyaGFwcyBpbml0aWFsaXphdGlvbiwgb3Igd2l0aGluIGEgc3BlY2lmaWMgY29udHJvbCBmbG93LlxuXG5JJ20gdGhpbmtpbmcsIHRoaXMgaXMgcHJvYmFibHkgaW1wbGVtZW50ZWQgYXQgYSBmYWlybHkgbG93IGxldmVsLiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIG9wdGltaXppbmcgY29tcGlsZXIgcGFzc2VzLCBvciBwZXJoYXBzIGV2ZW4gaW4gdGhlIGNvcmUgb2YgYW4gZW11bGF0b3Igb3IgdmlydHVhbCBtYWNoaW5lLiBHaXZlbiB0aGUgZW1waGFzaXMgb24gXCJtYXJrLFwiIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgb3IgYml0bWFzayB0byBiZSBtYW5pcHVsYXRlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSByZWdpc3RlcidzIGNvbnRlbnRzIGFyZSBpbmRldGVybWluYXRlIG9yIGludmFsaWQgZm9yIGEgcGFydGljdWxhciBvcGVyYXRpb24uXG5cblRoZSBrZXkgcXVlc3Rpb25zIGltbWVkaWF0ZWx5IGZvcm1pbmcgaW4gbXkgaGVhZCBhcmU6IFdoYXQgdHJpZ2dlcnMgdGhpcyBtYXJraW5nPyBJcyBpdCBkdWUgdG8gY29udHJvbCBmbG93IHBhdGhzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgcGVyaGFwcyByZWdpc3RlciBhbGlhc2luZyB0aGF0IGlzbid0IGNsZWFubHkgaGFuZGxlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciByZWdpc3RlciBhbmFseXNpcyB0ZWNobmlxdWVzIGxpa2UgbGl2ZW5lc3MgYW5hbHlzaXMgb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbj8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgb2Z0ZW4sIGlzIGl0IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgcm91dGluZXMsIGUuZy4gYF9fdW5tYXJrX3JlZ19rbm93bmA/IElzIHRoZXJlIGEgY29udGV4dCBzd2l0Y2gsIG9yIGZ1bmN0aW9uIGNhbGwgaGVyZT8gSG93IGFyZSB0aGVzZSByZWdpc3RlcnMgbGF0ZXIgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHJ1bnRpbWUgY2hlY2tzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgZ2VuZXJhdGUgY29tcGlsZSB0aW1lIGVycm9ycz8gSXMgaXQgZ2VuZXJhdGluZyBhIHdhcm5pbmc/IFRoaXMgbXVzdCBiZSBpbXBvcnRhbnQuXG5cbkluIHNob3J0LCBteSBtaW5kIGlzIGFscmVhZHkgZm9ybXVsYXRpbmcgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeSwgYW5kIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygd2hhdGV2ZXIgc3lzdGVtIG9yIHRvb2wgd2UncmUgZXhhbWluaW5nLiBJJ20ga2VlbiB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQzNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6MjcuOTU5Nzk5NDM3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ0MjYxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tYXJrX3JlZ191bmtub3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz03OTY9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTY6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE5PXN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjMtXFx0ZWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MjQ6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI1LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjM2PXZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI0Ni0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjI0NzpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI0OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjU0PXN0YXRpYyB2b2lkIG1hcmtfcmVnX3Vua25vd24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjU2LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjI1NzpcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICsgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMjU4LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjgwPXZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI4Mi17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyODM6XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjI4NC1cXHRyZWctXFx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MDUzPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzE0My1cXHRcXHRcXHRpZiAoY2xvYmJlcikge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTQ0OlxcdFxcdFxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxNDUtXFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwNTA9c3RhdGljIHZvaWQgbWF5YmVfd2lkZW5fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODA1OC1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgwNTk6XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmN1cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNjAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0OTAwPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTIyLVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDkyMzpcXHRcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5MjQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5MjktXFx0XFx0aWYgKG9wY29kZSA9PSBCUEZfU1VCIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYWxsb3dfcHRyX2xlYWtzKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTMwOlxcdFxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzMS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTkwMT1zdGF0aWMgaW50IGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5MTEtXFx0aWYgKCFpc19zYWZlX3RvX2NvbXB1dGVfZHN0X3JlZ19yYW5nZShpbnNuLCBcXHUwMDI2c3JjX3JlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5MTI6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTEzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NTkwPXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzY3NS1cXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJFTkEpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc2NzY6XFx0XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Njc3LVxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZW1hcF9wdHIgPSBtYXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMxOjI4LjA3NDIzMDYzNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU5Mjc0Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZTpcblxuKipEaXZpbmcgaW50byBCUEYgUmVnaXN0ZXIgVHJhY2tpbmcqKlxuXG5SaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHJlZ2lzdGVyIHRyYWNraW5nLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGhvdyBpdCBkZWFscyB3aXRoIHVua25vd25zIGFuZCBpbXByZWNpc2lvbi4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMsIGBfX21hcmtfcmVnX3Vua25vd25gIGFuZCBgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYCwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agc3BlY2lmaWNhbGx5LCBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSByZWdpc3RlciBjb250ZW50IGlzIHVuY2VydGFpbi4gSSBleHBlY3QgdGhlIGZpcnN0IGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgYSByZWdpc3RlcnMgdmFsdWUgaXMgZW50aXJlbHkgdW5rbm93biwgd2hlcmVhcyB0aGUgbGF0dGVyIGlzIGZvciBzaXR1YXRpb25zIHdoZXJlIHdlIGtub3cgKnNvbWV0aGluZyosIGJ1dCBub3QgZXZlcnl0aGluZy4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5IGludGVycGxheS4gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIEJQRiB2ZXJpZmllciBhcmUgc2lnbmlmaWNhbnQgd2hlbiB5b3UgY2FuJ3QgYmUgcHJlY2lzZSBhYm91dCB0aGUgc3RhdGUgb2YgYSByZWdpc3RlciDigJMgZG9lcyBpdCBkZWZhdWx0IHRvIHNhZmUgYXNzdW1wdGlvbnM/IERvZXMgaXQgaW50cm9kdWNlIG1vcmUgY29uc2VydmF0aXZlIGNvbnN0cmFpbnRzIG9uIHdoYXQncyBhbGxvd2VkIGluIHRoZSBCUEYgcHJvZ3JhbT8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIHZlcmlmaWVyJ3MgZWZmZWN0aXZlbmVzcyBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zLCBlc3BlY2lhbGx5IHdoZW4gbG9va2luZyBhdCBvcHRpbWl6YXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBjb250cmlidXRlIHRvIGNvcnJlY3RuZXNzIGFuZCBzZWN1cml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMTozMC43MzM1MDgxNDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjMwOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIyMzE6XFx0XFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcXG4yMjMyOlxcdFxcdHJldHVybiAwO1xcbjIyMzM6XFx0fVxcbjIyMzQ6XFx0XFxuMjIzNTpcXHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xcbjIyMzY6XFx0dm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4yMjM3OlxcdHtcXG4yMjM4OlxcdFxcdG1lbXNldChyZWcsIDAsIHNpemVvZigqcmVnKSk7XFxuMjIzOTpcXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XFxuMjI0MDpcXHRcXHRyZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XFxuMjI0MTpcXHRcXHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xcbjIyNDI6XFx0fVxcbjIyNDM6XFx0XFxuMjI0NDpcXHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLFxcbjIyNDU6XFx0ICogaW5pdGlhbGl6ZSAucHJlY2lzZSBhcyB0cnVlIHdoZW4gbm90IGJwZiBjYXBhYmxlLlxcbjIyNDY6XFx0ICovXFxuMjI0NzpcXHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjQ4OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjIyNDk6XFx0e1xcbjIyNTA6XFx0XFx0YnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHJlZyk7XFxuMjI1MTpcXHRcXHRyZWctXFx1MDAzZXByZWNpc2UgPSAhZW52LVxcdTAwM2VicGZfY2FwYWJsZTtcXG4yMjUyOlxcdH1cXG4yMjUzOlxcdFxcbjIyNTQ6XFx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyNTU6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vKVxcbjIyNTY6XFx0e1xcbjIyNTc6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVncyArIHJlZ25vKTtcXG4yMjU4OlxcdH1cXG4yMjU5OlxcdFxcbjIyNjA6XFx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjIyNjE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXFxuMjI2MjpcXHRcXHRcXHRcXHRcXHR1MzIgcmVnbm8sXFxuMjI2MzpcXHRcXHRcXHRcXHRcXHRzMzIgczMyX21pbixcXG4yMjY0OlxcdFxcdFxcdFxcdFxcdHMzMiBzMzJfbWF4KVxcbjIyNjU6XFx0e1xcbjIyNjY6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ3MgKyByZWdubztcXG4yMjY3OlxcdFxcbjIyNjg6XFx0XFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXFxuMjI2OTpcXHRcXHRcXHRcXHQgbWF4X3QoczMyLCByZWdfczMyX21pbihyZWcpLCBzMzJfbWluKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6MzAuNzM0MzY5ODIzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTkwODk3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlZ2lzdGVyIE1hcmtpbmcgaW4gQlBGKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgdXNpbmcgYG1lbXNldChyZWcsIDAsIHNpemVvZigqcmVnKSlgLiBUaGlzIG1lYW5zIHRoZSBlbnRpcmUgcmVnaXN0ZXIgc3RydWN0dXJlIGlzIGJlaW5nIHplcm9lZCBvdXQuIFRoYXQncyBnb29kLCBpdCBtYWtlcyB0aGUgY29kZSBwcmVkaWN0YWJsZS4gSXQgYWxzbyBtZWFucyB0aGF0IGZpZWxkcyBsaWtlIGBhZGRfY29uc3Q6MmAgYW5kIGBzdWJyZWc6MmAsIHdoaWNoIGhhdmUgYSBkZWZhdWx0IHZhbHVlIG9mIDAsIHdoaWNoIGFsc28gdHJhbnNsYXRlcyB0byBgTk9ORWAsIGFyZSBndWFyYW50ZWVkIHRvIGJlIHJlc2V0LiBUaGlzIG1ha2VzIHRoZSBsb2dpYyBtb3JlIHJlbGlhYmxlLCBhbmQgSSBsaWtlIHRoYXQgaXQgY2xlYXJzIGV2ZXJ5dGhpbmcgdG8gYSBrbm93biBzdGF0ZS5cblxuTm93LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYF9fbWFya19yZWdfa25vd25gIHRvIHNlZSBob3cgaXQncyBoYW5kbGVkLiBMZXQncyBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcmVnaXN0ZXIgemVyb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMxOjMyLjg1MzQ2MjIyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwMDpcXHQvKiBNYXJrIHRoZSB1bmtub3duIHBhcnQgb2YgYSByZWdpc3RlciAodmFyaWFibGUgb2Zmc2V0IG9yIHNjYWxhciB2YWx1ZSkgYXNcXG4xOTAxOlxcdCAqIGtub3duIHRvIGhhdmUgdGhlIHZhbHVlIEBpbW0uXFxuMTkwMjpcXHQgKi9cXG4xOTAzOlxcdHN0YXRpYyB2b2lkIF9fbWFya19yZWdfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcXG4xOTA0OlxcdHtcXG4xOTA1OlxcdFxcdC8qIENsZWFyIG9mZiBhbmQgdW5pb24obWFwX3B0ciwgcmFuZ2UpICovXFxuMTkwNjpcXHRcXHRtZW1zZXQoKCh1OCAqKXJlZykgKyBzaXplb2YocmVnLVxcdTAwM2V0eXBlKSwgMCxcXG4xOTA3OlxcdFxcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikgLSBzaXplb2YocmVnLVxcdTAwM2V0eXBlKSk7XFxuMTkwODpcXHRcXHRyZWctXFx1MDAzZWlkID0gMDtcXG4xOTA5OlxcdFxcdHJlZy1cXHUwMDNlcGFyZW50X2lkID0gMDtcXG4xOTEwOlxcdFxcdHJlZy1cXHUwMDNlYWRkX2NvbnN0ID0gQUREX0NPTlNUX05PTkU7XFxuMTkxMTpcXHRcXHRyZWctXFx1MDAzZXN1YnJlZyA9IFNVQlJFR19OT05FO1xcbjE5MTI6XFx0XFx0X19fbWFya19yZWdfa25vd24ocmVnLCBpbW0pO1xcbjE5MTM6XFx0fVxcbjE5MTQ6XFx0XFxuMTkxNTpcXHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnMzJfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcXG4xOTE2OlxcdHtcXG4xOTE3OlxcdFxcdHJlZy1cXHUwMDNldmFyX29mZiA9IHRudW1fY29uc3Rfc3VicmVnKHJlZy1cXHUwMDNldmFyX29mZiwgaW1tKTtcXG4xOTE4OlxcdFxcdHJlZy1cXHUwMDNlcjMyID0gY251bTMyX2Zyb21fdXJhbmdlKCh1MzIpaW1tLCAodTMyKWltbSk7XFxuMTkxOTpcXHR9XFxuMTkyMDpcXHRcXG4xOTIxOlxcdC8qIE1hcmsgdGhlICd2YXJpYWJsZSBvZmZzZXQnIHBhcnQgb2YgYSByZWdpc3RlciBhcyB6ZXJvLiAgVGhpcyBzaG91bGQgYmVcXG4xOTIyOlxcdCAqIHVzZWQgb25seSBvbiByZWdpc3RlcnMgaG9sZGluZyBhIHBvaW50ZXIgdHlwZS5cXG4xOTIzOlxcdCAqL1xcbjE5MjQ6XFx0c3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bl96ZXJvKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjMxOjMyLjg1NDExNTcxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxNTMwMjkxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBSZWdpc3RlciBTdGF0ZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIHplcm9lcyBvdXQgdGhlIGBpZGAsIGBkZWx0YWAsIGFuZCBgYWRkX2NvbnN0YCBtZW1iZXJzIG9mIGEgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdCwgYW5kIGFsc28gcmVzZXRzIGBzdWJyZWdgIHRvIGBTVUJSRUdfTk9ORWAuIFRoYXQncyBnb29kLCBidXQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoaXMgaXMgdGhlICpvbmx5KiBwbGFjZSB3aGVyZSB0aGVzZSBmaWVsZHMgbWlnaHQgYmUgb25seSAqcGFydGlhbGx5KiBpbml0aWFsaXplZCwgY29waWVkLCBvciBjb21wYXJlZC4gSXQncyBjcnVjaWFsIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cblxuU28sIEkgbmVlZCB0byBleHBhbmQgbXkgdmlldy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5IGZvciBldmVyeSBpbnN0YW5jZSBvZiBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgcmVnaXN0ZXJzIGFyZSBiZWluZyBoYW5kbGVkIHRocm91Z2hvdXQgdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIGhlbHAgbWUgaWRlbnRpZnkgb3RoZXIgYXJlYXMgdGhhdCBtaWdodCBuZWVkIHNpbWlsYXIgY2xlYW51cCBvciBjYXJlZnVsIGNvbnNpZGVyYXRpb24gdG8gYXZvaWQgc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG9yIGltcHJvcGVybHkgbWFuYWdlZCByZWdpc3RlciBzdGF0ZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGRlc2lnbiBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgcmVseSBvbiBhc3N1bXB0aW9ucyBhYm91dCBpbXBsaWNpdCBkZWZhdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMTozOC4wMDcxNDgxMjlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzY0NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9yZWdfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjM0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jPTY3OT12b2lkIGJwZl9tYXJrX2FsbF9zY2FsYXJzX3ByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNjgyLVxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqZnVuYztcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjY4MzpcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNjg0LVxcdGludCBpLCBqO1xcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYz04MTM9aW50IGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy04MjQtXFx0Ym9vbCB0bXAsIHNraXBfZmlyc3QgPSB0cnVlO1xcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6ODI1OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy04MjYtXFx0aW50IGksIGZyLCBlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTc0MTA9aW50IGJ0Zl9zdHJ1Y3RfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi9idGYuYzo3NDExOlxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi9idGYuYy03NDEyLVxcdFxcdCAgICAgIGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhdHlwZSBfX21heWJlX3VudXNlZCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTgyNz1ib29sIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi9idGYuYzo5ODI4OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi9idGYuYy05ODI5LVxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsIHUzMiBidGZfaWQsIGNvbnN0IGNoYXIgKnN1ZmZpeClcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yMDc9c3RydWN0IGJwZl9kaWFnX21vZF9zY29wZSB7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjIwODpcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB0YXJnZXRfcmVnX3NuYXBzaG90O1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMDktXFx0c3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgdGFyZ2V0O1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTEyMzI9dm9pZCBicGZfZGlhZ19pbnZhbGlkX2RlcmVmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgaW50IHJlZ25vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxMjMzOlxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpyZWdfbmFtZSwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTIzNC1cXHRcXHRcXHQgICAgZW51bSBicGZfZGlhZ19pbnZhbGlkX2RlcmVmX2tpbmQga2luZCwgczY0IG9mZnNldClcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNDQxPXN0YXRpYyB2b2lkIGRpYWdfc25hcHNob3RfcmVnKHN0cnVjdCBicGZfZGlhZ19yZWdfc25hcHNob3QgKnNuYXBzaG90LFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNDQyOlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE0NDMte1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1MTI9c3RhdGljIHZvaWQgZGlhZ19yZWNvcmRfbW9kKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNTE0LVxcdFxcdFxcdCAgICBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNTE1OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkX3JlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTUxNjpcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm5ld19yZWcsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1MTctXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZGlhZ19tb2RfdGFyZ2V0ICpvcmlnaW4pXFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU0Ny1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTU0ODpzdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnRhcmdldF90b19yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTU0OS1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2RpYWdfbW9kX3RhcmdldCAqdGFyZ2V0KVxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE1NzgtXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE1Nzk6c3RhdGljIGJvb2wgcmVnX3RvX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNTgwLVxcdFxcdFxcdCAgc3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgKnRhcmdldClcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjE5LVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjIwOnZvaWQgYnBmX2RpYWdfbW9kX2JlZ2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjE6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbilcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYyMi17XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MTYzNj12b2lkIGJwZl9kaWFnX21vZF9lbmQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjM4LVxcdHN0cnVjdCBicGZfZGlhZyAqZGlhZyA9IGVudi1cXHUwMDNlZGlhZztcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTYzOTpcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbmV3X3JlZztcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTY0MC1cXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjU1LVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjU2OnZvaWQgYnBmX2RpYWdfcmVjb3JkX3NjcnViKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE2NTctXFx0XFx0XFx0ICAgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbilcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xOTMyPXN0YXRpYyBjb25zdCBjaGFyICpkaWFnX2FjY2Vzc19vZmZzZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZixcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MTkzMzpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xOTM0LXtcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xOTUyPXZvaWQgYnBmX2RpYWdfbWVtX2JvdW5kcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTk1My1cXHRcXHRcXHQgY29uc3QgY2hhciAqcmVnX25hbWUsIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSwgY29uc3QgY2hhciAqcHJvb2YsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE5NTQ6XFx0XFx0XFx0IGludCBvZmYsIGludCBzaXplLCB1MzIgbWVtX3NpemUsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE5NTUte1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTEzPXN0cnVjdCBicGZfZnVuY19zdGF0ZTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6MTQ6c3RydWN0IGJwZl9yZWdfc3RhdGU7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oLTE1LXN0cnVjdCBicGZfdmVyaWZpZXJfZW52O1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTYwPXZvaWQgYnBmX2RpYWdfaW52YWxpZF9kZXJlZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGludCByZWdubyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6NjE6XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKnJlZ19uYW1lLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC02Mi1cXHRcXHRcXHQgICAgZW51bSBicGZfZGlhZ19pbnZhbGlkX2RlcmVmX2tpbmQga2luZCwgczY0IG9mZnNldCk7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg9Njk9dm9pZCBicGZfZGlhZ19tZW1fYm91bmRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgaW50IHJlZ25vLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC03MC1cXHRcXHRcXHQgY29uc3QgY2hhciAqcmVnX25hbWUsIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSwgY29uc3QgY2hhciAqcHJvb2YsXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oOjcxOlxcdFxcdFxcdCBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTMyIG1lbV9zaXplLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtNzItdm9pZCBicGZfZGlhZ19yZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBjb25zdCBjaGFyICpwcm9ibGVtLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTg6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTk6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbik7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oLTEwMC12b2lkIGJwZl9kaWFnX21vZF9lbmQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oOjEwMTp2b2lkIGJwZl9kaWFnX3JlY29yZF9zY3J1YihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC0xMDItXFx0XFx0XFx0ICAgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbik7XFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jPTU1Mz1zdGF0aWMgdm9pZCBwcmludF9zY2FsYXJfcmFuZ2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9sb2cuYzo1NTQ6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2xvZy5jLTU1NS1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICoqc2VwKVxcbi0tXFxua2VybmVsL2JwZi9sb2cuYz02MjQ9c3RhdGljIHZvaWQgcHJpbnRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9sb2cuYy02MjUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXFxua2VybmVsL2JwZi9sb2cuYzo2MjY6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi9sb2cuYy02Mjcte1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYz03MDQ9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jLTcwNy1cXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gdnN0YXRlLVxcdTAwM2VmcmFtZVtmcmFtZW5vXTtcXG5rZXJuZWwvYnBmL2xvZy5jOjcwODpcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbmtlcm5lbC9icGYvbG9nLmMtNzA5LVxcdGludCBpO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0yMjc9c3RhdGljIGludCBhZGRfc2NjX2JhY2tlZGdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTI1NC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjI1NTovKiBicGZfcmVnX3N0YXRlLVxcdTAwM2VsaXZlIG1hcmtzIGZvciByZWdpc3RlcnMgaW4gYSBzdGF0ZSBAc3QgYXJlIGluY29tcGxldGUsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0yNTYtICogaWYgc3RhdGUgQHN0IGlzIGluIHNvbWUgU0NDIGFuZCBub3QgYWxsIGV4ZWN1dGlvbiBwYXRocyBzdGFydGluZyBhdCB0aGlzXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTI3Mz1pbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMDEtLyogY2hlY2sgJWN1cidzIHJhbmdlIHNhdGlzZmllcyAlb2xkJ3MgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjMwMjpzdGF0aWMgYm9vbCByYW5nZV93aXRoaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjMwMzpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmN1cilcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwNC17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTM4Mz1zdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDI5LVxcdFxcdFxcdGlmICghaGlfbGl2ZSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDMwOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcGlsbCA9IFxcdTAwMjZzdC1cXHUwMDNlc3RhY2tbaV0uc3BpbGxlZF9wdHI7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzEtXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ1Nj1zdGF0aWMgaW50IGNsZWFuX3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ3Mi1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQ3MzpzdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDc0OlxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ3NS1cXHRcXHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00NzYte1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDc3OlxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGlkKSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDc4LVxcdCAgICAgICByb2xkLVxcdTAwM2VhZGRfY29uc3QgPT0gcmN1ci1cXHUwMDNlYWRkX2NvbnN0IFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTQ4ND1lbnVtIGV4YWN0X2xldmVsIHtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDkwLS8qIFJldHVybnMgdHJ1ZSBpZiAocm9sZCBzYWZlIGltcGxpZXMgcmN1ciBzYWZlKSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDkxOnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0OTI6XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQ5My1cXHRcXHQgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTYxLVxcdFxcdCAqIEZpcnN0IHZlcmlmaWNhdGlvbiBwYXRoIGlzIFsxLTZdOlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NTYyOlxcdFxcdCAqIC0gYXQgKDQpIHNhbWUgYnBmX3JlZ19zdGF0ZTo6aWQgKGIpIHdvdWxkIGJlIGFzc2lnbmVkIHRvIHI2IGFuZCByNztcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU2My1cXHRcXHQgKiAtIGF0ICg1KSByNiB3b3VsZCBiZSBtYXJrZWQgXFx1MDAzYz0gWCwgc3luY19saW5rZWRfcmVncygpIHdvdWxkIGFsc28gbWFya1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02MDAtXFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2MDE6XFx0XFx0cmV0dXJuIG1lbWNtcChyb2xkLCByY3VyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSwgdmFyX29mZikpID09IDAgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTYwMi1cXHRcXHQgICAgICAgcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTYzNC1cXHRjYXNlIFBUUl9UT19JTlNOOlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NjM1OlxcdFxcdHJldHVybiBtZW1jbXAocm9sZCwgcmN1ciwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYy02MzYtXFx0XFx0ICAgICAgIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcXHUwMDI2XFx1MDAyNiB0bnVtX2luKHJvbGQtXFx1MDAzZXZhcl9vZmYsIHJjdXItXFx1MDAzZXZhcl9vZmYpO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02NDEtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NDI6c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlIHVuYm91bmRfcmVnO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjQzLVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz02NTc9c3RhdGljIGJvb2wgaXNfc3RhY2tfbWlzY19hZnRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy02NzItXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2NzM6c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjc0LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2ssIGludCBpbSlcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9Njg1PXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjk1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvbGQtXFx1MDAzZWFsbG9jYXRlZF9zdGFjazsgaSsrKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo2OTY6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9yZWcsICpjdXJfcmVnO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjk3LVxcdFxcdGludCBpbSA9IGkgJSBCUEZfUkVHX1NJWkU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc2OS1cXHRcXHRcXHQgKiBFeDogZXhwbG9yZWQgc2FmZSBwYXRoIGNvdWxkIGhhdmUgc3RvcmVkXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3NzA6XFx0XFx0XFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC04fVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzcxLVxcdFxcdFxcdCAqIGJ1dCBjdXJyZW50IHBhdGggaGFzIHN0b3JlZDpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc3MjpcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTE2fVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzczLVxcdFxcdFxcdCAqIHN1Y2ggdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudC5cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODMwPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04MzctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5zbG90czsgaSsrKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4Mzg6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9hcmcsICpjdXJfYXJnO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODM5OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIG5vdF9pbml0ID0geyAudHlwZSA9IE5PVF9JTklUIH07XFxua2VybmVsL2JwZi9zdGF0ZXMuYy04NDAtXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDQ9c3RhdGljIGludCBwcm9wYWdhdGVfcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDgte1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwOTpcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3RhdGVfcmVnO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMC1cXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMDk3PXN0YXRpYyBib29sIHN0YXRlc19tYXliZV9sb29waW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEwOS1cXHRcXHRpZiAobWVtY21wKFxcdTAwMjZmb2xkLVxcdTAwM2VyZWdzW2ldLCBcXHUwMDI2ZmN1ci1cXHUwMDNlcmVnc1tpXSxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExMTA6XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIGZyYW1lbm8pKSlcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExMTEtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTczPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTc0LXtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExNzU6XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNsb3QsICpjdXJfc2xvdDtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExNzYtXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTE5Nz1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE5OS1cXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmZ1bmM7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMjAwOlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjAxLVxcdGludCBpLCBqO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjIyPWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMTctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXJfZnJhbWU7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzE4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICppdGVyX3N0YXRlLCAqaXRlcl9yZWc7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzE5LVxcdFxcdFxcdFxcdFxcdGludCBzcGk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjE2PXN0YXRpYyBpbnQgcmVmX3NldF9ub25fb3duaW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNzpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE4OnN0YXRpYyBib29sIGlzX3RydXN0ZWRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTktc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMjA9c3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjIxOnN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIyMjpzdGF0aWMgdm9pZCBzY2FsYXJfbWluX21heF9hZGQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjIzLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIzND1zdGF0aWMgdm9pZCBicGZfbWFwX2tleV9zdG9yZShzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCwgdTY0IHN0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI0MS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjQyOnN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI0My17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzI3PXN0YXRpYyB2b2lkIHZlcmJvc2VfaW52YWxpZF9zY2FsYXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyOS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSByYW5nZSwgY29uc3QgY2hhciAqY3R4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQ4OnN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDkte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzc2OnN0YXRpYyBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVnX2J0Zl9yZWNvcmQoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODM9c3RhdGljIGJvb2wgc3VicHJvZ19pc19leGNfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODg6c3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDg5LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01ODg9c3RhdGljIGJvb2wgaXNfc3BpX2JvdW5kc192YWxpZChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpLCBpbnQgbnJfc2xvdHMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDI6c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwMy1cXHRcXHRcXHQgICAgICAgICAgY29uc3QgY2hhciAqb2JqX2tpbmQsIGludCBucl9zbG90cylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTpzdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzQ6c3RhdGljIGludCBpdGVyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzUte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5OnN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY4ND1zdGF0aWMgYm9vbCBkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjg4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODk6c3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjkwLVxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjkzPXN0YXRpYyB2b2lkIG1hcmtfZHlucHRyX3N0YWNrX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njk0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmVnMSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njk1OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmVnMixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjk2LVxcdFxcdFxcdFxcdCAgIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsIGludCBwYXJlbnRfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzA0PXN0YXRpYyB2b2lkIG1hcmtfZHlucHRyX2NiX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MDU6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwNi1cXHRcXHRcXHQgICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MTE9c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzEzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTQ6c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTUtXFx0XFx0XFx0XFx0ICAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUsIGludCBpbnNuX2lkeCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODM9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTY6c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE2PXN0YXRpYyB2b2lkIF9fbWFya19yZWdfdW5rbm93bihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTc6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgxOTpzdGF0aWMgdm9pZCBtYXJrX3JlZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODI3PXN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgzMC1cXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MzE6XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODMyLVxcdGludCByZWZfY250ID0gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NDY9c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4ODg6c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODg5LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkxNjpzdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0NTpzdGF0aWMgZW51bSBicGZfZHlucHRyX3R5cGUgZHlucHRyX3JlZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NjA6c3RhdGljIGJvb2wgaXNfZHlucHRyX3R5cGVfZXhwZWN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTYxLVxcdFxcdFxcdFxcdCAgICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk3MDpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX2tub3duX3plcm8oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk3MS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NzY9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTc3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk3ODpcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IGluc25faWR4LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NzktXFx0XFx0XFx0XFx0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCwgaW50IG5yX3Nsb3RzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk5My1cXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGkgLSBpXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTk0OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdCA9IFxcdTAwMjZzbG90LVxcdTAwM2VzcGlsbGVkX3B0cjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk1LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTk9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDIwOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyMS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzMC1cXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGkgLSBpXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzMTpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3QgPSBcXHUwMDI2c2xvdC1cXHUwMDNlc3BpbGxlZF9wdHI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzItXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA0Nz1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0ODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0OS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA3NDpzdGF0aWMgaW50IGlzX2l0ZXJfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsIGludCBucl9zbG90cylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDg1LVxcdFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaSAtIGldO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDg2OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdCA9IFxcdTAwMjZzbG90LVxcdTAwM2VzcGlsbGVkX3B0cjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4Ny1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTA5PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90X2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgaW5zbl9pZHgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTItXFx0XFx0XFx0XFx0ICAgICBpbnQga2Z1bmNfY2xhc3MpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNS1cXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE2OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNy1cXHRpbnQgc3BpLCBpLCBpZDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQyOnN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0My1cXHRcXHRcXHRcXHQgICAgICBpbnQga2Z1bmNfY2xhc3MpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0Ni1cXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQ3OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0OC1cXHRpbnQgc3BpLCBpLCBlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIwNzpzdGF0aWMgYm9vbCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMzE6c3RhdGljIGludCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjMyLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjM0LVxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3Q7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMzU6XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjM2LVxcdGludCBzcGksIGk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM4Nz1zdGF0aWMgaW50IGNvcHlfc3RhY2tfc3RhdGUoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpkc3QsIGNvbnN0IHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3JjKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDEtXFx0XFx0ZHN0LVxcdTAwM2VzdGFja19hcmdfcmVncyA9IGNvcHlfYXJyYXkoZHN0LVxcdTAwM2VzdGFja19hcmdfcmVncywgc3JjLVxcdTAwM2VzdGFja19hcmdfcmVncywgbixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwMjpcXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBicGZfcmVnX3N0YXRlKSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMy1cXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDUwPXN0YXRpYyBpbnQgZ3Jvd19zdGFja19hcmdfc2xvdHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDU4LVxcdHN0YXRlLVxcdTAwM2VzdGFja19hcmdfcmVncyA9IHJlYWxsb2NfYXJyYXkoc3RhdGUtXFx1MDAzZXN0YWNrX2FyZ19yZWdzLCBvbGRfbiwgY250LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDU5OlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYwLVxcdGlmICghc3RhdGUtXFx1MDAzZXN0YWNrX2FyZ19yZWdzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1NTc9c3RhdGljIGJvb2wgZmluZF9yZWZlcmVuY2Vfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGUsIGludCBpZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTcwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTcxOnN0YXRpYyBib29sIHJlZ19pc19yZWZlcmVuY2VkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzIte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODE9c3RhdGljIHZvaWQgYnBmX2RpYWdfcmVjb3JkX2NhbGxlcl9zYXZlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgyOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4My17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5Mi0vKiBUaGlzIGhlbHBlciBkb2Vzbid0IGNsZWFyIHJlZy1cXHUwMDNlaWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzpzdGF0aWMgdm9pZCBfX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODk0LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAyLSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAzOnN0YXRpYyB2b2lkIF9fbWFya19yZWdfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNi1cXHRtZW1zZXQoKCh1OCAqKXJlZykgKyBzaXplb2YocmVnLVxcdTAwM2V0eXBlKSwgMCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwNzpcXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9yZWdfc3RhdGUsIHZhcl9vZmYpIC0gc2l6ZW9mKHJlZy1cXHUwMDNldHlwZSkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA4LVxcdHJlZy1cXHUwMDNlaWQgPSAwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTU6c3RhdGljIHZvaWQgX19tYXJrX3JlZzMyX2tub3duKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHU2NCBpbW0pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjMtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MjQ6c3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bl96ZXJvKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjUte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Mjk6c3RhdGljIHZvaWQgX19tYXJrX3JlZ19jb25zdF96ZXJvKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Mzk9c3RhdGljIHZvaWQgbWFya19yZWdfa25vd25femVybyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQwOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDEte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDU6c3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0Ni1cXHRcXHRcXHQgICAgICBib29sIGZpcnN0X3Nsb3QsIGludCBpZCwgaW50IHBhcmVudF9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY0LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY1OnN0YXRpYyB2b2lkIHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODc6c3RhdGljIHZvaWQgbWFya19wdHJfbm90X251bGxfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTI6c3RhdGljIHZvaWQgbWFya19yZWdfZ3JhcGhfbm9kZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzLVxcdFxcdFxcdFxcdHN0cnVjdCBidGZfZmllbGRfZ3JhcGhfcm9vdCAqZHNfaGVhZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDAwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDAxOnN0YXRpYyBib29sIHJlZ19pc19wa3RfcG9pbnRlcihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDAyLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA2OnN0YXRpYyBib29sIHJlZ19pc19wa3RfcG9pbnRlcl9hbnkoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNy17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxMjpzdGF0aWMgYm9vbCByZWdfaXNfZHlucHRyX3NsaWNlX3BrdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDEzLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5LS8qIFVubW9kaWZpZWQgUFRSX1RPX1BBQ0tFVFtfTUVUQSxfRU5EXSByZWdpc3RlciBmcm9tIGN0eCBhY2Nlc3MuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjA6c3RhdGljIGJvb2wgcmVnX2lzX2luaXRfcGt0X3BvaW50ZXIoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMS1cXHRcXHRcXHRcXHQgICAgZW51bSBicGZfcmVnX3R5cGUgd2hpY2gpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMjpzdGF0aWMgdm9pZCBfX21hcmtfcmVnMzJfdW5ib3VuZGVkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzMte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzc6c3RhdGljIHZvaWQgX19tYXJrX3JlZzY0X3VuYm91bmRlZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM4LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQyLS8qIFJlc2V0IHRoZSBtaW4vbWF4IGJvdW5kcyBvZiBhIHJlZ2lzdGVyICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDM6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmJvdW5kZWQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0NC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA0OTpzdGF0aWMgdm9pZCByZXNldF9yZWc2NF9hbmRfdG51bShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUwLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDU0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDU1OnN0YXRpYyB2b2lkIHJlc2V0X3JlZzMyX2FuZF90bnVtKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNzM9c3RhdGljIHN0cnVjdCBjbnVtNjQgY251bTY0X2Zyb21fdG51bShzdHJ1Y3QgdG51bSB0bnVtKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODQ6c3RhdGljIHZvaWQgX191cGRhdGVfcmVnMzJfYm91bmRzKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODUte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODk6c3RhdGljIHZvaWQgX191cGRhdGVfcmVnNjRfYm91bmRzKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMjMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMjQ6c3RhdGljIHZvaWQgX191cGRhdGVfcmVnX2JvdW5kcyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI1LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTMwOnN0YXRpYyB2b2lkIGRlZHVjZV9ib3VuZHNfMzJfZnJvbV82NChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODozMTozOC4wODg5MjA3NzhaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODczOTg0ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgcmVmYWN0b3JpbmcgaG93IHRoZSBCUEYgdmVyaWZpZXIgdHJhY2tzIGxpbmtlZCByZWdpc3RlcnMgYW5kIGhhbmRsZXMgc3ViLXJlZ2lzdGVyIG9wZXJhdGlvbnMuIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHBvc3NpYmlsaXR5IG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciwgZm9yIHRoYXQgbWF0dGVyLCB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYgaW4gd2F5cyB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGRldGVjdGFibGUgYnkgS01TQU4/XG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGludm9sdmVzOlxuXG4xLiAgKipSZXBsYWNpbmcgdGhlIE9sZCBFbmNvZGluZzoqKiAgUHJldmlvdXNseSwgbGlua2VkIGNvbnN0YW50cyB3ZXJlIGVuY29kZWQgd2l0aGluIHRoZSBgcmVnLVx1MDAzZWlkYC4gVGhlIHBhdGNoIGlzIG1vdmluZyBhd2F5IGZyb20gdGhhdCBvYmZ1c2NhdGlvbi4gSSd2ZSBzZWVuIGVub3VnaCB2ZXJpZmllciBjb2RlIHRvIGtub3cgdGhvc2UgYml0d2lzZSBtYW5pcHVsYXRpb25zIGNhbiBiZSBhIHNvdXJjZSBvZiBjb25mdXNpb24gYW5kIHN1YnRsZSBidWdzLlxuMi4gICoqSW50cm9kdWNpbmcgQml0ZmllbGRzOioqIEV4cGxpY2l0IGJpdGZpZWxkcyAoYGFkZF9jb25zdGAsIGBzdWJyZWdgKSB3aXRoaW4gYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gVGhpcyBpcyBjbGVhbmVyIGFuZCBtb3JlIGV4cGxpY2l0LiAgSXQncyBhIGdvb2Qgc3RlcCwgbWFraW5nIHRoZSBpbnRlbnQgY2xlYXJlci5cbjMuICAqKkltcHJvdmVkIFRyYWNraW5nOioqICBUaGUgcGF0Y2ggaW1wcm92ZXMgc3ViLXJlZ2lzdGVyIHRyYWNraW5nIGZvciBvcGVyYXRpb25zIGxpa2UgemVyby1leHRlbnNpb24gKGBaRVhUYCkgYW5kIHNpZ24tZXh0ZW5zaW9uIChgU0VYVGApLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgY29ycmVjdG5lc3MuXG40LiAgKipgdG51bV9zZXh0YDoqKiAgVGhlIGFkZGl0aW9uIG9mIGB0bnVtX3NleHRgIHNlZW1zIHJlbGF0ZWQgdG8gc2lnbiBleHRlbnNpb24gd2l0aGluIHRoZSBgdG51bWAgKHRyYWNrZWQgbnVtYmVyKSByZXByZXNlbnRhdGlvbi4gIFRoZSBjb2RlIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC5cbjUuICAqKlZlcmlmaWVyIENvZGUgQ2hhbmdlczoqKiBTZXZlcmFsIGNoYW5nZXMgYXJlIGV2aWRlbnQgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIFNwZWNpZmljYWxseSwgdGhlc2UgY2hhbmdlczpcbiAgICAqICAgRXhwbGljaXRseSBjb21wYXJlIHRoZSBuZXcgZmllbGRzIGluIGByZWdzX2V4YWN0YCBhbmQgYHJlZ3NhZmVgXG4gICAgKiAgIFJlc2V0IGBhZGRfY29uc3RgIGFuZCBgc3VicmVnYCBpbiBgY2xlYXJfc2NhbGFyX2lkYCBhbmQgYF9fbWFya19yZWdfa25vd25gLlxuICAgICogICBNZW1zZXQgdGhlIGVudGlyZSBgYnBmX3JlZ19zdGF0ZWAgc3RydWN0IHRvIDAgaW4gYF9fbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgLlxuICAgICogICBVc2UgdGhlIG5ldyBmaWVsZHMgaW4gYHN5bmNfbGlua2VkX3JlZ3NgIGR1cmluZyB6ZXh0L3NleHQgcmVjb25zdHJ1Y3Rpb24uXG4gICAgKiAgIFVwZGF0ZSBzdGFjayBzcGlsbC9maWxsIGxvZ2ljLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuKiAgICoqS2VybmVsIFN0cnVjdHVyZXMgdG8gVXNlciBTcGFjZToqKiAgVGhlIGBicGZfcmVnX3N0YXRlYCBpcyBwdXJlbHkgaW50ZXJuYWwuICBJdCdzIG9ubHkgdXNlZCB3aXRoaW4gdGhlIHZlcmlmaWVyLiBUaGVyZSBpcyBubyBjb3B5LXRvLXVzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0IG9wdGlvbiwgb3IgQlBGIGJ1ZmZlciBpbnZvbHZlZC4gVGhlIHZlcmlmaWVyIGxvZyBidWZmZXIgKGB2ZXJib3NlKClgKSB3aGljaCBsb2dzIGZyb20gYGtlcm5lbC9icGYvbG9nLmNgIGlzIG9ubHkgZm9ybWF0dGluZywgbm90IGFuIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgaXMgdGhlIGZpcnN0IGFuZCBtb3N0IGNyaXRpY2FsIHRlc3QuIFBBU1MuXG4qICAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkczoqKiBgYnBmX3JlZ19zdGF0ZWAgc3RydWN0cyBhcmUgemVyby1pbml0aWFsaXplZCBvbiBhbGxvY2F0aW9uIG9yIHdoZW4gbWFya2VkIGFzIFwidW5rbm93blwiLiBUaGUga2V5IGZpZWxkcyAoYGFkZF9jb25zdGAgYW5kIGBzdWJyZWdgKSBhcmUgZXhwbGljaXRseSByZXNldCBpbiBzZXZlcmFsIHBsYWNlcyB3aXRoaW4gdGhlIHZlcmlmaWVyIGxvZ2ljIChgY2xlYXJfc2NhbGFyX2lkYCwgYF9fbWFya19yZWdfa25vd25gLCBhbmQgYF9fbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgKS4gVGhlIHJlbGV2YW50IGNvZGUgbG9va3MgY2xlYW4uIFBBU1MuXG4gICAgKiAgIFRoZSBgdG51bV9zZXh0YCBhbmQgYHJlY29uc3RydWN0X3pleHQzMmAvYHJlY29uc3RydWN0X3NleHQzMmAgYXJlIGxvY2FsIGNhbGN1bGF0aW9ucyBvciBzdHJ1Y3QtY29weS9maWVsZC1tb2RpZmljYXRpb24uIE5vIHNpZ24gb2YgdW5pbml0aWFsaXplZCByZWFkcy5cbiogICAqKkJQRiBSdW50aW1lL0tlcm5lbC10by1Vc2VyIENvcHkgSW1wYWN0OioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgKnZlcmlmaWVyKiBvbmx5LCB3aGljaCBpcyBzdGF0aWMgYW5hbHlzaXMuICBUaGlzIGlzIG5vdCBpbXBhY3RpbmcgYW55IHJ1bnRpbWUga2VybmVsLXRvLXVzZXIgY29waWVzLiBQQVNTLlxuKiAgICoqQm91bmRzIENoZWNrcy9VbnNhZmUgQlBGIFByb2dyYW0gSW1wYWN0czoqKiAgV2hpbGUgYW55IHZlcmlmaWVyIGJ1ZyBjb3VsZCBsZWFkIHRvIGFuIHVuc2FmZSBwcm9ncmFtLCB0aG9zZSBhcmUgY2xhc3NpY2FsIEJQRiB2dWxuZXJhYmlsaXRpZXMgY2F1Z2h0IGJ5IEtBU0FOL3ZlcmlmaWVyIHRlc3RpbmcsIG5vdCBLTVNBTi1zcGVjaWZpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBlcnJvcnMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGFib3ZlIGFuYWx5c2lzLCB0aGVyZSBhcmUgKm5vKiBpbmRpY2F0aW9ucyBvZiBLTVNBTi1yZWxldmFudCB2dWxuZXJhYmlsaXRpZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiAgVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGUgdmVyaWZpZXIncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljLiBUaGUgbmV3IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHJlc2V0IGNvbnNpc3RlbnRseS4gVGhlIHBhdGNoIGF2b2lkcyBpbnRyb2R1Y2luZyBhbnkgY29kZSBwYXRocyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjYXVzZSBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgaW50ZXJuYWwgcmVhZHMuIFRoZSBleGlzdGluZyB2ZXJpZmllciB0ZXN0IHN1aXRlcywgYWxvbmcgd2l0aCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIGFyZSB0aGUgYXBwcm9wcmlhdGUgdGVzdGluZyB0b29scyBoZXJlLlxuXG4qKk5lZWRzS01TQU49ZmFsc2UuKiogIFRoYXQncyBteSBmaW5hbCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTAzNywiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MzE6NDYuODI4NzczNTAxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGFuZCBlbmhhbmNlcyByZWdpc3RlciByZWxhdGlvbnNoaXAgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHNjYWxhciBzdWJyZWdpc3RlciByZWxhdGlvbnMgbGlrZSAzMi1iaXQgemVyby0gYW5kIHNpZ24tZXh0ZW5zaW9ucywgbmFycm93IHN0YWNrIHNwaWxscy9maWxscywgYW5kIG1vdmluZyBhZGQtY29uc3QgZmxhZ3MgZnJvbSByZWdpc3RlciBJRHMgaW50byBkZWRpY2F0ZWQgc3RydWN0IGZpZWxkcykuXFxuXFxuLSBUaGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmUgKHN0cnVjdCBicGZfcmVnX3N0YXRlKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGUgQlBGIHZlcmlmaWVyIGR1cmluZyBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS5cXG4tIFJlZ2lzdGVyIHN0YXRlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkICh2aWEgbWVtc2V0IGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSBvciBleHBsaWNpdCBhc3NpZ25tZW50IGluIF9fbWFya19yZWdfa25vd24gYW5kIGNsZWFyX3NjYWxhcl9pZCksIHNvIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkLlxcbi0gUHVyZSBhcml0aG1ldGljIGhlbHBlcnMgbGlrZSB0bnVtX3NleHQgb3BlcmF0ZSBlbnRpcmVseSBvbiBwYXNzLWJ5LXZhbHVlIHN0cnVjdHMgd2l0aCBpbml0aWFsaXplZCBhcmd1bWVudHMuXFxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdmVyaWZpZXIgcmFuZ2UgdHJhY2tpbmcgb3IgcmVnaXN0ZXIgc3luY2hyb25pemF0aW9uIGNvdWxkIGxlYWQgdG8gdW5zb3VuZCB2ZXJpZmllciBsb2dpYyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBCUEYgZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGFuZCBLQVNBTiwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2sgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGFuZCBlbmhhbmNlcyByZWdpc3RlciByZWxhdGlvbnNoaXAgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHNjYWxhciBzdWJyZWdpc3RlciByZWxhdGlvbnMgbGlrZSAzMi1iaXQgemVyby0gYW5kIHNpZ24tZXh0ZW5zaW9ucywgbmFycm93IHN0YWNrIHNwaWxscy9maWxscywgYW5kIG1vdmluZyBhZGQtY29uc3QgZmxhZ3MgZnJvbSByZWdpc3RlciBJRHMgaW50byBkZWRpY2F0ZWQgc3RydWN0IGZpZWxkcykuXFxuXFxuLSBUaGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmUgKHN0cnVjdCBicGZfcmVnX3N0YXRlKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGUgQlBGIHZlcmlmaWVyIGR1cmluZyBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS5cXG4tIFJlZ2lzdGVyIHN0YXRlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkICh2aWEgbWVtc2V0IGluIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZSBvciBleHBsaWNpdCBhc3NpZ25tZW50IGluIF9fbWFya19yZWdfa25vd24gYW5kIGNsZWFyX3NjYWxhcl9pZCksIHNvIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkLlxcbi0gUHVyZSBhcml0aG1ldGljIGhlbHBlcnMgbGlrZSB0bnVtX3NleHQgb3BlcmF0ZSBlbnRpcmVseSBvbiBwYXNzLWJ5LXZhbHVlIHN0cnVjdHMgd2l0aCBpbml0aWFsaXplZCBhcmd1bWVudHMuXFxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdmVyaWZpZXIgcmFuZ2UgdHJhY2tpbmcgb3IgcmVnaXN0ZXIgc3luY2hyb25pemF0aW9uIGNvdWxkIGxlYWQgdG8gdW5zb3VuZCB2ZXJpZmllciBsb2dpYyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBCUEYgZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGFuZCBLQVNBTiwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2sgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}