Name: series-workflowbx74d Phase: Succeeded StartedAt: 2026-07-13 21:44:44 +0000 UTC FinishedAt: 2026-07-14 01:51:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[0] Phase: Succeeded StartedAt: 2026-07-13 21:44:44 +0000 UTC FinishedAt: 2026-07-13 21:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 21:44:44 +0000 UTC FinishedAt: 2026-07-13 21:56:55 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "INET", "IPV6" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "INET", "IPV6" ], "series_id": "b2955805-74ad-4e05-909f-030e825d72f5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_fib_vlan_input_dev", "bpf_fib_set_fwd_params", "bpf_fib_lookup_flags_ok", "bpf_xdp_fib_lookup", "bpf_skb_fib_lookup", "bpf_ipv4_fib_lookup", "bpf_ipv6_fib_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpYl92bGFuX2lucHV0X2RldiYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfbG9va3VwX2ZsYWdzX29rJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjRfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2Nl9maWJfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVkxBTnMgaW4gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlcnMgKGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCkuIEl0IGludHJvZHVjZXMgbmV3IGZsYWdzIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIHRvIGhhbmRsZSBWTEFOIGVncmVzcyBhbmQgaW5ncmVzcyByZXNvbHV0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIGNhbiBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGE3ZjFmYTA4ZGNlMWUxYzI1NDAwYmUwZjNjZjExZGIzMGM5ZGMxYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDIxOjU2OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmZmMDMwMTlhYmUzNTU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ3IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxuJiM0MzsgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbiYjNDM7ICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4mIzQzOyAqXHRcdFx0cGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXG4mIzQzOyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuJiM0MzsgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbiYjNDM7ICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XG4mIzQzOyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuJiM0MzsgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuJiM0MzsgKlx0XHRcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbiYjNDM7ICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gVG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd25cbiYjNDM7ICpcdFx0XHRpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0XG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiosIHJlLWluaXRpYWxpemluZyAqcGFyYW1zKlxuJiM0MzsgKlx0XHRcdGZpcnN0OiBvdXRwdXQgZmllbGRzIG92ZXJ3cml0ZSB0aGUgaW5wdXRzIHRoZXkgc2hhcmVcbiYjNDM7ICpcdFx0XHRzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbiYjNDM7ICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuJiM0MzsgKlx0XHRcdHRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuJiM0MzsgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuJiM0MzsgKlx0XHRcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXG4mIzQzOyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxuJiM0MzsgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuJiM0MzsgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4mIzQzOyAqXHRcdFx0aGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZ1xuJiM0MzsgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4mIzQzOyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbiYjNDM7ICpcdFx0XHRFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlXG4mIzQzOyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbiYjNDM7ICpcdFx0XHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbiYjNDM7ICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCoqLCBtaXJyb3JpbmcgcmVhbCBpbmdyZXNzLlxuJiM0MzsgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4mIzQzOyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1RCSUQqKiBvciAqKkJQRl9GSUJfTE9PS1VQX09VVFBVVCoqXG4mIzQzOyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgJiM0Mzs3MzY4LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNiksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgJiM0Mzs3MzgzLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4mIzQzO1x0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuQEAgLTczOTMsNyAmIzQzOzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4mIzQzO1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuJiM0MztcdFx0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGVcbiYjNDM7XHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi4wZWEzNjJmYTQyODdlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTYyMDEsMjEgJiM0Mzs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxuIHtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gMDtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSAwO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS1cdTAwM2VyZWFsX2RldjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX2Rldl92bGFuX2lkKGRldikpO1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChtdHUpXG4gXHRcdHBhcmFtcy1cdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbiYjNDM7XHR1MTYgdmlkO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFx1MDAyNlx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbiYjNDM7XHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xuJiM0MztcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuJiM0MztcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bGFuX2RldjtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxuIHtcbiYjNDM7XHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMO1xuIFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcbkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbiYjNDM7XHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuJiM0MztcdFx0aWYgKElTX0VSUihkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogdmVyaWZ5IGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvbiB0aGlzIGludGVyZmFjZSAqL1xuIFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxuQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNC5mbG93aTRfaWlmID0gMTtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IDA7XG4gXHR9XG4gXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXHUwMDNldG9zKTtcbkBAIC02MzQ3LDcgJiM0Mzs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuJiM0MztcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtNjM1Nyw2ICYjNDM7NjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9zcmM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfZHN0O1xuJiM0MztcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG5AQCAtNjM3NCw2ICYjNDM7NjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZGV2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbiYjNDM7XHRcdGlmICghZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuIFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XG5AQCAtNjM4Miw3ICYjNDM7NjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xuIFx0XHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4mIzQzO1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG9pZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XG4gXHRcdGZsNi5mbG93aTZfb2lmID0gMDtcbiBcdFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcbiBcdH1cbkBAIC02NDg2LDEzICYjNDM7NjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXG4gXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXG4tXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChmbGFncyBcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdCAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncylcbkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4mIzQzO1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5AQCAtNjUzOCw3ICYjNDM7NjYxNiwxMCBAQCBCUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuJiM0MztcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZXRvdF9sZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZmYwMzAxOWFiZTM1NTQgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4mIzQzOyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuJiM0MzsgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbiYjNDM7ICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4mIzQzOyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbiYjNDM7ICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4mIzQzOyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4mIzQzOyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuJiM0MzsgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBUbyBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93blxuJiM0MzsgKlx0XHRcdGlmaW5kZXgsIHJlcGVhdCB0aGUgbG9va3VwIHdpdGhvdXRcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiwgcmUtaW5pdGlhbGl6aW5nICpwYXJhbXMqXG4mIzQzOyAqXHRcdFx0Zmlyc3Q6IG91dHB1dCBmaWVsZHMgb3ZlcndyaXRlIHRoZSBpbnB1dHMgdGhleSBzaGFyZVxuJiM0MzsgKlx0XHRcdHN0b3JhZ2Ugd2l0aC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkc1xuJiM0MzsgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4mIzQzOyAqXHRcdFx0dGhlIGhlbHBlciYjMzk7cyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XG4mIzQzOyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4mIzQzOyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbiYjNDM7ICpcdFx0XHRyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4mIzQzOyAqXHRcdFx0VHJlYXQgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJXG4mIzQzOyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbiYjNDM7ICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4mIzQzOyAqXHRcdFx0b24gKnBhcmFtcyotXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuJiM0MzsgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbiYjNDM7ICpcdFx0XHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuJiM0MzsgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJiMzOTtzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxuJiM0MzsgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4mIzQzOyAqXHRcdFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcbiYjNDM7ICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbiYjNDM7ICpcdFx0XHQocmV0dXJucyAqKi1FSU5WQUwqKikuXG4gICpcbiAgKlx0XHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxuICAqXHRcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxuQEAgLTczMjcsNiAmIzQzOzczNjgsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVIFx1MDAzY1x1MDAzYyA3KSxcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTczNDAsNiAmIzQzOzczODMsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbiYjNDM7XHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICYjNDM7NzQzNywxMyBAQCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuIFxuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdC8qIG91dHB1dCAqL1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbiYjNDM7XHRcdFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcbiYjNDM7XHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4mIzQzO1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuJiM0MztcdFx0XHQgKiB0aGUgbG9va3VwIGJ5LlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uZjczNjFmOWEzNDU5MmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuIFxuQEAgLTIzLDYgJiM0MzsyNCw3IEBAXG4gI2RlZmluZSBJUFY0X1RCSURfQUREUlx0XHRcJiMzNDsxNzIuMC4wLjI1NFwmIzM0O1xuICNkZWZpbmUgSVBWNF9UQklEX05FVFx0XHRcJiMzNDsxNzIuMC4wLjBcJiMzNDtcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCYjMzQ7MTcyLjAuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcJiMzNDsxNzIuMC4wLjVcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9BRERSXHRcdFwmIzM0O2ZkMDA6OkZGRkZcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9ORVRcdFx0XCYjMzQ7ZmQwMDo6XCYjMzQ7XG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwmIzM0O2ZkMDA6OjJcJiMzNDtcbkBAIC0zNyw2ICYjNDM7MzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCYjMzQ7ZmQwMTo6M1wmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzFcdFx0XCYjMzQ7ZmQwMTo6MVwmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzJcdFx0XCYjMzQ7ZmQwMTo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURcdFx0XHQxMDBcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgxLjEwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURfRE9XTlx0XHQxMDJcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCYjMzQ7dmV0aDEuMTAyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwLjMwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCYjMzQ7MzAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwmIzM0OzEwLjUuMC4yNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7MTAuNS4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwmIzM0OzEwLjcuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcJiMzNDsxMC42LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcJiMzNDsxMC41LjAuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcJiMzNDtmZDAyOjoyNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7ZmQwMjo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCYjMzQ7ZmQwMzo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcJiMzNDtmZDAyOjoxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuJiM0MzsjZGVmaW5lIFZSRl9JRkFDRVx0XHRcJiMzNDt2cmYtYmx1ZVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZSRl9UQUJMRVx0XHRcJiMzNDsxMDAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSURcdFx0MTAxXG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDEuMTAxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlx0XCYjMzQ7MTAuOC4wLjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVlJGX0dXXHRcdFwmIzM0OzEwLjguMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUXHRcdFwmIzM0OzEwLjkuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lEXHRcdDUwXG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgyLjUwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcJiMzNDsxNzIuMi4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwmIzM0OzEwLjExLjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcJiMzNDsxMC41LjkuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSURcdDMwMFxuJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0VcdFx0XCYjMzQ7Ym9uZDk5XCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUXHRcdFwmIzM0O3ZldGgzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcdFx0XCYjMzQ7dmV0aDRcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSURcdFx0NTAwXG4gI2RlZmluZSBETUFDXHRcdFx0XCYjMzQ7MTE6MTE6MTE6MTE6MTE6MTFcJiMzNDtcbiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH1cbiAjZGVmaW5lIERNQUMyXHRcdFx0XCYjMzQ7MDE6MDE6MDE6MDE6MDE6MDFcJiMzNDtcbkBAIC01Miw2ICYjNDM7ODksMTcgQEAgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB7XG4gXHRfX3UzMiB0YmlkO1xuIFx0X191OCBkbWFjWzZdO1xuIFx0X191MzIgbWFyaztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbiYjNDM7XHQgKiB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU4gKGNoZWNrZWQgd2hlbiBjaGVja192bGFuIGlzIHNldClcbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3UxNiB2bGFuX3Byb3RvO1xuJiM0MztcdF9fdTE2IHZsYW5faWQ7XG4mIzQzO1x0Ym9vbCBjaGVja192bGFuO1xuJiM0MztcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4mIzQzO1x0Y29uc3QgY2hhciAqaWlmO1x0ICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi9cbiYjNDM7XHRfX3UxNiB0b3RfbGVuO1x0XHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXG4mIzQzO1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcbiBcdCAgLmRhZGRyID0gSVBWNF9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxuIFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuJiM0MztcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcbiYjNDM7XHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXG4mIzQzO1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxuJiM0MztcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDJcJiMzNDssIH0sXG4gXHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXCYjMzQ7LFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICYjNDM7MjAxLDIxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuIFx0ICAubWFyayA9IE1BUkssIH0sXG4mIzQzO1x0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW52YXJpYW50IHRoZSBWTEFOLWVncmVzcyBhcm1zIGpvaW50bHkgZW5mb3JjZTogYVxuJiM0MztcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxuJiM0MztcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXG4mIzQzO1x0ICogaWZpbmRleC4gUmVkdWNpYmxlIGFybXMgcGluIGlmaW5kZXggPT0gdGhlIHBoeXNpY2FsIHBhcmVudDsgdGhlXG4mIzQzO1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuJiM0MztcdCAqIGxlZnQgYXQgdGhlIGlucHV0LCBzbyBhIHJlZ3Jlc3Npb24gdG8gYmVzdC1lZmZvcnQgKFNVQ0NFU1MgJiM0MzsgdGhlXG4mIzQzO1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyBtdHVcbiYjNDM7XHQgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIHdpdGhvdXQgdGhlIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC50YmlkID0gMTAwLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgyXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc3VjY2VzcyB3cml0ZXMgbXR1X3Jlc3VsdCB3aXRoIHRoZSBzd2FwXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAudG90X2xlbiA9IDUwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELFxuJiM0MztcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuJiM0MztcdC8qIHZsYW4gdGFnIGFzIGxvb2t1cCBpbnB1dCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LFxuJiM0MztcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlXG4mIzQzO1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuJiM0MztcdCAqIHRoZSBWUkYgdGFibGUgZnJvbSB0aGUgcmVzb2x2ZWQgaW5ncmVzc1xuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBWUkYgdGFibGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgRElSRUNUIHVzZXMgVlJGIHRhYmxlIGZyb20gcmVzb2x2ZWQgaW5ncmVzc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxuJiM0MztcdCAqIG5hbWVzIHRoZSBwaHlzaWNhbCBkZXZpY2UgYW5kIHRoZSBpbnB1dCB0YWcgYnl0ZXMgc3Vydml2ZVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBzdWJpbnRlcmZhY2UgZG93blwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiB0aGUgcmVzb2x2ZXIgcnVucyBiZWZvcmUgdGhlIGZvcndhcmRpbmcgY2hlY2ssIHNvIG9uIGRldmljZXNcbiYjNDM7XHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbiYjNDM7XHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXhcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAuaWlmID0gUUlOUV9PVVRFUl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4mIzQzO1x0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxuJiM0MztcdCAqIGlmaW5kZXggZG9lcyBub3QgbWF0Y2ggKHBvcnRzIGNhcnJ5IHZpZCBzdGF0ZSBidXQgbm8gVkxBTiBkZXZzKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIG1hc3RlciByZXNvbHZlc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O3Vua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcdTAwM2NcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuIH07XG4gXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuQEAgLTIwNCw2ICYjNDM7NDc1LDEwNSBAQCBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG4gXHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcJiMzNDssIE1BUkssIE1BUktfVEFCTEUpO1xuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHVwIGZvciB2bGFuIHRlc3RzOiBhIHN1YmludGVyZmFjZSBmb3IgZWdyZXNzIHJlc29sdXRpb24gYW5kXG4mIzQzO1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbiYjNDM7XHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgVkxBTl9JRkFDRSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBsb3dlciB0aGFuIHRoZSB2ZXRoMSBwYXJlbnQgKDE1MDApOiB0aGUgc2tiLXBhdGggbXR1IGNoZWNrIHVzZXMgdGhlXG4mIzQzO1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUsIHdoaWNoIHRoZVxuJiM0MztcdCAqIG5vLWZsYWcgYXJtIGJlbG93IHBpbnNcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXCYjMzQ7LCBWTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFwmIzM0OywgSVBWNl9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcbiYjNDM7XHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7L2ZvcndhcmRpbmdcJiMzNDssIFwmIzM0OzFcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2Ni5jb25mLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCYjMzQ7LFxuJiM0MztcdCAgICBRSU5RX09VVEVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzIHR5cGUgdmxhbiBpZCAzMDBcJiMzNDssXG4mIzQzO1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzXCYjMzQ7LCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcJiMzNDssIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNF9WTEFOX0RTVCwgSVBWNF9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1wmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9QT1JUKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcJiMzNDssIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZVxuJiM0MztcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcJiMzNDssIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCYjMzQ7LFxuJiM0MztcdCAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIFZSRl9WTEFOX0lGQUNFLCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFZSRl9WTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wmIzM0OyBWUkZfVkxBTl9JRkFDRSBcJiMzNDsvZm9yd2FyZGluZ1wmIzM0OywgXCYjMzQ7MVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi5cJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1wmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7XG4mIzQzO1xuJiM0MztcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9nY19zdGFsZV90aW1lXCYjMzQ7LCBcJiMzNDs5MDBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5nY19zdGFsZV90aW1lKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xuJiM0MztcbiYjNDM7XHQvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1xuJiM0MztcdC8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gZmFpbDpcbiBcdHJldHVybiAtMTtcbkBAIC0yMTgsOSAmIzQzOzU4OCwxNiBAQCBzdGF0aWMgaW50IHNldF9sb29rdXBfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbiBcdHBhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuLVx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpZmluZGV4O1xuJiM0MztcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gdGVzdC1cdTAwM2VpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LVx1MDAzZWlpZikgOiBpZmluZGV4O1xuIFx0cGFyYW1zLVx1MDAzZXRiaWQgPSB0ZXN0LVx1MDAzZXRiaWQ7XG4gXHRwYXJhbXMtXHUwMDNlbWFyayA9IHRlc3QtXHUwMDNlbWFyaztcbiYjNDM7XHRwYXJhbXMtXHUwMDNldG90X2xlbiA9IHRlc3QtXHUwMDNldG90X2xlbjtcbiYjNDM7XG4mIzQzO1x0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX3Byb3RvKTtcbiYjNDM7XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX2lkKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVx1MDAzZWRhZGRyLCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpID09IDEpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiBcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuIFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XG4tXHRpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7XG4mIzQzO1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XG4gXG4gXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cdTAwM2VkYXRhLCBzb1xuIFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cbkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4gXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbiBcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHQpO1xuIFxuIFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4mIzQzO1x0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xuIFxuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVEVTVCk7XG4gXG5AQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfcHJvZ190ZXN0X3J1bl9vcHRzXCYjMzQ7KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4mIzQzO1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cJiMzNDspO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCYjMzQ7ZmliX2xvb2t1cF9yZXRcJiMzNDspO1xuIFxuQEAgLTM1Miw2ICYjNDM7NzQ0LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwmIzM0O2lmaW5kZXhcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O210dV9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDtoX3ZsYW5fcHJvdG9cJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuJiM0MztcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwmIzM0O2hfdmxhbl9UQ0lcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtkbWFjIG5vdCBtYXRjaFwmIzM0OykpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTcgJiM0Mzs3NjgsMzIyIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuJiM0MztcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4mIzQzO1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuJiM0MztcdCAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4mIzQzO1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbiYjNDM7XHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuJiM0MztcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7eGRwIHRlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3hkcCBmaWJfbG9va3VwX3JldFwmIzM0OykpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDsoeGRwKSAlc1xcblwmIzM0OywgdGVzdHNbaV0uZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgaWZpbmRleFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiYjNDM7XHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDt4ZHAgaF92bGFuX3Byb3RvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcJiMzNDt4ZHAgaF92bGFuX1RDSVwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O3hkcCBkbWFjXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbiYjNDM7XHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuJiM0MztcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgbXR1X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiBmYWlsOlxuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1RFU1QpO1xuIFx0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbiB9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1ZMQU5fQVx0XCYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2FcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19WTEFOX0JcdFwmIzM0O2ZpYl9sb29rdXBfdmxhbl9uc19iXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX05FVE5TX0FERFJcdFwmIzM0OzEwLjY2LjAuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9ORVROU19EU1RcdFwmIzM0OzEwLjY2LjAuMlwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWRcbiYjNDM7ICogb24gaXRzIHBhcmVudC4gTmVpdGhlciBkaXJlY3Rpb24gbWF5IHRoZW4gY3Jvc3MgdGhlIGJvdW5kYXJ5OiB0aGVcbiYjNDM7ICogZWdyZXNzIGZsYWcgbXVzdCBub3QgcHVibGlzaCB0aGUgZm9yZWlnbiBwYXJlbnQmIzM5O3MgaWZpbmRleCwgYW5kIHRoZVxuJiM0MzsgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbiYjNDM7XHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHJ1bl9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHRcdCAgICAuY3R4X2luID0gXHUwMDI2c2tiLFxuJiM0MztcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuJiM0MztcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbiYjNDM7XHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3hkcCk7XG4mIzQzO1x0ZmliX3BhcmFtcyA9IFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9wYXJhbXM7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1ZMQU5fQSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVkxBTl9CKTtcbiYjNDM7XG4mIzQzO1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9BKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRucyhhKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4XCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2IHZldGg3IHVwXCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NlwmIzM0Oyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzXCYjMzQ7LCBOU19WTEFOX0IpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdXAgaXQgaW4gQiBiZWZvcmUgdGhlIGlucHV0IGxvb2t1cDogdGhlIG1vdmUgY2xvc2VkIGl0LCBhbmQgYVxuJiM0MztcdCAqIGRvd24gZGV2aWNlIGZhaWxzIHRoZSByZXNvbHZlciBvbiBJRkZfVVAgYmVmb3JlIHJlYWNoaW5nIHRoZVxuJiM0MztcdCAqIG5ldG5zIGNoZWNrIHRoaXMgc3VidGVzdCBleGlzdHMgdG8gcGluXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIC1uICVzIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwmIzM0OywgTlNfVkxBTl9CKTtcbiYjNDM7XG4mIzQzO1x0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGg3XCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNyYjMzk7cyBWTEFOIGdyb3VwLCBidXQgaXRcbiYjNDM7XHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRza2IuaWZpbmRleCA9IHBhcmVudF9pZHg7XG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyg2Nik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9ORVROU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbiYjNDM7XHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihpbnB1dClcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0XHQgIFwmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwmIzM0O2lmaW5kZXggdW50b3VjaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwmIzM0O3RhZyB1bnRvdWNoZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuJiM0MztcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoNy42NlwmIzM0OywgSVBWNF9WTEFOX05FVE5TX0FERFIpO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmxhbl9pZHg7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9ORVROU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHNyYylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW4oZWdyZXNzKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSxcbiYjNDM7XHRcdCAgXCYjMzQ7ZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCB2bGFuX2lkeCxcbiYjNDM7XHRcdCAgXCYjMzQ7Zm9yZWlnbiBwYXJlbnQgbm90IHB1Ymxpc2hlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCYjMzQ7dmxhbiBmaWVsZHMgemVyb1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmIChuc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQSk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQik7XG4mIzQzO1x0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRURJUkVDVF9OUEtUUyAxMDAwXG4mIzQzOyNkZWZpbmUgTlNfUkVESVJFQ1QgXCYjMzQ7ZmliX2xvb2t1cF9yZWRpcmVjdF9uc1wmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGVncmVzcyBmbGFnIGV4aXN0cyBzbyBhbiBYRFAgcHJvZ3JhbSBjYW4gcmVkaXJlY3QgdG8gdGhlIHBoeXNpY2FsXG4mIzQzOyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuJiM0MzsgKiB4ZHBfZG9fZmx1c2goKSwgYmVjYXVzZSBhIFZMQU4gZGV2aWNlIGhhcyBubyBuZG9feGRwX3htaXQuIERyaXZlIHJlYWxcbiYjNDM7ICogZnJhbWVzIHdpdGggQlBGX0ZfVEVTVF9YRFBfTElWRV9GUkFNRVMsIHdoaWNoIHJ1bnMgdGhlIG5hdGl2ZVxuJiM0MzsgKiB4ZHBfZG9fcmVkaXJlY3QoKSAmIzQzOyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xuJiM0MzsgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcbiYjNDM7ICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbiYjNDM7ICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVkaXJlY3RfZmQsIGVyciwgdmV0aDFfaWR4LCB2ZXRoMl9pZHggPSAtMTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4mIzQzO1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbiYjNDM7XHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcbiYjNDM7XHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbiYjNDM7XHRcdCAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NCksXG4mIzQzO1x0XHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9YRFBfTElWRV9GUkFNRVMsXG4mIzQzO1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmVkaXJlY3RfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcbiYjNDM7XHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfUkVESVJFQ1QpO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1JFRElSRUNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0aWYgKHNldHVwX25ldG5zKCkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgxXCYjMzQ7KTtcbiYjNDM7XHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoMlwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDEpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGgyKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuJiM0MztcdCAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDImIzM5O3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xuJiM0MztcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9jb3VudCksXG4mIzQzO1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdHhkcF9hdHRhY2hlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIHJlZHVjaWJsZSBWTEFOIGVncmVzczogcmVzb2x2ZXMgdG8gdGhlIHBoeXNpY2FsIHBhcmVudCB2ZXRoMSAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihyZWR1Y2libGUgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgUkVESVJFQ1RfTlBLVFMsIFwmIzM0O3JlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCwgMCwgXCYjMzQ7cmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGVsaXZlcmVkLCAwLCBcJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4mIzQzO1x0ICogdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIHJlZGlyZWN0aW5nIHRvIHRoZSBpbm5lclxuJiM0MztcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxuJiM0MztcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4mIzQzO1x0ICogeGRwX2RvX2ZsdXNoKCkuIHZldGgyJiMzOTtzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxuJiM0MztcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjayYjMzk7cyBmb3J3YXJkaW5nXG4mIzQzO1x0ICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHFpbnEgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihxaW5xIGVncmVzcylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcJiMzNDtxaW5xIGVncmVzcyBwYXNzZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCAwLCBcJiMzNDtxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmICh4ZHBfYXR0YWNoZWQpXG4mIzQzO1x0XHRicGZfeGRwX2RldGFjaCh2ZXRoMl9pZHgsIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XG4mIzQzO1x0aWYgKG5zdG9rZW4pXG4mIzQzO1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCBcJiMzNDsgTlNfUkVESVJFQ1QpO1xuJiM0MztcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjM2YjcyMThkOWFlMmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTQsNyAmIzQzOzQsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3RfY2xzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTtcbiBpbnQgZmliX2xvb2t1cF9yZXQgPSAwO1xuQEAgLTE5LDQgJiM0MzsyMyw1NyBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZmliX2xvb2t1cF9yZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNmZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSxcbiYjNDM7XHRcdFx0XHRcdGxvb2t1cF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBYRFBfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJlZGlyZWN0ZWQgPSAwO1xuJiM0MztpbnQgcGFzc2VkID0gMDtcbiYjNDM7aW50IGRlbGl2ZXJlZCA9IDA7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtcztcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XG4mIzQzO1x0XHRyZWRpcmVjdGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFzc2VkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpldGggPSBkYXRhO1xuJiM0MztcdHN0cnVjdCBpcGhkciAqaXBoO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNvdW50IG9ubHkgdGhlIHRlc3QmIzM5O3MgVENQIGZyYW1lczogdGhlIG5ldG5zIGhhcyBsaXZlXG4mIzQzO1x0ICogbGluay1sb2NhbCB0cmFmZmljIChEQUQsIE1MRCkgdGhhdCB3b3VsZCBzYXRpc2Z5IGEgYmFyZVxuJiM0MztcdCAqIGNvdW50ZXJcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdCAgICBldGgtXHUwMDNlaF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKVxuJiM0MztcdFx0cmV0dXJuIFhEUF9EUk9QO1xuJiM0MztcdGlwaCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fCBpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRyZXR1cm4gWERQX0RST1A7XG4mIzQzO1xuJiM0MztcdGRlbGl2ZXJlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIFhEUF9EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjE6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZmliX3ZsYW5faW5wdXRfZGV2JiMzNDssCiAgICAmIzM0O2JwZl9maWJfc2V0X2Z3ZF9wYXJhbXMmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2smIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRhN2YxZmEwOGRjZTFlMWMyNTQwMGJlMGYzY2YxMWRiMzBjOWRjMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAyMTo1NjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCA4OWIzNmRlNWZkYmI2ZC4uZmYwMzAxOWFiZTM1NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIgewogICoJCQlVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi0mZ3Q7bWFyayBmb3IgdGhlIGZpYiBsb29rdXAuCiAgKgkJCVRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCwKICAqCQkJYXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKgomIzQzOyAqCQkJSWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZQomIzQzOyAqCQkJcGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0CiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSSBmcm9tCiYjNDM7ICoJCQl0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotJmd0O2lmaW5kZXggd2l0aCB0aGUKJiM0MzsgKgkJCXBhcmVudCYjMzk7cyBpZmluZGV4LiAqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSUQKJiM0MzsgKgkJCW9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG8KJiM0MzsgKgkJCXNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLSZndDtzbWFjIGlzCiYjNDM7ICoJCQl0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGUKJiM0MzsgKgkJCXBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXQKJiM0MzsgKgkJCWlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSwKJiM0MzsgKgkJCXRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1cwomIzQzOyAqCQkJb25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi0mZ3Q7aWZpbmRleAomIzQzOyAqCQkJbGVmdCBhdCB0aGUgaW5wdXQuIFRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duCiYjNDM7ICoJCQlpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0CiYjNDM7ICoJCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiwgcmUtaW5pdGlhbGl6aW5nICpwYXJhbXMqCiYjNDM7ICoJCQlmaXJzdDogb3V0cHV0IGZpZWxkcyBvdmVyd3JpdGUgdGhlIGlucHV0cyB0aGV5IHNoYXJlCiYjNDM7ICoJCQlzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHMKJiM0MzsgKgkJCWFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwCiYjNDM7ICoJCQl0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHQKJiM0MzsgKgkJCXN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi0mZ3Q7bXR1X3Jlc3VsdC4KJiM0MzsgKgkJCVRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zCiYjNDM7ICoJCQlyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU4KJiM0MzsgKgkJCWRldmljZSBkaXJlY3RseS4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKioKJiM0MzsgKgkJCVRyZWF0ICpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJCiYjNDM7ICoJCQlhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzcwomIzQzOyAqCQkJaGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZwomIzQzOyAqCQkJb24gKnBhcmFtcyotJmd0O2lmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mCiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSTsgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBtdXN0IGJlCiYjNDM7ICoJCQlFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlCiYjNDM7ICoJCQkqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotJmd0O2lmaW5kZXggaXMgaXRzZWxmIGEgVkxBTgomIzQzOyAqCQkJZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYQomIzQzOyAqCQkJYm9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkCiYjNDM7ICoJCQl0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuCiYjNDM7ICoJCQlBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpcwomIzQzOyAqCQkJZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKioKJiM0MzsgKgkJCShyZXR1cm5zICoqLUVJTlZBTCoqKS4KICAqCiAgKgkJKmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3IKICAqCQkqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy4KQEAgLTczMjcsNiAmIzQzOzczNjgsOCBAQCBlbnVtIHsKIAlCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVICZsdDsmbHQ7IDMpLAogCUJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgJmx0OyZsdDsgNCksCiAJQlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSAmbHQ7Jmx0OyA1KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSAmbHQ7Jmx0OyA2KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSAmbHQ7Jmx0OyA3KSwKIH07CiAKIGVudW0gewpAQCAtNzM0MCw2ICYjNDM7NzM4Myw3IEBAIGVudW0gewogCUJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi8KIAlCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi8KIAlCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqLwomIzQzOwlCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi8KIH07CiAKIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CkBAIC03MzkzLDcgJiM0Mzs3NDM3LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQkvKiBvdXRwdXQgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZQomIzQzOwkJCSAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkCiYjNDM7CQkJICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoCiYjNDM7CQkJICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlCiYjNDM7CQkJICogdGhlIGxvb2t1cCBieS4KJiM0MzsJCQkgKi8KIAkJCV9fYmUxNgloX3ZsYW5fcHJvdG87CiAJCQlfX2JlMTYJaF92bGFuX1RDSTsKIAkJfTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNjIwMSwyMSAmIzQzOzYyMDEsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0gewogI2VuZGlmCiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KQomIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAomIzQzOwkJCQkgIHUzMiBmbGFncywgdTMyIG10dSwgdTMyIGluX2lmaW5kZXgpCiB7CiAJcGFyYW1zLSZndDtoX3ZsYW5fVENJID0gMDsKIAlwYXJhbXMtJmd0O2hfdmxhbl9wcm90byA9IDA7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpCiYjNDM7CWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikgJmFtcDsmYW1wOyBpc192bGFuX2RldihkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktJmd0O3JlYWxfZGV2OwomIzQzOwomIzQzOwkJaWYgKCFpc192bGFuX2RldihyZWFsX2RldikgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gdmxhbl9kZXZfdmxhbl9wcm90byhkZXYpOwomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7CiYjNDM7CQkJcGFyYW1zLSZndDtpZmluZGV4ID0gcmVhbF9kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aWZpbmRleCA9IGluX2lmaW5kZXg7CiYjNDM7CQkJcmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKG10dSkKIAkJcGFyYW1zLSZndDttdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi8KIAogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CV9fYmUxNiBwcm90byA9IHBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7CiYjNDM7CXUxNiB2aWQ7CiYjNDM7CiYjNDM7CWlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkgJmFtcDsmYW1wOyBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CXZpZCA9IG50b2hzKHBhcmFtcy0mZ3Q7aF92bGFuX1RDSSkgJmFtcDsgVkxBTl9WSURfTUFTSzsKJiM0MzsJdmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTsKJiM0MzsJaWYgKCF2bGFuX2RldiB8fCAhKHZsYW5fZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfVVApIHx8CiYjNDM7CSAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiB2bGFuX2RldjsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpCiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAkJCSAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KQogewomIzQzOwl1MzIgaW5faWZpbmRleCA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7CiAJc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYzsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAkvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovCiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCWlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSkKQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJCWZsNC5mbG93aTRfaWlmID0gMTsKIAkJZmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJfSBlbHNlIHsKLQkJZmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2LSZndDtpZmluZGV4LCBub3QgcGFyYW1zLSZndDtpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlCiYjNDM7CQkgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWZsNC5mbG93aTRfaWlmID0gZGV2LSZndDtpZmluZGV4OwogCQlmbDQuZmxvd2k0X29pZiA9IDA7CiAJfQogCWZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy0mZ3Q7dG9zKTsKQEAgLTYzNDcsNyAmIzQzOzYzOTgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAltZW1jcHkocGFyYW1zLSZndDtzbWFjLCBkZXYtJmd0O2Rldl9hZGRyLCBFVEhfQUxFTik7CiAKIHNldF9md2RfcGFyYW1zOgotCXJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTsKJiM0MzsJcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpOwogfQogI2VuZGlmCiAKQEAgLTYzNTcsNiAmIzQzOzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X3NyYzsKIAlzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X2RzdDsKJiM0MzsJdTMyIGluX2lmaW5kZXggPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJc3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC02Mzc0LDYgJiM0Mzs2NDI2LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAlpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTsKIAlpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LSZndDtjbmYuZm9yd2FyZGluZykpKQogCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7CkBAIC02MzgyLDcgJiM0Mzs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCQlmbDYuZmxvd2k2X2lpZiA9IDE7CiAJCW9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLSZndDtpZmluZGV4OwogCX0gZWxzZSB7Ci0JCW9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLSZndDtpZmluZGV4OwomIzQzOwkJLyoKJiM0MzsJCSAqIGRldi0mZ3Q7aWZpbmRleCwgbm90IHBhcmFtcy0mZ3Q7aWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZQomIzQzOwkJICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLgomIzQzOwkJICovCiYjNDM7CQlvaWYgPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQlmbDYuZmxvd2k2X2lpZiA9IG9pZjsKIAkJZmw2LmZsb3dpNl9vaWYgPSAwOwogCQlzdHJpY3QgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSOwogCX0KQEAgLTY0ODYsMTMgJiM0Mzs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCW1lbWNweShwYXJhbXMtJmd0O3NtYWMsIGRldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogc2V0X2Z3ZF9wYXJhbXM6Ci0JcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpOwomIzQzOwlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7CiB9CiAjZW5kaWYKIAogI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcCiAJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0ggfCBCUEZfRklCX0xPT0tVUF9UQklEIHwgXAotCQkJICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKQomIzQzOwkJCSAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSyB8IFwKJiM0MzsJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CWlmIChmbGFncyAmYW1wOyB+QlBGX0ZJQl9MT09LVVBfTUFTSykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZmxhZ3MgJmFtcDsgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQogCiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCwKIAkgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpCkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHBhcmFtcy0mZ3Q7ZmFtaWx5KSB7CkBAIC02NTM4LDcgJiM0Mzs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocGFyYW1zLSZndDt0b3RfbGVuKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5mZjAzMDE5YWJlMzU1NCAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzUzMiw2ICYjNDM7MzUzMiw0NyBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJCVVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLSZndDttYXJrIGZvciB0aGUgZmliIGxvb2t1cC4KICAqCQkJVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULAogICoJCQlhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuCiYjNDM7ICoJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqCiYjNDM7ICoJCQlJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlCiYjNDM7ICoJCQlwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXQKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGZyb20KJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi0mZ3Q7aWZpbmRleCB3aXRoIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRAomIzQzOyAqCQkJb25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0bwomIzQzOyAqCQkJc2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotJmd0O3NtYWMgaXMKJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdAomIzQzOyAqCQkJaXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLAomIzQzOyAqCQkJdGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzCiYjNDM7ICoJCQlvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLSZndDtpZmluZGV4CiYjNDM7ICoJCQlsZWZ0IGF0IHRoZSBpbnB1dC4gVG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24KJiM0MzsgKgkJCWlmaW5kZXgsIHJlcGVhdCB0aGUgbG9va3VwIHdpdGhvdXQKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqLCByZS1pbml0aWFsaXppbmcgKnBhcmFtcyoKJiM0MzsgKgkJCWZpcnN0OiBvdXRwdXQgZmllbGRzIG92ZXJ3cml0ZSB0aGUgaW5wdXRzIHRoZXkgc2hhcmUKJiM0MzsgKgkJCXN0b3JhZ2Ugd2l0aC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkcwomIzQzOyAqCQkJYXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXAKJiM0MzsgKgkJCXRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdAomIzQzOyAqCQkJc3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLSZndDttdHVfcmVzdWx0LgomIzQzOyAqCQkJVGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXMKJiM0MzsgKgkJCXJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTgomIzQzOyAqCQkJZGV2aWNlIGRpcmVjdGx5LgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKgomIzQzOyAqCQkJVHJlYXQgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kKJiM0MzsgKgkJCWFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzCiYjNDM7ICoJCQloYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnCiYjNDM7ICoJCQlvbiAqcGFyYW1zKi0mZ3Q7aWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2YKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fVENJOyAqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIG11c3QgYmUKJiM0MzsgKgkJCUVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2UKJiM0MzsgKgkJCSoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi0mZ3Q7aWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOCiYjNDM7ICoJCQlkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhCiYjNDM7ICoJCQlib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWQKJiM0MzsgKgkJCXRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy4KJiM0MzsgKgkJCUEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzCiYjNDM7ICoJCQlmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKgomIzQzOyAqCQkJKHJldHVybnMgKiotRUlOVkFMKiopLgogICoKICAqCQkqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvcgogICoJCSoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLgpAQCAtNzMyNyw2ICYjNDM7NzM2OCw4IEBAIGVudW0gewogCUJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgJmx0OyZsdDsgMyksCiAJQlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSAmbHQ7Jmx0OyA0KSwKIAlCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVICZsdDsmbHQ7IDUpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVICZsdDsmbHQ7IDYpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVICZsdDsmbHQ7IDcpLAogfTsKIAogZW51bSB7CkBAIC03MzQwLDYgJiM0Mzs3MzgzLDcgQEAgZW51bSB7CiAJQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovCiYjNDM7CUJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqLwogfTsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIHsKQEAgLTczOTMsNyAmIzQzOzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHsKIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCS8qIG91dHB1dCAqLwomIzQzOwkJCS8qCiYjNDM7CQkJICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlCiYjNDM7CQkJICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWQKJiM0MzsJCQkgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGgKJiM0MzsJCQkgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGUKJiM0MzsJCQkgKiB0aGUgbG9va3VwIGJ5LgomIzQzOwkJCSAqLwogCQkJX19iZTE2CWhfdmxhbl9wcm90bzsKIAkJCV9fYmUxNgloX3ZsYW5fVENJOwogCQl9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCmluZGV4IGJkNzY1ODk1ODAwNDFmLi5mNzM2MWY5YTM0NTkyZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMjMgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaWYuaCZndDsKIApAQCAtMjMsNiAmIzQzOzI0LDcgQEAKICNkZWZpbmUgSVBWNF9UQklEX0FERFIJCSYjMzQ7MTcyLjAuMC4yNTQmIzM0OwogI2RlZmluZSBJUFY0X1RCSURfTkVUCQkmIzM0OzE3Mi4wLjAuMCYjMzQ7CiAjZGVmaW5lIElQVjRfVEJJRF9EU1QJCSYjMzQ7MTcyLjAuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVAkmIzM0OzE3Mi4wLjAuNSYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9BRERSCQkmIzM0O2ZkMDA6OkZGRkYmIzM0OwogI2RlZmluZSBJUFY2X1RCSURfTkVUCQkmIzM0O2ZkMDA6OiYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9EU1QJCSYjMzQ7ZmQwMDo6MiYjMzQ7CkBAIC0zNyw2ICYjNDM7MzksNDEgQEAKICNkZWZpbmUgSVBWNl9MT0NBTAkJJiMzNDtmZDAxOjozJiMzNDsKICNkZWZpbmUgSVBWNl9HVzEJCSYjMzQ7ZmQwMTo6MSYjMzQ7CiAjZGVmaW5lIElQVjZfR1cyCQkmIzM0O2ZkMDE6OjImIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRAkJCTEwMAomIzQzOyNkZWZpbmUgVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDAmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRF9ET1dOCQkxMDIKJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTgkJJiMzNDt2ZXRoMS4xMDImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRQkmIzM0O3ZldGgxLjIwMCYjMzQ7CiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFCSYjMzQ7dmV0aDEuMjAwLjMwMCYjMzQ7CiYjNDM7I2RlZmluZSBWTEFOX1RBQkxFCQkmIzM0OzMwMCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUgkmIzM0OzEwLjUuMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0VHUkVTU19EU1QJJiMzNDsxMC41LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUCQkmIzM0OzEwLjcuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9EU1QJCSYjMzQ7MTAuNi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0dXCQkmIzM0OzEwLjUuMC4xJiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSCSYjMzQ7ZmQwMjo6MjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUCSYjMzQ7ZmQwMjo6MiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRFNUCQkmIzM0O2ZkMDM6OjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0dXCQkmIzM0O2ZkMDI6OjEmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VECQk5OTkKJiM0MzsjZGVmaW5lIFZSRl9JRkFDRQkJJiMzNDt2cmYtYmx1ZSYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVEFCTEUJCSYjMzQ7MTAwMCYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRAkJMTAxCiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUgkmIzM0OzEwLjguMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfR1cJCSYjMzQ7MTAuOC4wLjEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUCQkmIzM0OzEwLjkuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRAkJNTAKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMi41MCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1QJJiMzNDsxNzIuMi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9CT05EX1ZMQU5fRFNUCSYjMzQ7MTAuMTEuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUCSYjMzQ7MTAuNS45LjImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lECQkyMDAKJiM0MzsjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRAkzMDAKJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0UJCSYjMzQ7Ym9uZDk5JiMzNDsKJiM0MzsjZGVmaW5lIEJPTkRfUE9SVAkJJiMzNDt2ZXRoMyYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1BPUlRfUEVFUgkJJiMzNDt2ZXRoNCYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSUQJCTUwMAogI2RlZmluZSBETUFDCQkJJiMzNDsxMToxMToxMToxMToxMToxMSYjMzQ7CiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH0KICNkZWZpbmUgRE1BQzIJCQkmIzM0OzAxOjAxOjAxOjAxOjAxOjAxJiMzNDsKQEAgLTUyLDYgJiM0Mzs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHsKIAlfX3UzMiB0YmlkOwogCV9fdTggZG1hY1s2XTsKIAlfX3UzMiBtYXJrOwomIzQzOwkvKgomIzQzOwkgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnCiYjNDM7CSAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KQomIzQzOwkgKi8KJiM0MzsJX191MTYgdmxhbl9wcm90bzsKJiM0MzsJX191MTYgdmxhbl9pZDsKJiM0MzsJYm9vbCBjaGVja192bGFuOwomIzQzOwljb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy0mZ3Q7aWZpbmRleCBhZnRlciBsb29rdXAgKi8KJiM0MzsJY29uc3QgY2hhciAqaWlmOwkgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqLwomIzQzOwlfX3UxNiB0b3RfbGVuOwkJICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqLwomIzQzOwlfX3UxNiBleHBlY3RlZF9tdHU7CSAgLyogZXhwZWN0ZWQgbXR1X3Jlc3VsdCAodW5pb24gd2l0aCB0b3RfbGVuKSAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiAJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsCiAJICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0CiYjNDM7CSAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXQKJiM0MzsJICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzbwomIzQzOwkgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0JiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULAomIzQzOwkgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCB9LAogCXsgLmRlc2MgPSAmIzM0O0lQdjYgVEJJRCBsb29rdXAgZmFpbHVyZSYjMzQ7LAogCSAgLmRhZGRyID0gSVBWNl9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAogCSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsCkBAIC0xNDIsNiAmIzQzOzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSwKIAkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAogCSAgLm1hcmsgPSBNQVJLLCB9LAomIzQzOwkvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovCiYjNDM7CS8qCiYjNDM7CSAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGEKJiM0MzsJICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsCiYjNDM7CSAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlCiYjNDM7CSAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZQomIzQzOwkgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy0mZ3Q7aWZpbmRleAomIzQzOwkgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZQomIzQzOwkgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS4KJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG10dQomIzQzOwkgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKQomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsCiYjNDM7CSAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2UmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5paWYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IEJPTkRfSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8CiYjNDM7CQkJICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELAomIzQzOwkgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSwKJiM0MzsJLyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZyYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGUmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LAomIzQzOwkgIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlCiYjNDM7CSAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3QKJiM0MzsJICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJLyoKJiM0MzsJICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbAomIzQzOwkgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmUKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd24mIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSwKJiM0MzsJLyoKJiM0MzsJICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzCiYjNDM7CSAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3MKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXgmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGUKJiM0MzsJICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydAomIzQzOwkgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cykKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELAomIzQzOwkgIC5paWYgPSBCT05EX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSUQmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7dW5rbm93biBmbGFnIGJpdCByZWplY3RlZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSAoMSAmbHQ7Jmx0OyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAogfTsKIAogc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKQpAQCAtMjA0LDYgJiM0Mzs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZCkKIAlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAlTWVMoZmFpbCwgJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZAomIzQzOwkgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0cwomIzQzOwkgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy4KJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CS8qCiYjNDM7CSAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGUKJiM0MzsJICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUsIHdoaWNoIHRoZQomIzQzOwkgKiBuby1mbGFnIGFybSBiZWxvdyBwaW5zCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZCYjMzQ7LCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWwKJiM0MzsJICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi8mIzM0OyBWTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMCYjMzQ7LAomIzQzOwkgICAgUUlOUV9PVVRFUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwJiMzNDssCiYjNDM7CSAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzJiMzNDssCiYjNDM7CSAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlcyYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXMmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXMmIzM0OywgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7CiYjNDM7CiYjNDM7CS8qIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSBib25kJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgQk9ORF9QT1JULCBCT05EX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgQk9ORF9QT1JUKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZCYjMzQ7LAomIzQzOwkgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXAmIzM0OywgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcy4lZCYjMzQ7LAomIzQzOwkgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZQomIzQzOwkgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlcyYjMzQ7LCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZSRl9WTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgJiMzNDsuZm9yd2FyZGluZykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXMmIzM0OywKJiM0MzsJICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7CiYjNDM7CiYjNDM7CS8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi8KJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZ2Nfc3RhbGVfdGltZSYjMzQ7LCAmIzM0OzkwMCYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmdjX3N0YWxlX3RpbWUpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGUmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTsKJiM0MzsKJiM0MzsJLyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzJiMzNDssCiYjNDM7CSAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7CiYjNDM7CiAJcmV0dXJuIDA7CiBmYWlsOgogCXJldHVybiAtMTsKQEAgLTIxOCw5ICYjNDM7NTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKIAogCXBhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKLQlwYXJhbXMtJmd0O2lmaW5kZXggPSBpZmluZGV4OwomIzQzOwlwYXJhbXMtJmd0O2lmaW5kZXggPSB0ZXN0LSZndDtpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LSZndDtpaWYpIDogaWZpbmRleDsKIAlwYXJhbXMtJmd0O3RiaWQgPSB0ZXN0LSZndDt0YmlkOwogCXBhcmFtcy0mZ3Q7bWFyayA9IHRlc3QtJmd0O21hcms7CiYjNDM7CXBhcmFtcy0mZ3Q7dG90X2xlbiA9IHRlc3QtJmd0O3RvdF9sZW47CiYjNDM7CiYjNDM7CS8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqLwomIzQzOwlpZiAodGVzdC0mZ3Q7bG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gaHRvbnModGVzdC0mZ3Q7dmxhbl9wcm90byk7CiYjNDM7CQlwYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyh0ZXN0LSZndDt2bGFuX2lkKTsKJiM0MzsJfQogCiAJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC0mZ3Q7ZGFkZHIsIHBhcmFtcy0mZ3Q7aXB2Nl9kc3QpID09IDEpIHsKIAkJcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUNjsKQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiAJc3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07CiAJc3RydWN0IGZpYl9sb29rdXAgKnNrZWw7Ci0JaW50IHByb2dfZmQsIGVyciwgcmV0LCBpOwomIzQzOwlpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTsKIAogCS8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLSZndDtkYXRhLCBzbwogCSAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuCkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJICAgIC5jdHhfaW4gPSAmYW1wO3NrYiwKIAkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLAogCSk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJKTsKIAogCXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiAJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47CiAJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwKTsKJiM0MzsJeGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXBfeGRwKTsKIAogCVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19URVNUKTsKIApAQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMmIzM0OykpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC4KJiM0MzsJCSAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgLUVJTlZBTCwKJiM0MzsJCQkJICAmIzM0O3RjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTiYjMzQ7KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCwKIAkJCSAgJiMzNDtmaWJfbG9va3VwX3JldCYjMzQ7KTsKIApAQCAtMzUyLDYgJiM0Mzs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdCkKIAkJCWFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTsKIAomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldikKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwKJiM0MzsJCQkJICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCAmIzM0O2lmaW5kZXgmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDttdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsCiYjNDM7CQkJCSAgJiMzNDttdHVfcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O2hfdmxhbl9wcm90byYjMzQ7KTsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgJiMzNDtoX3ZsYW5fVENJJiMzNDspOwomIzQzOwkJfQomIzQzOwogCQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKIAkJaWYgKCFBU1NFUlRfRVEocmV0LCAwLCAmIzM0O2RtYWMgbm90IG1hdGNoJiMzNDspKSB7CiAJCQljaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTsKQEAgLTM2MSwxNyAmIzQzOzc2OCwzMjIgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJCXByaW50ZigmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzICYjMzQ7LCBleHBlY3RlZCwgYWN0dWFsKTsKIAkJfQogCi0JCS8vIGVuc3VyZSB0YmlkIGlzIHplcm8mIzM5O2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuCi0JCWlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7CiYjNDM7CQkvKgomIzQzOwkJICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aAomIzQzOwkJICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuCiYjNDM7CQkgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSkgewogCQkJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zLnRiaWQsIDAsCiAJCQkJCSYjMzQ7ZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm8mIzM0OykpCiAJCQkJZ290byBmYWlsOwogCQl9CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGUKJiM0MzsJICogY3VycmVudCBuZXRucyYjMzk7IGxvb3BiYWNrIGZvciBjdHgtJmd0O3J4cS0mZ3Q7ZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVAomIzQzOwkgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0cwomIzQzOwkgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYgomIzQzOwkgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCAmYW1wO3Rlc3RzW2ldLCBza2IuaWZpbmRleCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IHRlc3RzW2ldLmxvb2t1cF9mbGFnczsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt4ZHAgdGVzdF9ydW4mIzM0OykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsCiYjNDM7CQkJICAgICAgICYjMzQ7eGRwIGZpYl9sb29rdXBfcmV0JiMzNDspKQomIzQzOwkJCXByaW50ZigmIzM0Oyh4ZHApICVzXG4mIzM0OywgdGVzdHNbaV0uZGVzYyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LAomIzQzOwkJCQkgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksCiYjNDM7CQkJCSAgJiMzNDt4ZHAgaWZpbmRleCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpCiYjNDM7CQkJYXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O3hkcCBoX3ZsYW5fcHJvdG8mIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksCiYjNDM7CQkJCSAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksICYjMzQ7eGRwIGhfdmxhbl9UQ0kmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKJiM0MzsJCUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7eGRwIGRtYWMmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXMKJiM0MzsJCSAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtJmd0O210dSBhbmQgaXMKJiM0MzsJCSAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSAmYW1wOyZhbXA7IHRlc3RzW2ldLnRvdF9sZW4pCiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O210dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSwKJiM0MzsJCQkJICAmIzM0O3hkcCBtdHVfcmVzdWx0JiMzNDspOwomIzQzOwl9CiYjNDM7CiBmYWlsOgogCWlmIChuc3Rva2VuKQogCQljbG9zZV9uZXRucyhuc3Rva2VuKTsKIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IE5TX1RFU1QpOwogCWZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBOU19WTEFOX0EJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYSYjMzQ7CiYjNDM7I2RlZmluZSBOU19WTEFOX0IJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfQUREUgkmIzM0OzEwLjY2LjAuMSYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfRFNUCSYjMzQ7MTAuNjYuMC4yJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgVkxBTiBkZXZpY2UgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMgd2hpbGUgc3RheWluZyByZWdpc3RlcmVkCiYjNDM7ICogb24gaXRzIHBhcmVudC4gTmVpdGhlciBkaXJlY3Rpb24gbWF5IHRoZW4gY3Jvc3MgdGhlIGJvdW5kYXJ5OiB0aGUKJiM0MzsgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCYjMzk7cyBpZmluZGV4LCBhbmQgdGhlCiYjNDM7ICogaW5wdXQgZmxhZyBtdXN0IGZhaWwgY2xvc2VkIHJhdGhlciB0aGFuIHVzZSBhIGZvcmVpZ24gaW5ncmVzcy4KJiM0MzsgKi8KJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX25ldG5zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKJiM0MzsJc3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07CiYjNDM7CXN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDsKJiM0MzsJaW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHJ1bl9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjYsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLAomIzQzOwkJICAgIC5jdHhfaW4gPSAmYW1wO3NrYiwKJiM0MzsJCSAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSwKJiM0MzsJKTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjYsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cCk7CiYjNDM7CXhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwX3hkcCk7CiYjNDM7CWZpYl9wYXJhbXMgPSAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtczsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1ZMQU5fQSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19WTEFOX0IpOwomIzQzOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zKGEpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4JiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXAmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDcgbmFtZSB2ZXRoNy42NiB0eXBlIHZsYW4gaWQgNjYmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzJiMzNDssIE5TX1ZMQU5fQik7CiYjNDM7CS8qCiYjNDM7CSAqIHVwIGl0IGluIEIgYmVmb3JlIHRoZSBpbnB1dCBsb29rdXA6IHRoZSBtb3ZlIGNsb3NlZCBpdCwgYW5kIGEKJiM0MzsJICogZG93biBkZXZpY2UgZmFpbHMgdGhlIHJlc29sdmVyIG9uIElGRl9VUCBiZWZvcmUgcmVhY2hpbmcgdGhlCiYjNDM7CSAqIG5ldG5zIGNoZWNrIHRoaXMgc3VidGVzdCBleGlzdHMgdG8gcGluCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCBkZXYgdmV0aDcuNjYgdXAmIzM0OywgTlNfVkxBTl9CKTsKJiM0MzsKJiM0MzsJcGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDcmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0CiYjNDM7CSAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZAomIzQzOwkgKi8KJiM0MzsJc2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwlmaWJfcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyg2Nik7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8CiYjNDM7CQkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO3J1bl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGlucHV0KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkJICAmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCBwYXJlbnRfaWR4LCAmIzM0O2lmaW5kZXggdW50b3VjaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgaHRvbnMoNjYpLCAmIzM0O3RhZyB1bnRvdWNoZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zKGIpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudAomIzQzOwkgKiBpcyBpbiB0aGUgb3RoZXIgbmV0bnMsIHNvIHRoZSBzd2FwIG11c3Qgbm90IGhhcHBlbgomIzQzOwkgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2IHZldGg3LjY2JiMzNDssIElQVjRfVkxBTl9ORVROU19BRERSKTsKJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvdmV0aDcuNjYvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwoZm9yd2FyZGluZykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoNy42NiYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3LjY2KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJbWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpOwomIzQzOwlmaWJfcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlmaWJfcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwomIzQzOwlmaWJfcGFyYW1zLSZndDtpZmluZGV4ID0gdmxhbl9pZHg7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihkc3QpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCA9IC0xOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGVncmVzcykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwKJiM0MzsJCSAgJiMzNDtlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCB2bGFuX2lkeCwKJiM0MzsJCSAgJiMzNDtmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgMCwgJiMzNDt2bGFuIGZpZWxkcyB6ZXJvJiMzNDspOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChuc3Rva2VuKQomIzQzOwkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVkxBTl9BKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19WTEFOX0IpOwomIzQzOwlmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDAKJiM0MzsjZGVmaW5lIE5TX1JFRElSRUNUICYjMzQ7ZmliX2xvb2t1cF9yZWRpcmVjdF9ucyYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZWdyZXNzIGZsYWcgZXhpc3RzIHNvIGFuIFhEUCBwcm9ncmFtIGNhbiByZWRpcmVjdCB0byB0aGUgcGh5c2ljYWwKJiM0MzsgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXQKJiM0MzsgKiB4ZHBfZG9fZmx1c2goKSwgYmVjYXVzZSBhIFZMQU4gZGV2aWNlIGhhcyBubyBuZG9feGRwX3htaXQuIERyaXZlIHJlYWwKJiM0MzsgKiBmcmFtZXMgd2l0aCBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywgd2hpY2ggcnVucyB0aGUgbmF0aXZlCiYjNDM7ICogeGRwX2RvX3JlZGlyZWN0KCkgJiM0MzsgeGRwX2RvX2ZsdXNoKCkgcGF0aDogYSByZWR1Y2libGUgVkxBTiBlZ3Jlc3MKJiM0MzsgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblEKJiM0MzsgKiBlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kIGlzIHBhc3NlZCB0byB0aGUgc3RhY2sgaW5zdGVhZCBvZgomIzQzOyAqIHJlZGlyZWN0ZWQgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBzaWxlbnRseSBkcm9wIGl0LgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fcmVkaXJlY3Qodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZWRpcmVjdF9mZCwgZXJyLCB2ZXRoMV9pZHgsIHZldGgyX2lkeCA9IC0xOwomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKJiM0MzsJc3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMOwomIzQzOwlib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y0LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSwKJiM0MzsJCSAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywKJiM0MzsJCSAgICAucmVwZWF0ID0gUkVESVJFQ1RfTlBLVFMsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcmVkaXJlY3RfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7CiYjNDM7CWZpYl9wYXJhbXMgPSAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtczsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1JFRElSRUNUKTsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfUkVESVJFQ1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlpZiAoc2V0dXBfbmV0bnMoKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMSYjMzQ7KTsKJiM0MzsJdmV0aDJfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMiYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMSkmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmVkaXJlY3QgdG8gdmV0aDEgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLiB2ZXRoX3hkcF94bWl0KCkKJiM0MzsJICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMiYjMzk7cyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zCiYjNDM7CSAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy4KJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnhkcF9jb3VudCksCiYjNDM7CQkJICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMiYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJeGRwX2F0dGFjaGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovCiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZldGgxX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Bhc3NlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Bhc3NlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O2RlbGl2ZXJlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kCiYjNDM7CSAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXIKJiM0MzsJICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlCiYjNDM7CSAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0CiYjNDM7CSAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMiYjMzk7cyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2UKJiM0MzsJICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJiMzOTtzIGZvcndhcmRpbmcKJiM0MzsJICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LgomIzQzOwkgKi8KJiM0MzsJbWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpOwomIzQzOwlmaWJfcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlmaWJfcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwomIzQzOwlmaWJfcGFyYW1zLSZndDtpZmluZGV4ID0gdmV0aDFfaWR4OwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfc3JjKSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihzcmMpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihxaW5xIGRzdCkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cmVkaXJlY3RlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHFpbnEgZWdyZXNzKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtxaW5xIGVncmVzcyBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQsIDAsICYjMzQ7cWlucSBlZ3Jlc3Mgbm90IHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKHhkcF9hdHRhY2hlZCkKJiM0MzsJCWJwZl94ZHBfZGV0YWNoKHZldGgyX2lkeCwgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTsKJiM0MzsJaWYgKG5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19SRURJUkVDVCk7CiYjNDM7CWZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjM2YjcyMThkOWFlMmVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKQEAgLTQsNyAmIzQzOzQsMTEgQEAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BrdF9jbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW4uaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTsKIGludCBmaWJfbG9va3VwX3JldCA9IDA7CkBAIC0xOSw0ICYjNDM7MjMsNTcgQEAgaW50IGZpYl9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiBUQ19BQ1RfU0hPVDsKIH0KIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCBmaWJfbG9va3VwX3hkcChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtmaWJfcGFyYW1zLCBzaXplb2YoZmliX3BhcmFtcyksCiYjNDM7CQkJCQlsb29rdXBfZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gWERQX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO2ludCByZWRpcmVjdGVkID0gMDsKJiM0MztpbnQgcGFzc2VkID0gMDsKJiM0MztpbnQgZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MztTRUMoJiMzNDt4ZHAmIzM0OykKJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtczsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpOwomIzQzOwlpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykgewomIzQzOwkJcmVkaXJlY3RlZCYjNDM7JiM0Mzs7CiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0KHBhcmFtcy5pZmluZGV4LCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXNzZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJdm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LSZndDtkYXRhOwomIzQzOwl2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpY3R4LSZndDtkYXRhX2VuZDsKJiM0MzsJc3RydWN0IGV0aGhkciAqZXRoID0gZGF0YTsKJiM0MzsJc3RydWN0IGlwaGRyICppcGg7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGNvdW50IG9ubHkgdGhlIHRlc3QmIzM5O3MgVENQIGZyYW1lczogdGhlIG5ldG5zIGhhcyBsaXZlCiYjNDM7CSAqIGxpbmstbG9jYWwgdHJhZmZpYyAoREFELCBNTEQpIHRoYXQgd291bGQgc2F0aXNmeSBhIGJhcmUKJiM0MzsJICogY291bnRlcgomIzQzOwkgKi8KJiM0MzsJaWYgKCh2b2lkICopKGV0aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CSAgICBldGgtJmd0O2hfcHJvdG8gIT0gYnBmX2h0b25zKEVUSF9QX0lQKSkKJiM0MzsJCXJldHVybiBYRFBfRFJPUDsKJiM0MzsJaXBoID0gKHZvaWQgKikoZXRoICYjNDM7IDEpOwomIzQzOwlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwgaXBoLSZndDtwcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCXJldHVybiBYRFBfRFJPUDsKJiM0MzsKJiM0MzsJZGVsaXZlcmVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIFhEUF9EUk9QOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIEJQRiBGSUIgTG9va3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBWTEFOIHN1cHBvcnQgdG8gdGhlIGBicGZfZmliX2xvb2t1cGAgaGVscGVyLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBmbGFncywgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtLCBzbyBmdXp6aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbW9kaWZpZWQgYW5kIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zLiBUaGUgbW9zdCBpbW1lZGlhdGUgdGFyZ2V0cyB0aGF0IGp1bXAgb3V0IGFyZToKCiogICBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2A6IFRoaXMgb25lJiMzOTtzIGxpa2VseSB0byBiZSBjb3JlIHRvIHRoZSBmb3J3YXJkaW5nIGxvZ2ljLgoqICAgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgOiBCZWluZyBhIG5ldyBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gVkxBTiBpbnB1dCBkZXZpY2UgaGFuZGxpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgYSBwcmltZSB0YXJnZXQgZm9yIHNjcnV0aW55LgoqICAgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgOiBUaGVzZSBhcmUgaG90IHBhdGhzIGluIHRoZSBGSUIgbG9va3VwLCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaW1wb3J0YW50LgoqICAgYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgOiBUaGVzZSBhcmUga2V5IEJQRiBoZWxwZXJzLCBzbyB0aGV5IHdpbGwgYmUgaW1wb3J0YW50IHRvIGFuYWx5emUuCgpJJiMzOTtsbCBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlbGllcyBvbiBgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkgb25lIHRvIGVuYWJsZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBhbHNvIGNvbmZpZ3VyZWQsIGJ1dCB0aG9zZSBhcmUgdXN1YWxseSBzdGFuZGFyZC4gSSYjMzk7bGwgYWxzbyBjaGVjayBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVkxBTl84MDIxUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTYyMDQ9c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIxMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5uZXQvY29yZS9maWx0ZXIuYy02MjEyLVx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY2MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBGaWx0ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgcmVxdWlyZW1lbnQgaGVyZSBzZWVtcyB0byBiZSBzdXBwb3J0IGZvciBgVkxBTl84MDIxUWAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBCZWZvcmUgSSBwcm9jZWVkLCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gY29uc2lkZXIgYmVzaWRlcyB0aGlzPyBJJiMzOTt2ZSBzZWVuIGEgcGF0Y2ggYXBwbGllZCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGZ1bmN0aW9uIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBWTEFOIGhhbmRsaW5nIGlzIGJlaW5nIGltcGxlbWVudGVkIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVlcGx5IHRvIGdhdWdlIHRoZSBlZmZlY3RpdmVuZXNzIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02MjA0PXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXG5uZXQvY29yZS9maWx0ZXIuYzo2MjMzOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzNC1cdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjI1ND1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjcxLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjcyOlx0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNzMtXHRcdGlmIChJU19FUlIoZGV2KSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NDA2PXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY0MjktXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MzA6XHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjQzMS1cdFx0aWYgKElTX0VSUihkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mjk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEZJQiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgRklCIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBpcyB6ZXJvaW5nIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIFNwZWNpZmljYWxseSwgdGhlIG9uZXMgZGlyZWN0bHkgcmVsYXRlZCB0byBWTEFOIGFuZCBmb3J3YXJkaW5nOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRoZSBsb29rdXAgZnVuY3Rpb25zLCBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIE9mIGNvdXJzZSwgd2UgYWxzbyBoYXZlIHRoZSBpcHY0IGFuZCBpcHY2IGxvb2t1cCB2YXJpYXRpb25zIGdldHRpbmcgdHdlYWtlZCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGZvcndhcmRpbmcgbG9naWMgYmVpbmcgbW9kaWZpZWQsIHNvIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIHJlYWxseSBkaWcgaW50by4KCk5vdywgbGV0JiMzOTtzIHNlZSwgdGhlIHBhdGNoIGlzIGFsc28gY2hlY2tpbmcgaWYgd2Ugb25seSBoYXZlIGBWTEFOXzgwMjFRYCBjb25maWd1cmVkLiBSaWdodCwgaXQmIzM5O3MgbGV2ZXJhZ2luZyBhIHN1aXRlIG9mIFZMQU4tcmVsYXRlZCBoZWxwZXJzOiBgaXNfdmxhbl9kZXZgLCBgdmxhbl9kZXZfcHJpdmAsIGB2bGFuX2Rldl92bGFuX3Byb3RvYCwgYHZsYW5fZGV2X3ZsYW5faWRgLCBhbmQgdGhhdCBSQ1UgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLiBPa2F5LCB0aGUgVkxBTiBjb2RlIHNob3VsZCBiZSBmYWlybHkgc3RhbmRhcmQgZnJvbSBoZXJlLCBidXQgSSB3b25kZXIsIGFyZSBhbGwgb2YgdGhlc2UgZGVwZW5kZW50IG9uIGBDT05GSUdfVkxBTl84MDIxUWAgb3IgcG90ZW50aWFsbHkgdGhlIG1vZHVsZSB2ZXJzaW9uLCBgQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFYD8gV2UmIzM5O3JlIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBWTEFOIHN1cHBvcnQgaXMgZWl0aGVyIGJ1aWx0LWluIG9yIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBob3cgdGhpcyBpcyBzdHJ1Y3R1cmVkLiBBbmQgdGhhdCBSQ1UgaGVscGVyPyBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBiZWluZyBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/IFRpbWUgdG8gY29uZmlybSB0aGF0LCBhbmQgYWxzbyBtYWtlIHN1cmUgbm90aGluZyB1bnVzdWFsIGlzIGJlaW5nIGRvbmUgd2l0aCB0aGUgVkxBTi1zcGVjaWZpYyBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTQwNjg9c3RhdGljIGJvb2wgYm54dF9yZV9jaGVja19pZl92bGFuX3ZhbGlkKHN0cnVjdCBibnh0X3JlX2RldiAqcmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzQtXHQgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDA3NTpcdGlmICghX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHJkZXYtXHUwMDNlbmV0ZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00MDc2LVx0XHRcdFx0ICAgICAgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuX2lkKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfaWZmX2Zyb21fbWFjKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jLTE4Ny1cdFx0XHRpZiAodmxhbiBcdTAwMjZcdTAwMjYgdmxhbiAhPSBWTEFOX1ZJRF9NQVNLKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYzoxODg6XHRcdFx0XHRkZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHZsYW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmMtMTg5LVx0XHRcdH0gZWxzZSBpZiAobmV0aWZfaXNfYm9uZF9zbGF2ZShkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jPTIxOD1pbnQgY3hnYjRfdXBkYXRlX3Jvb3RfZGV2X2NsaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmMtMjM2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkxBTl9OX1ZJRDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYzoyMzc6XHRcdHJvb3RfZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYy0yMzgtXHRcdGlmICghcm9vdF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc0Mz1zdGF0aWMgdm9pZCBtbHhzd19zcF9yaWZfZGVzdHJveV92bGFuX3VwcGVyKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODc1MC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjg3NTE6XHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHZpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUyLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc3MD1pbnQgbWx4c3dfc3Bfcm91dGVyX2JyaWRnZV92bGFuX2FkZChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTg4MzEtXHRcdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjg4MzI6XHRcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShicl9kZXYsIGh0b25zKEVUSF9QXzgwMjFRKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTg4MzMtXHRcdFx0XHRcdFx0ICAgICBvbGRfcHZpZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jPTQwODI9dm9pZCBxbGNuaWNfcmVzdG9yZV9pbmRldl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwOTEtXHRmb3JfZWFjaF9zZXRfYml0KHZpZCwgYWRhcHRlci1cdTAwM2V2bGFucywgVkxBTl9OX1ZJRCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwOTI6XHRcdGRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShuZXRkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkzLVx0XHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYz0zMDk9c3RhdGljIHZvaWQgZG9fbmVpZ2hfc29saWNpdChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4ICpidWYsIHUxNiB0Y2kpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI2LVx0aWYgKHRjaSkge1xuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM6MzI3Olx0XHRuZXRkZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LVx1MDAzZW5ldCwgaHRvbnMoRVRIX1BfODAyMVEpLFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI4LVx0XHRcdFx0XHRcdCAgdGNpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0xMjM9c3RydWN0IHZsYW5fcGNwdV9zdGF0cyB7XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMTM1LVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MTM2OmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNy1cdFx0XHRcdFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MjUzOl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yNTQtXHRcdCAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMD1ib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc1LS8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NzY6c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc3LVx0XHRcdFx0XHRfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTkzLVx0XHRpZiAodXBwZXJfZGV2KVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjk0Olx0XHRcdHJldHVybiBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UodXBwZXJfZGV2LFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTk1LVx0XHRcdFx0XHRcdCAgICB2bGFuX3Byb3RvLCB2bGFuX2lkKTtcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOTktfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEwMDpFWFBPUlRfU1lNQk9MKF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTAxLVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MTI0PXZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE3OS1cdGlmICh2aWQgIT0gMCkge1xubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxODA6XHRcdHZsYW5kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnItXHUwMDNlZGV2LCBza2ItXHUwMDNldmxhbl9wcm90byxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTgxLVx0XHRcdFx0XHRcdCAgIHZpZCk7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTQ9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTUtXHRcdC8qIGJ1aWxkIG5laWdoIHRhYmxlIGxvb2t1cCBvbiB0aGUgdmxhbiBkZXZpY2UgKi9cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDU2Olx0XHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVx1MDAzZWRldiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1Ny1cdFx0XHRcdFx0XHQgICB2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0Ni1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQ3Olx0dmxhbiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShiciwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0OC1cdFx0XHRcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYikgXHUwMDI2IFZMQU5fVklEX01BU0spO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyMzM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDQ6XHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuLS1cbm5ldC9kc2EvdGFnLmg9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBkc2Ffc29mdHdhcmVfdW50YWdfdmxhbl91bmF3YXJlX2JyaWRnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9kc2EvdGFnLmgtMTMxLVx0ICovXG5uZXQvZHNhL3RhZy5oOjEzMjpcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShiciwgaHRvbnMocHJvdG8pLCB2aWQpO1xubmV0L2RzYS90YWcuaC0xMzMtXHRpZiAoIXVwcGVyX2RldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBUaGlzIEJQRi9WTEFOIFBhdGNoKioKCk9rYXksIHNvIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgIGlzIGRlZmluaXRlbHkgYXZhaWxhYmxlIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgY3J1Y2lhbCBvbmUgc2VlbXMgdG8gYmUgYFZMQU5fODAyMVFgLCB3aGljaCB0cmFuc2xhdGVzIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX1ZMQU5fODAyMVFgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSAqb25seSogbmVjZXNzYXJ5IGNvbmZpZyByZWxhdGVkIHRvIFZMQU4uCgpUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCB3aGljaCBzdWdnZXN0cyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgZW5hYmxlZC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBPZiBjb3Vyc2UsIEJQRiByZXF1aXJlcyBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYnV0IHRoYXQmIzM5O3MgYSBnaXZlbiBpbiB0aGVzZSBzb3J0cyBvZiBwYXRjaGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0LiBUaGUgY29kZSB1c2VzIGBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAsIHNvIGBWTEFOXzgwMjFRYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW1wYWN0czoKCiogICBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAKKiAgIGBicGZfZmliX3NldF9md2RfcGFyYW1zYAoqICAgYGJwZl94ZHBfZmliX2xvb2t1cGAKKiAgIGBicGZfc2tiX2ZpYl9sb29rdXBgCiogICBgYnBmX2lwdjRfZmliX2xvb2t1cGAKKiAgIGBicGZfaXB2Nl9maWJfbG9va3VwYAoKV2FpdCwgYSBzZWNvbmTigKYgIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgIGFyZSBob3QgcGF0aHMsIHJpZ2h0PyBZZXMsIHRoZXkmIzM5O3JlIGNhbGxlZCBieSBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEFuZCB0aGV5JiMzOTtyZSAqc3BlY2lmaWNhbGx5KiBtb2RpZmllZCBoZXJlLiBUaGV5JiMzOTtyZSBkZWZpbml0ZWx5IGltcG9ydGFudC4gSXQgbG9va3MgbGlrZSBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgIGlzIGFsc28gcmVsZXZhbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCBpcyBhbHNvIGEgZnVuY3Rpb24uCgpTbywgaGVyZSYjMzk7cyBteSByZXZpc2VkIGxpc3QgdG8gZm9jdXMgb246CgoqICAgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgCiogICBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AKKiAgIGBicGZfeGRwX2ZpYl9sb29rdXBgCiogICBgYnBmX3NrYl9maWJfbG9va3VwYAoqICAgYGJwZl9pcHY0X2ZpYl9sb29rdXBgCiogICBgYnBmX2lwdjZfZmliX2xvb2t1cGAKKiAgIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02NDA2PXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjItXG5uZXQvY29yZS9maWx0ZXIuYzo2NTYzOnN0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY1NzU9QlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjU4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjY1ODE6XHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY2MDk9QlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NjE4LVxubmV0L2NvcmUvZmlsdGVyLmM6NjYxOTpcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxubmV0L2NvcmUvZmlsdGVyLmMtNjYyMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDMzCgkJCQkJCQlvdXRwdXQ6IDI0MwoJCQkJCQkJdGhvdWdodHM6IDUyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBGSUIgTG9va3VwIFZMQU4gU3VwcG9ydCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdGUuIE15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIG5lZWRzIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQsIHdoaWNoIGFyZTogYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AsIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLiBJdCYjMzk7cyB3b3J0aCBpbmNsdWRpbmcgYGJwZl9pcHY0X2ZpYl9sb29rdXBgIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAgYmVjYXVzZSB0aGV5JiMzOTtyZSBzcGVjaWZpYyB0byBCUEYgRklCIGxvb2t1cHMsIHdoaWNoIGRpZmZlcmVudGlhdGVzIHRoZW0gZnJvbSB0aGUgZ2VuZXJhbCBJUHY0L0lQdjYgcm91dGluZyBsb29rdXBzLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQgaGVyZSBhcmUgYFZMQU5fODAyMVFgLCBgSU5FVGAsIGFuZCBgSVBWNmAuIFdoaWxlIGBJTkVUYCBhbmQgYElQVjZgIGFyZSBzdGFuZGFyZCwgaW5jbHVkaW5nIHRoZW0gZG9lc24mIzM5O3QgaHVydC4gSG93ZXZlciwgYFZMQU5fODAyMVFgIGlzIHRoZSBtb3N0IHNwZWNpZmljLiBMZXQgbWUgZG91YmxlIGNoZWNrIGlmIGFueSBvdGhlciBjb25maWdzIGFyZSBiZWluZyB1c2VkLiBPa2F5LCBqdXN0IGBDT05GSUdfVkxBTl84MDIxUWAuIEdvb2QuCgpUaGUgcGF0Y2gmIzM5O3MgY29yZSBpbXBhY3QgaXMgYWRkaW5nIFZMQU4gc3VwcG9ydCB0byBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAsIGltcGxlbWVudGluZyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBpcyBuZXR3b3JraW5nIGFuZCBCUEYgY29yZSBsb2dpYywgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IHNpbmNlIHN5emthbGxlciBjYW4gcmVhY2ggaXQuIEkgdGhpbmsgdGhlIG9yaWdpbmFsIGxpc3Qgb2YgZm9jdXMgZnVuY3Rpb25zIGlzIGFwcHJvcHJpYXRlLCBzbyB0aGUgbGlzdCByZW1haW5zOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl9zZXRfZndkX3BhcmFtcyYjMzQ7LAogICAgJiMzNDticGZfZmliX2xvb2t1cF9mbGFnc19vayYjMzQ7LAogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXJzIChgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCB0byBoYW5kbGUgVkxBTiBlZ3Jlc3MgYW5kIGluZ3Jlc3MgcmVzb2x1dGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBjYW4gYmUgZnV6emVkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZmliX3ZsYW5faW5wdXRfZGV2JiMzNDssCiAgICAmIzM0O2JwZl9maWJfc2V0X2Z3ZF9wYXJhbXMmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2smIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMTo1NjowNy40OTY3MzQ2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI0NTI2MzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpYl92bGFuX2lucHV0X2RldlwiLFxuICAgIFwiYnBmX2ZpYl9zZXRfZndkX3BhcmFtc1wiLFxuICAgIFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjA3LjQ5Njc0MDE3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0ODQxNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGE3ZjFmYTA4ZGNlMWUxYzI1NDAwYmUwZjNjZjExZGIzMGM5ZGMxYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMTo1NjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZmYwMzAxOWFiZTM1NTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTM1MzIsNiArMzUzMiw0NyBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqXFx0XFx0XFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXFx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxcbiAgKlxcdFxcdFxcdFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCxcXG4gICpcXHRcXHRcXHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXFxuKyAqXFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcXG4rICpcXHRcXHRcXHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXFxuKyAqXFx0XFx0XFx0cGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0XFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxcbisgKlxcdFxcdFxcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzIGlmaW5kZXguICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxcbisgKlxcdFxcdFxcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cXG4rICpcXHRcXHRcXHRzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi1cXHUwMDNlc21hYyBpc1xcbisgKlxcdFxcdFxcdHRoZSBWTEFOIGRldmljZSdzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXFxuKyAqXFx0XFx0XFx0cGFyZW50J3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XFxuKyAqXFx0XFx0XFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxcbisgKlxcdFxcdFxcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xcbisgKlxcdFxcdFxcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVxcdTAwM2VpZmluZGV4XFxuKyAqXFx0XFx0XFx0bGVmdCBhdCB0aGUgaW5wdXQuIFRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cXG4rICpcXHRcXHRcXHRpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0XFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiosIHJlLWluaXRpYWxpemluZyAqcGFyYW1zKlxcbisgKlxcdFxcdFxcdGZpcnN0OiBvdXRwdXQgZmllbGRzIG92ZXJ3cml0ZSB0aGUgaW5wdXRzIHRoZXkgc2hhcmVcXG4rICpcXHRcXHRcXHRzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcXG4rICpcXHRcXHRcXHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxcbisgKlxcdFxcdFxcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XFxuKyAqXFx0XFx0XFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVxcdTAwM2VtdHVfcmVzdWx0LlxcbisgKlxcdFxcdFxcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXFxuKyAqXFx0XFx0XFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlIGRpcmVjdGx5LlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXFxuKyAqXFx0XFx0XFx0VHJlYXQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0lcXG4rICpcXHRcXHRcXHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xcbisgKlxcdFxcdFxcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcXG4rICpcXHRcXHRcXHRvbiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxcbisgKlxcdFxcdFxcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxcbisgKlxcdFxcdFxcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXFxuKyAqXFx0XFx0XFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cXG4rICpcXHRcXHRcXHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xcbisgKlxcdFxcdFxcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxcbisgKlxcdFxcdFxcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cXG4gICpcXG4gICpcXHRcXHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxcbiAgKlxcdFxcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxcbkBAIC03MzI3LDYgKzczNjgsOCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAzKSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA0KSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA1KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gfTtcXG4gXFxuIGVudW0ge1xcbkBAIC03MzQwLDYgKzczODMsNyBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xcbiBcXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cXG4rXFx0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xcbkBAIC03MzkzLDcgKzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG4gXFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0Lyogb3V0cHV0ICovXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxcbitcXHRcXHRcXHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcXG4rXFx0XFx0XFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXFxuK1xcdFxcdFxcdCAqIHRoZSBsb29rdXAgYnkuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fcHJvdG87XFxuIFxcdFxcdFxcdF9fYmUxNlxcdGhfdmxhbl9UQ0k7XFxuIFxcdFxcdH07XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC02MjAxLDIxICs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxcbitzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxcbiB7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IDA7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXFx1MDAyNlxcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXFx1MDAzZXJlYWxfZGV2O1xcbitcXG4rXFx0XFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkge1xcbitcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcmVhbF9kZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKG10dSlcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxcbit7XFxuK1xcdF9fYmUxNiBwcm90byA9IHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XFxuK1xcdHUxNiB2aWQ7XFxuK1xcbitcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFxcdTAwMjZcXHUwMDI2IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0dmlkID0gbnRvaHMocGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJKSBcXHUwMDI2IFZMQU5fVklEX01BU0s7XFxuK1xcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxuK1xcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHx8XFxuK1xcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiB2bGFuX2RldjtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0XFx0ICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpXFxuIHtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcXG4gXFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcXG4gXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbkBAIC02MjI5LDYgKzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdGlmICh1bmxpa2VseSghZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldik7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cXG4gXFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbiBcXHRpZiAodW5saWtlbHkoIWluX2RldiB8fCAhSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkpXFxuQEAgLTYyMzgsNyArNjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSAxO1xcbiBcXHRcXHRmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGRldi1cXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxcbitcXHRcXHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xcbiBcXHR9XFxuIFxcdGZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy1cXHUwMDNldG9zKTtcXG5AQCAtNjM0Nyw3ICs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdG1lbWNweShwYXJhbXMtXFx1MDAzZXNtYWMsIGRldi1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4gXFxuIHNldF9md2RfcGFyYW1zOlxcbi1cXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XFxuK1xcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTYzNTcsNiArNjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXFx1MDAzZWlwdjZfc3JjO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVxcdTAwM2VpcHY2X2RzdDtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBmaWI2X3Jlc3VsdCByZXMgPSB7fTtcXG4gXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuQEAgLTYzNzQsNiArNjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0aWYgKHVubGlrZWx5KCFkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxuK1xcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcXG4rXFx0XFx0aWYgKCFkZXYpXFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcXG4rXFx0fVxcbitcXG4gXFx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XFxuIFxcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5mb3J3YXJkaW5nKSkpXFxuIFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDtcXG5AQCAtNjM4Miw3ICs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRcXHRmbDYuZmxvd2k2X2lpZiA9IDE7XFxuIFxcdFxcdG9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRvaWYgPSBmbDYuZmxvd2k2X2lpZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZGV2LVxcdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVxcdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG9pZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XFxuIFxcdFxcdGZsNi5mbG93aTZfb2lmID0gMDtcXG4gXFx0XFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcXG4gXFx0fVxcbkBAIC02NDg2LDEzICs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VzbWFjLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbiBzZXRfZndkX3BhcmFtczpcXG4tXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xcbitcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXFxcXG4gXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXFxcXG4tXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxcbitcXHRcXHRcXHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxcXFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpXFxuK1xcbitzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGZsYWdzIFxcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gXFxuIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXFxuQEAgLTY1MDAsNyArNjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHRpZiAocGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcXG4rXFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0c3dpdGNoIChwYXJhbXMtXFx1MDAzZWZhbWlseSkge1xcbkBAIC02NTM4LDcgKzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFx0aWYgKHBsZW4gXFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKHBhcmFtcy1cXHUwMDNldG90X2xlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmZmMDMwMTlhYmUzNTU0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0zNTMyLDYgKzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKlxcdFxcdFxcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVxcdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cXG4gICpcXHRcXHRcXHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXFxuICAqXFx0XFx0XFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXFxuKyAqXFx0XFx0XFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxcbisgKlxcdFxcdFxcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxcbisgKlxcdFxcdFxcdCpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGZyb21cXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggd2l0aCB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcXG4rICpcXHRcXHRcXHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXFxuKyAqXFx0XFx0XFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXFx1MDAzZXNtYWMgaXNcXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxcbisgKlxcdFxcdFxcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcXG4rICpcXHRcXHRcXHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcXG4rICpcXHRcXHRcXHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleFxcbisgKlxcdFxcdFxcdGxlZnQgYXQgdGhlIGlucHV0LiBUbyBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXFxuKyAqXFx0XFx0XFx0aWZpbmRleCwgcmVwZWF0IHRoZSBsb29rdXAgd2l0aG91dFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqLCByZS1pbml0aWFsaXppbmcgKnBhcmFtcypcXG4rICpcXHRcXHRcXHRmaXJzdDogb3V0cHV0IGZpZWxkcyBvdmVyd3JpdGUgdGhlIGlucHV0cyB0aGV5IHNoYXJlXFxuKyAqXFx0XFx0XFx0c3RvcmFnZSB3aXRoLiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXFxuKyAqXFx0XFx0XFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcXG4rICpcXHRcXHRcXHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxcbisgKlxcdFxcdFxcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cXHUwMDNlbXR1X3Jlc3VsdC5cXG4rICpcXHRcXHRcXHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xcbisgKlxcdFxcdFxcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSBkaXJlY3RseS5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxcbisgKlxcdFxcdFxcdFRyZWF0ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJXFxuKyAqXFx0XFx0XFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcXG4rICpcXHRcXHRcXHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXFxuKyAqXFx0XFx0XFx0b24gKnBhcmFtcyotXFx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxcbisgKlxcdFxcdFxcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcXG4rICpcXHRcXHRcXHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcXG4rICpcXHRcXHRcXHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxcbisgKlxcdFxcdFxcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXFxuKyAqXFx0XFx0XFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcXG4rICpcXHRcXHRcXHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcXG4rICpcXHRcXHRcXHQocmV0dXJucyAqKi1FSU5WQUwqKikuXFxuICAqXFxuICAqXFx0XFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcXG4gICpcXHRcXHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cXG5AQCAtNzMyNyw2ICs3MzY4LDggQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgMyksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNCksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNSksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNiksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNyksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5AQCAtNzM0MCw2ICs3MzgzLDcgQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXFxuK1xcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG5AQCAtNzM5Myw3ICs3NDM3LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XFxuIFxcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdC8qIG91dHB1dCAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcXG4rXFx0XFx0XFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXFxuK1xcdFxcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxcbitcXHRcXHRcXHQgKiB0aGUgbG9va3VwIGJ5LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0X19iZTE2XFx0aF92bGFuX3Byb3RvO1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fVENJO1xcbiBcXHRcXHR9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uZjczNjFmOWEzNDU5MmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZi5oXFx1MDAzZVxcbiBcXG5AQCAtMjMsNiArMjQsNyBAQFxcbiAjZGVmaW5lIElQVjRfVEJJRF9BRERSXFx0XFx0XFxcIjE3Mi4wLjAuMjU0XFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9ORVRcXHRcXHRcXFwiMTcyLjAuMC4wXFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcXHRcXHRcXFwiMTcyLjAuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVFxcdFxcXCIxNzIuMC4wLjVcXFwiXFxuICNkZWZpbmUgSVBWNl9UQklEX0FERFJcXHRcXHRcXFwiZmQwMDo6RkZGRlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfTkVUXFx0XFx0XFxcImZkMDA6OlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXFx0XFx0XFxcImZkMDA6OjJcXFwiXFxuQEAgLTM3LDYgKzM5LDQxIEBAXFxuICNkZWZpbmUgSVBWNl9MT0NBTFxcdFxcdFxcXCJmZDAxOjozXFxcIlxcbiAjZGVmaW5lIElQVjZfR1cxXFx0XFx0XFxcImZkMDE6OjFcXFwiXFxuICNkZWZpbmUgSVBWNl9HVzJcXHRcXHRcXFwiZmQwMTo6MlxcXCJcXG4rI2RlZmluZSBWTEFOX0lEXFx0XFx0XFx0MTAwXFxuKyNkZWZpbmUgVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9JRF9ET1dOXFx0XFx0MTAyXFxuKyNkZWZpbmUgVkxBTl9JRkFDRV9ET1dOXFx0XFx0XFxcInZldGgxLjEwMlxcXCJcXG4rI2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXFx0XFxcInZldGgxLjIwMFxcXCJcXG4rI2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXFx0XFxcInZldGgxLjIwMC4zMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9UQUJMRVxcdFxcdFxcXCIzMDBcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcXHRcXFwiMTAuNS4wLjI1NFxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCIxMC41LjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXFx0XFx0XFxcIjEwLjcuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9EU1RcXHRcXHRcXFwiMTAuNi4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0dXXFx0XFx0XFxcIjEwLjUuMC4xXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXFx0XFxcImZkMDI6OjI1NFxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCJmZDAyOjoyXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcXHRcXHRcXFwiZmQwMzo6MlxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fR1dcXHRcXHRcXFwiZmQwMjo6MVxcXCJcXG4rI2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcXHRcXHQ5OTlcXG4rI2RlZmluZSBWUkZfSUZBQ0VcXHRcXHRcXFwidnJmLWJsdWVcXFwiXFxuKyNkZWZpbmUgVlJGX1RBQkxFXFx0XFx0XFxcIjEwMDBcXFwiXFxuKyNkZWZpbmUgVlJGX1ZMQU5fSURcXHRcXHQxMDFcXG4rI2RlZmluZSBWUkZfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDFcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlxcdFxcXCIxMC44LjAuMjU0XFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0dXXFx0XFx0XFxcIjEwLjguMC4xXFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0RTVFxcdFxcdFxcXCIxMC45LjAuMlxcXCJcXG4rI2RlZmluZSBUQklEX1ZMQU5fSURcXHRcXHQ1MFxcbisjZGVmaW5lIFRCSURfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMi41MFxcXCJcXG4rI2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcXHRcXFwiMTcyLjIuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFxcdFxcXCIxMC4xMS4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcXHRcXFwiMTAuNS45LjJcXFwiXFxuKyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXFx0XFx0MjAwXFxuKyNkZWZpbmUgUUlOUV9JTk5FUl9WTEFOX0lEXFx0MzAwXFxuKyNkZWZpbmUgQk9ORF9JRkFDRVxcdFxcdFxcXCJib25kOTlcXFwiXFxuKyNkZWZpbmUgQk9ORF9QT1JUXFx0XFx0XFxcInZldGgzXFxcIlxcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXFx0XFx0XFxcInZldGg0XFxcIlxcbisjZGVmaW5lIEJPTkRfVkxBTl9JRFxcdFxcdDUwMFxcbiAjZGVmaW5lIERNQUNcXHRcXHRcXHRcXFwiMTE6MTE6MTE6MTE6MTE6MTFcXFwiXFxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxcbiAjZGVmaW5lIERNQUMyXFx0XFx0XFx0XFxcIjAxOjAxOjAxOjAxOjAxOjAxXFxcIlxcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcXG4gXFx0X191MzIgdGJpZDtcXG4gXFx0X191OCBkbWFjWzZdO1xcbiBcXHRfX3UzMiBtYXJrO1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnXFxuK1xcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxcbitcXHQgKi9cXG4rXFx0X191MTYgdmxhbl9wcm90bztcXG4rXFx0X191MTYgdmxhbl9pZDtcXG4rXFx0Ym9vbCBjaGVja192bGFuO1xcbitcXHRjb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy1cXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cXG4rXFx0Y29uc3QgY2hhciAqaWlmO1xcdCAgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmV0aDEgaW5wdXQgZGV2aWNlICovXFxuK1xcdF9fdTE2IHRvdF9sZW47XFx0XFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xcbitcXHRfX3UxNiBleHBlY3RlZF9tdHU7XFx0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xcbkBAIC03OSw2ICsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcXG4gXFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcXG4gXFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XFxuK1xcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcXG4rXFx0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xcbitcXHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcXG4rXFx0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMlxcXCIsIH0sXFxuIFxcdHsgLmRlc2MgPSBcXFwiSVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXFxcIixcXG4gXFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XFxuIFxcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfR1cxLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbiBcXHQgIC5tYXJrID0gTUFSSywgfSxcXG4rXFx0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xcbitcXHQvKlxcbitcXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXFxuK1xcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxcbitcXHQgKiB4bWl0LWNhcGFibGUgaWZpbmRleDsgbm8gU1VDQ0VTUyBldmVyIHJldHVybnMgYSBWTEFOLWRldmljZVxcbitcXHQgKiBpZmluZGV4LiBSZWR1Y2libGUgYXJtcyBwaW4gaWZpbmRleCA9PSB0aGUgcGh5c2ljYWwgcGFyZW50OyB0aGVcXG4rXFx0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXFx1MDAzZWlmaW5kZXhcXG4rXFx0ICogbGVmdCBhdCB0aGUgaW5wdXQsIHNvIGEgcmVncmVzc2lvbiB0byBiZXN0LWVmZm9ydCAoU1VDQ0VTUyArIHRoZVxcbitcXHQgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS5cXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgbm8gZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHQvKlxcbitcXHQgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJ3MgbXR1XFxuK1xcdCAqICgxNDAwKSwgbm90IHRoZSBwYXJlbnQncyAoMTUwMClcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSdzIHdpdGhvdXQgdGhlIGZsYWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9OVURfRkFJTEVEX0FERFIsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgUWluUSBub3QgcmVkdWNpYmxlIChWTEFOX0ZBSUxVUkUpXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxcbitcXHQgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFFpblEgZWdyZXNzIHdpdGhvdXQgdGhlIGZsYWcgKGVzY2FwZSBoYXRjaClcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBuZWlnaGJvdXIgb24gdGhlIFZMQU4gZGV2aWNlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTixcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmlpZiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9CT05EX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MgdmlhIFRCSUQgdGFibGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnRiaWQgPSAxMDAsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMlxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBzdWNjZXNzIHdyaXRlcyBtdHVfcmVzdWx0IHdpdGggdGhlIHN3YXBcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsXFxuK1xcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0LyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjYgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsXFxuK1xcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVULFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9zcmMgPSBJUFY0X1ZMQU5fSUZBQ0VfQUREUixcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlXFxuK1xcdCAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3RcXG4rXFx0ICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgVlJGIHN1YmludGVyZmFjZSwgbm8gZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgRElSRUNUIHVzZXMgVlJGIHRhYmxlIGZyb20gcmVzb2x2ZWQgaW5ncmVzc1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIGZhaWx1cmUgYXJtcyBhbHNvIGFzc2VydCBwYXJhbXMgaXMgbGVmdCB1bnRvdWNoZWQ6IGlmaW5kZXggc3RpbGxcXG4rXFx0ICogbmFtZXMgdGhlIHBoeXNpY2FsIGRldmljZSBhbmQgdGhlIGlucHV0IHRhZyBieXRlcyBzdXJ2aXZlXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHN1YmludGVyZmFjZSBkb3duXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXFxuK1xcdC8qXFxuK1xcdCAqIHRoZSByZXNvbHZlciBydW5zIGJlZm9yZSB0aGUgZm9yd2FyZGluZyBjaGVjaywgc28gb24gZGV2aWNlc1xcbitcXHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcXG4rXFx0ICogcmVzb2x2ZWQgdG8gdGhhdCBkZXZpY2UgYW5kIHRoZSBsb29rdXAgdXNlZCBpdCBhcyBpbmdyZXNzXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxQUQsIC52bGFuX2lkID0gUUlOUV9BRF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgUENQIGFuZCBERUkgYml0cyBpZ25vcmVkIGluIFRDSVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBpbm5lciBRaW5RIGRldmljZSBmcm9tIFZMQU4gaWZpbmRleFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxcbitcXHQgIC5paWYgPSBRSU5RX09VVEVSX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFFJTlFfSU5ORVJfVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXFxuK1xcdCAqIGZyYW1lIGlzIHN0ZWVyZWQgdG8gdGhlIG1hc3RlciBiZWZvcmUgVkxBTiBwcm9jZXNzaW5nOyBhIHBvcnRcXG4rXFx0ICogaWZpbmRleCBkb2VzIG5vdCBtYXRjaCAocG9ydHMgY2FycnkgdmlkIHN0YXRlIGJ1dCBubyBWTEFOIGRldnMpXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXFxuK1xcdCAgLmlpZiA9IEJPTkRfSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgVklEIDAgcHJpb3JpdHkgdGFnIGZhaWxzIGNsb3NlZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJ1bmtub3duIGZsYWcgYml0IHJlamVjdGVkXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gKDEgXFx1MDAzY1xcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIE9VVFBVVFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxcbkBAIC0yMDQsNiArNDc1LDEwNSBAQCBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXFxuIFxcdFNZUyhmYWlsLCBcXFwiaXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcXFwiLCBNQVJLLCBNQVJLX1RBQkxFKTtcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1xcXCIsIE1BUkssIE1BUktfVEFCTEUpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0dXAgZm9yIHZsYW4gdGVzdHM6IGEgc3ViaW50ZXJmYWNlIGZvciBlZ3Jlc3MgcmVzb2x1dGlvbiBhbmRcXG4rXFx0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcXG4rXFx0ICogb2JzZXJ2ZSB3aGljaCBkZXZpY2UgdGhlIGxvb2t1cCB1c2VkIGFzIGluZ3Jlc3MuXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVkxBTl9JRkFDRSk7XFxuK1xcdC8qXFxuK1xcdCAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGVcXG4rXFx0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUsIHdoaWNoIHRoZVxcbitcXHQgKiBuby1mbGFnIGFybSBiZWxvdyBwaW5zXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyBtdHUgMTQwMFxcXCIsIFZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIElQVjRfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBhZGRyIGFkZCAlcy82NCBkZXYgJXMgbm9kYWRcXFwiLCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXFxuK1xcdCAqIGluZ3Jlc3MgdHJlYXRzIGEgZnJhbWUgYXJyaXZpbmcgb24gYSBkb3duIFZMQU4gZGV2aWNlIChkcm9wKVxcbitcXHQgKi9cXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcXG4rXFxuK1xcdGVyciA9IHdyaXRlX3N5c2N0bChcXFwiL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXFxcIiBWTEFOX0lGQUNFIFxcXCIvZm9yd2FyZGluZ1xcXCIsIFxcXCIxXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlxcXCIgVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVyciA9IHdyaXRlX3N5c2N0bChcXFwiL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvXFxcIiBWTEFOX0lGQUNFIFxcXCIvZm9yd2FyZGluZ1xcXCIsIFxcXCIxXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIndyaXRlX3N5c2N0bChuZXQuaXB2Ni5jb25mLlxcXCIgVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMFxcXCIsXFxuK1xcdCAgICBRSU5RX09VVEVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMgdHlwZSB2bGFuIGlkIDMwMFxcXCIsXFxuK1xcdCAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBRSU5RX09VVEVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzXFxcIiwgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcXFwiLCBJUFY0X1ZMQU5fRFNULCBJUFY0X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXFxcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXNcXFwiLCBJUFY2X1ZMQU5fRFNULCBJUFY2X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgLTYgcm91dGUgYWRkIHRhYmxlICVzICVzLzEyOCB2aWEgJXNcXFwiLFxcbitcXHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1xcXCIsIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xcbitcXG4rXFx0LyogYSBib25kIHdpdGggb25lIHBvcnQgYW5kIGEgVkxBTiBvbiB0aGUgYm9uZCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFxcXCIsIEJPTkRfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcXFwiLCBCT05EX1BPUlQsIEJPTkRfUE9SVF9QRUVSKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcXFwiLCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIEJPTkRfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIEJPTkRfUE9SVCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBCT05EX0lGQUNFLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQsIEJPTkRfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzLiVkIHVwXFxcIiwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkXFxcIixcXG4rXFx0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGEgVlJGIHdpdGggaXRzIG93biBkZWRpY2F0ZWQgc3ViaW50ZXJmYWNlICh0aGUgaWlmIHJ1bGVzIGFib3ZlXFxuK1xcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcXFwiLCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVlJGX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIFZSRl9WTEFOX0lGQUNFLCBWUkZfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgJXMgbWFzdGVyICVzXFxcIiwgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVlJGX1ZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIElQVjRfVlJGX0lGQUNFX0FERFIsIFZSRl9WTEFOX0lGQUNFKTtcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cXFwiIFZSRl9WTEFOX0lGQUNFIFxcXCIvZm9yd2FyZGluZ1xcXCIsIFxcXCIxXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlxcXCIgVlJGX1ZMQU5fSUZBQ0UgXFxcIi5mb3J3YXJkaW5nKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1xcXCIsIElQVjRfVlJGX0RTVCwgSVBWNF9HVzEpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcXFwiLFxcbitcXHQgICAgVlJGX1RBQkxFLCBJUFY0X1ZSRl9EU1QsIElQVjRfVlJGX0dXKTtcXG4rXFxuK1xcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvXFxcIiBWTEFOX0lGQUNFIFxcXCIvZ2Nfc3RhbGVfdGltZVxcXCIsIFxcXCI5MDBcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlxcXCIgVkxBTl9JRkFDRSBcXFwiLmdjX3N0YWxlX3RpbWUpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcXFwiLFxcbitcXHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTtcXG4rXFxuK1xcdC8qIGEgVkxBTiBvbiB2ZXRoMiB3aXRoIGEgcm91dGUgaW4gdGhlIHRiaWQgdGVzdCB0YWJsZSAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFRCSURfVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlIDEwMCAlcy8zMiBkZXYgJXNcXFwiLFxcbitcXHQgICAgSVBWNF9UQklEX1ZMQU5fRFNULCBUQklEX1ZMQU5fSUZBQ0UpO1xcbitcXG4rXFx0LyogYSBsb2NrZWQtbXR1IHJvdXRlIHZpYSB0aGUgc3ViaW50ZXJmYWNlIGZvciB0aGUgRlJBR19ORUVERUQgY2FzZSAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMgbXR1IGxvY2sgMTAwMFxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gZmFpbDpcXG4gXFx0cmV0dXJuIC0xO1xcbkBAIC0yMTgsOSArNTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdG1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7XFxuIFxcbiBcXHRwYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuLVxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IGlmaW5kZXg7XFxuK1xcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHRlc3QtXFx1MDAzZWlpZiA/IGlmX25hbWV0b2luZGV4KHRlc3QtXFx1MDAzZWlpZikgOiBpZmluZGV4O1xcbiBcXHRwYXJhbXMtXFx1MDAzZXRiaWQgPSB0ZXN0LVxcdTAwM2V0YmlkO1xcbiBcXHRwYXJhbXMtXFx1MDAzZW1hcmsgPSB0ZXN0LVxcdTAwM2VtYXJrO1xcbitcXHRwYXJhbXMtXFx1MDAzZXRvdF9sZW4gPSB0ZXN0LVxcdTAwM2V0b3RfbGVuO1xcbitcXG4rXFx0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXFxuK1xcdGlmICh0ZXN0LVxcdTAwM2Vsb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cXHUwMDNldmxhbl9wcm90byk7XFxuK1xcdFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHRlc3QtXFx1MDAzZXZsYW5faWQpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVxcdTAwM2VkYWRkciwgcGFyYW1zLVxcdTAwM2VpcHY2X2RzdCkgPT0gMSkge1xcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xcbkBAIC0yOTgsNyArNjc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcXG4gXFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XFxuLVxcdGludCBwcm9nX2ZkLCBlcnIsIHJldCwgaTtcXG4rXFx0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XFxuIFxcbiBcXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cXHUwMDNlZGF0YSwgc29cXG4gXFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cXG5AQCAtMzA5LDExICs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0ICAgIC5jdHhfaW4gPSBcXHUwMDI2c2tiLFxcbiBcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXFxuIFxcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0KTtcXG4gXFxuIFxcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XFxuIFxcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuX2FuZF9sb2FkXFxcIikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcXG4rXFx0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcXG4gXFxuIFxcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVEVTVCk7XFxuIFxcbkBAIC0zNDMsNiArNzI1LDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXFxuIFxcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHNcXFwiKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXFxuK1xcdFxcdCAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgXFxcInRjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTlxcXCIpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcXG4gXFx0XFx0XFx0ICBcXFwiZmliX2xvb2t1cF9yZXRcXFwiKTtcXG4gXFxuQEAgLTM1Miw2ICs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcXG4gXFx0XFx0XFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xcbiBcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSwgXFxcImlmaW5kZXhcXFwiKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXFxuK1xcdFxcdFxcdFxcdCAgXFxcIm10dV9yZXN1bHRcXFwiKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCAgaHRvbnModGVzdHNbaV0udmxhbl9wcm90byksIFxcXCJoX3ZsYW5fcHJvdG9cXFwiKTtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksXFxuK1xcdFxcdFxcdFxcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFxcXCJoX3ZsYW5fVENJXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVxcdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xcbiBcXHRcXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFxcXCJkbWFjIG5vdCBtYXRjaFxcXCIpKSB7XFxuIFxcdFxcdFxcdGNoYXIgZXhwZWN0ZWRbMThdLCBhY3R1YWxbMThdO1xcbkBAIC0zNjEsMTcgKzc2OCwzMjIgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCJkbWFjIGV4cGVjdGVkICVzIGFjdHVhbCAlcyBcXFwiLCBleHBlY3RlZCwgYWN0dWFsKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLlxcbi1cXHRcXHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGVuc3VyZSB0YmlkIGlzIHplcm8nZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxcbitcXHRcXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIHRoZSB1bmlvbiBob2xkcyB0aGUgcGFja2VkIHZsYW5cXG4rXFx0XFx0ICogZmllbGRzIGluc3RlYWQsIHNvIHNraXAgdGhlIGNoZWNrIGZvciB0aG9zZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICgodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgISh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSkge1xcbiBcXHRcXHRcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXMudGJpZCwgMCxcXG4gXFx0XFx0XFx0XFx0XFx0XFxcImV4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXFxcIikpXFxuIFxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSZS1ydW4gdGhlIGNhc2VzIHRocm91Z2ggYnBmX3hkcF9maWJfbG9va3VwKCkuIHRlc3RfcnVuIHVzZXMgdGhlXFxuK1xcdCAqIGN1cnJlbnQgbmV0bnMnIGxvb3BiYWNrIGZvciBjdHgtXFx1MDAzZXJ4cS1cXHUwMDNlZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVFxcbitcXHQgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0c1xcbitcXHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxcbitcXHQgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCBcXHUwMDI2dGVzdHNbaV0sIHNrYi5pZmluZGV4KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbG9va3VwX2ZsYWdzID0gdGVzdHNbaV0ubG9va3VwX2ZsYWdzO1xcbitcXG4rXFx0XFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFxcdTAwMjZ4ZHBfb3B0cyk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInhkcCB0ZXN0X3J1blxcXCIpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJ4ZHAgZmliX2xvb2t1cF9yZXRcXFwiKSlcXG4rXFx0XFx0XFx0cHJpbnRmKFxcXCIoeGRwKSAlc1xcXFxuXFxcIiwgdGVzdHNbaV0uZGVzYyk7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLFxcbitcXHRcXHRcXHRcXHQgIFxcXCJ4ZHAgaWZpbmRleFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcXG4rXFx0XFx0XFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXFxcInhkcCBoX3ZsYW5fcHJvdG9cXFwiKTtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksXFxuK1xcdFxcdFxcdFxcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFxcXCJ4ZHAgaF92bGFuX1RDSVxcXCIpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy1cXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHJldCwgMCwgXFxcInhkcCBkbWFjXFxcIik7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBtdHVfcmVzdWx0IGZyb20gYSB0b3RfbGVuIGxvb2t1cCBpcyB0aGUgcm91dGUgbXR1IGFuZCBpc1xcbitcXHRcXHQgKiBwYXRoLWluZGVwZW5kZW50OyB0aGUgbm8tdG90X2xlbiBhcm0gcmVhZHMgZGV2LVxcdTAwM2VtdHUgYW5kIGlzXFxuK1xcdFxcdCAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUgXFx1MDAyNlxcdTAwMjYgdGVzdHNbaV0udG90X2xlbilcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwieGRwIG10dV9yZXN1bHRcXFwiKTtcXG4rXFx0fVxcbitcXG4gZmFpbDpcXG4gXFx0aWYgKG5zdG9rZW4pXFxuIFxcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbiBcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19URVNUKTtcXG4gXFx0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcXG4gfVxcbitcXG4rI2RlZmluZSBOU19WTEFOX0FcXHRcXFwiZmliX2xvb2t1cF92bGFuX25zX2FcXFwiXFxuKyNkZWZpbmUgTlNfVkxBTl9CXFx0XFxcImZpYl9sb29rdXBfdmxhbl9uc19iXFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9ORVROU19BRERSXFx0XFxcIjEwLjY2LjAuMVxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfRFNUXFx0XFxcIjEwLjY2LjAuMlxcXCJcXG4rXFxuKy8qXFxuKyAqIEEgVkxBTiBkZXZpY2UgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMgd2hpbGUgc3RheWluZyByZWdpc3RlcmVkXFxuKyAqIG9uIGl0cyBwYXJlbnQuIE5laXRoZXIgZGlyZWN0aW9uIG1heSB0aGVuIGNyb3NzIHRoZSBib3VuZGFyeTogdGhlXFxuKyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50J3MgaWZpbmRleCwgYW5kIHRoZVxcbisgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLlxcbisgKi9cXG4rdm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcXG4rXFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHJ1bl9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHRcXHQgICAgLmN0eF9pbiA9IFxcdTAwMjZza2IsXFxuK1xcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcXG4rXFx0KTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xcbitcXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xcbitcXHRmaWJfcGFyYW1zID0gXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX3BhcmFtcztcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVkxBTl9BKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19WTEFOX0IpO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9BKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zKGEpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgdmV0aDcgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoOFxcXCIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiB2ZXRoNyB1cFxcXCIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDcgbmFtZSB2ZXRoNy42NiB0eXBlIHZsYW4gaWQgNjZcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCB2ZXRoNy42NiBuZXRucyAlc1xcXCIsIE5TX1ZMQU5fQik7XFxuK1xcdC8qXFxuK1xcdCAqIHVwIGl0IGluIEIgYmVmb3JlIHRoZSBpbnB1dCBsb29rdXA6IHRoZSBtb3ZlIGNsb3NlZCBpdCwgYW5kIGFcXG4rXFx0ICogZG93biBkZXZpY2UgZmFpbHMgdGhlIHJlc29sdmVyIG9uIElGRl9VUCBiZWZvcmUgcmVhY2hpbmcgdGhlXFxuK1xcdCAqIG5ldG5zIGNoZWNrIHRoaXMgc3VidGVzdCBleGlzdHMgdG8gcGluXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIC1uICVzIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFxcXCIsIE5TX1ZMQU5fQik7XFxuK1xcbitcXHRwYXJlbnRfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXFxcInZldGg3XFxcIik7XFxuK1xcdGlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGlucHV0OiB0aGUgbW92ZWQgZGV2aWNlIGlzIHN0aWxsIGluIHZldGg3J3MgVkxBTiBncm91cCwgYnV0IGl0XFxuK1xcdCAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZFxcbitcXHQgKi9cXG4rXFx0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSBwYXJlbnRfaWR4O1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyg2Nik7XFxuK1xcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9kc3QpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihkc3QpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcXG4rXFx0XFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFxcdTAwMjZydW5fb3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfcnVuKGlucHV0KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0XFx0ICBcXFwiaW5wdXQgYWNyb3NzIG5ldG5zIGZhaWxzIGNsb3NlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCwgcGFyZW50X2lkeCwgXFxcImlmaW5kZXggdW50b3VjaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFxcXCJ0YWcgdW50b3VjaGVkXFxcIik7XFxuK1xcbitcXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9CKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zKGIpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGVncmVzczogdGhlIGZpYiByZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlIGhlcmUsIGJ1dCBpdHMgcGFyZW50XFxuK1xcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoNy42NlxcXCIsIElQVjRfVkxBTl9ORVROU19BRERSKTtcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKGZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXFxcInZldGg3LjY2XFxcIik7XFxuK1xcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGg3LjY2KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSB2bGFuX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9ORVROU19EU1QsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX05FVE5TX0FERFIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcXHUwMDI2eGRwX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihlZ3Jlc3MpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHRcXHQgIFxcXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxcbitcXHRcXHQgIFxcXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCAwLCBcXFwidmxhbiBmaWVsZHMgemVyb1xcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKG5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0EpO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0IpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcXG4rI2RlZmluZSBOU19SRURJUkVDVCBcXFwiZmliX2xvb2t1cF9yZWRpcmVjdF9uc1xcXCJcXG4rXFxuKy8qXFxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxcbisgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcXG4rICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcXG4rICogeGRwX2RvX3JlZGlyZWN0KCkgKyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xcbisgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcXG4rICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXFxuKyAqL1xcbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XFxuK1xcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcXG4rXFx0XFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxcbitcXHRcXHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1JFRElSRUNUKTtcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfUkVESVJFQ1QpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXFxcIm9wZW5fbmV0bnNcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRpZiAoc2V0dXBfbmV0bnMoKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXFxcInZldGgxXFxcIik7XFxuK1xcdHZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoMlxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEodmV0aDFfaWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDEpXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGgyKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpXFxuK1xcdCAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDIncyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zXFxuK1xcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cXG4rXFx0ICovXFxuK1xcdGVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnhkcF9jb3VudCksXFxuK1xcdFxcdFxcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMlxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdHhkcF9hdHRhY2hlZCA9IHRydWU7XFxuK1xcbitcXHQvKiByZWR1Y2libGUgVkxBTiBlZ3Jlc3M6IHJlc29sdmVzIHRvIHRoZSBwaHlzaWNhbCBwYXJlbnQgdmV0aDEgKi9cXG4rXFx0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9zcmMpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihzcmMpXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9FR1JFU1NfRFNULCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9kc3QpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihyZWR1Y2libGUgZHN0KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVkaXJlY3RlZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGFzc2VkID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkZWxpdmVyZWQgPSAwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXFx1MDAyNmxmX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihyZWR1Y2libGUgZWdyZXNzKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQsIFJFRElSRUNUX05QS1RTLCBcXFwicmVkdWNpYmxlIGVncmVzcyByZWRpcmVjdGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCwgMCwgXFxcInJlZHVjaWJsZSBlZ3Jlc3Mgbm90IHBhc3NlZFxcXCIpO1xcbitcXHRBU1NFUlRfR1Qoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkZWxpdmVyZWQsIDAsIFxcXCJyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXFxuK1xcdCAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXJcXG4rXFx0ICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlXFxuK1xcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XFxuK1xcdCAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMidzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxcbitcXHQgKiBhIHBhc3NlZCBmcmFtZSBjYW4gc3RpbGwgcmVhY2ggdmV0aDIgdGhyb3VnaCB0aGUgc3RhY2sncyBmb3J3YXJkaW5nXFxuK1xcdCAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC5cXG4rXFx0ICovXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfc3JjKSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24oc3JjKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9kc3QpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihxaW5xIGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCA9IDA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcXHUwMDI2bGZfb3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfcnVuKHFpbnEgZWdyZXNzKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCwgUkVESVJFQ1RfTlBLVFMsIFxcXCJxaW5xIGVncmVzcyBwYXNzZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVkaXJlY3RlZCwgMCwgXFxcInFpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkXFxcIik7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAoeGRwX2F0dGFjaGVkKVxcbitcXHRcXHRicGZfeGRwX2RldGFjaCh2ZXRoMl9pZHgsIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XFxuK1xcdGlmIChuc3Rva2VuKVxcbitcXHRcXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsIFxcXCIgTlNfUkVESVJFQ1QpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjM2YjcyMThkOWFlMmVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuQEAgLTQsNyArNCwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGt0X2Nscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTtcXG4gaW50IGZpYl9sb29rdXBfcmV0ID0gMDtcXG5AQCAtMTksNCArMjMsNTcgQEAgaW50IGZpYl9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIH1cXG4gXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXFx1MDAyNmZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSxcXG4rXFx0XFx0XFx0XFx0XFx0bG9va3VwX2ZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4raW50IHJlZGlyZWN0ZWQgPSAwO1xcbitpbnQgcGFzc2VkID0gMDtcXG4raW50IGRlbGl2ZXJlZCA9IDA7XFxuK1xcbitTRUMoXFxcInhkcFxcXCIpXFxuK2ludCBmaWJfbG9va3VwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtcztcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpO1xcbitcXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xcbitcXHRcXHRyZWRpcmVjdGVkKys7XFxuK1xcdFxcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xcbitcXHR9XFxuK1xcbitcXHRwYXNzZWQrKztcXG4rXFx0cmV0dXJuIFhEUF9QQVNTO1xcbit9XFxuK1xcbitTRUMoXFxcInhkcFxcXCIpXFxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XFxuK1xcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogY291bnQgb25seSB0aGUgdGVzdCdzIFRDUCBmcmFtZXM6IHRoZSBuZXRucyBoYXMgbGl2ZVxcbitcXHQgKiBsaW5rLWxvY2FsIHRyYWZmaWMgKERBRCwgTUxEKSB0aGF0IHdvdWxkIHNhdGlzZnkgYSBiYXJlXFxuK1xcdCAqIGNvdW50ZXJcXG4rXFx0ICovXFxuK1xcdGlmICgodm9pZCAqKShldGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdCAgICBldGgtXFx1MDAzZWhfcHJvdG8gIT0gYnBmX2h0b25zKEVUSF9QX0lQKSlcXG4rXFx0XFx0cmV0dXJuIFhEUF9EUk9QO1xcbitcXHRpcGggPSAodm9pZCAqKShldGggKyAxKTtcXG4rXFx0aWYgKCh2b2lkICopKGlwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0cmV0dXJuIFhEUF9EUk9QO1xcbitcXG4rXFx0ZGVsaXZlcmVkKys7XFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjA4LjAzMjQ0NjcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MDk1NDMwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIixcbiAgICBcImJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNcIixcbiAgICBcImJwZl9maWJfbG9va3VwX2ZsYWdzX29rXCIsXG4gICAgXCJicGZfeGRwX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9za2JfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2lwdjRfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2lwdjZfZmliX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVkxBTnMgaW4gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlcnMgKGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCkuIEl0IGludHJvZHVjZXMgbmV3IGZsYWdzIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIHRvIGhhbmRsZSBWTEFOIGVncmVzcyBhbmQgaW5ncmVzcyByZXNvbHV0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIGNhbiBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhN2YxZmEwOGRjZTFlMWMyNTQwMGJlMGYzY2YxMWRiMzBjOWRjMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMTo1NjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmZmMDMwMTlhYmUzNTU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgKzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbisgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbisgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4rICpcdFx0XHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuKyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuKyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbisgKlx0XHRcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuKyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuKyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4rICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbisgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBUbyBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXG4rICpcdFx0XHRpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0XG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiwgcmUtaW5pdGlhbGl6aW5nICpwYXJhbXMqXG4rICpcdFx0XHRmaXJzdDogb3V0cHV0IGZpZWxkcyBvdmVyd3JpdGUgdGhlIGlucHV0cyB0aGV5IHNoYXJlXG4rICpcdFx0XHRzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbisgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4rICpcdFx0XHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuKyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4rICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuKyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4rICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbisgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuKyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbisgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbisgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4rICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuKyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuKyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuKyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXIncyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbisgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbisgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4rICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuKyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgKzczNjgsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuK1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgKzczODMsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbitcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgKzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbitcdFx0XHQvKlxuK1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuK1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4rXHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4rXHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4rXHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbitcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNjIwMSwyMSArNjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxuK3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbitcdFx0XHRcdCAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleClcbiB7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IDA7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlcbitcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFx1MDAyNlx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS1cdTAwM2VyZWFsX2RldjtcbitcbitcdFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gdmxhbl9kZXZfdmxhbl9wcm90byhkZXYpO1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpbl9pZmluZGV4O1xuK1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcbitcdFx0fVxuK1x0fVxuKyNlbmRpZlxuK1xuIFx0aWYgKG10dSlcbiBcdFx0cGFyYW1zLVx1MDAzZW10dV9yZXN1bHQgPSBtdHU7IC8qIHVuaW9uIHdpdGggdG90X2xlbiAqL1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcbit7XG4rXHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2O1xuK1x0dTE2IHZpZDtcbitcbitcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkgXHUwMDI2XHUwMDI2IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0dmlkID0gbnRvaHMocGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xuK1x0dmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTtcbitcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuK1x0ICAgICFuZXRfZXEoZGV2X25ldCh2bGFuX2RldiksIGRldl9uZXQoZGV2KSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIHZsYW5fZGV2O1xuK31cbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0XHQgICAgICAgdTMyIGZsYWdzLCBib29sIGNoZWNrX210dSlcbiB7XG4rXHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMO1xuIFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcbkBAIC02MjI5LDYgKzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRpZiAodW5saWtlbHkoIWRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4rXHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuK1x0XHRpZiAoSVNfRVJSKGRldikpXG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbitcdFx0aWYgKCFkZXYpXG4rXHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xuK1x0fVxuK1xuIFx0LyogdmVyaWZ5IGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvbiB0aGlzIGludGVyZmFjZSAqL1xuIFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxuQEAgLTYyMzgsNyArNjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw0LmZsb3dpNF9paWYgPSAxO1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0Zmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbitcdFx0LypcbitcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuK1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IDA7XG4gXHR9XG4gXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXHUwMDNldG9zKTtcbkBAIC02MzQ3LDcgKzYzOTgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4rXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTYzNTcsNiArNjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9zcmM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfZHN0O1xuK1x0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdHN0cnVjdCBmaWI2X3Jlc3VsdCByZXMgPSB7fTtcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbkBAIC02Mzc0LDYgKzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRpZiAodW5saWtlbHkoIWRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4rXHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuK1x0XHRpZiAoSVNfRVJSKGRldikpXG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbitcdFx0aWYgKCFkZXYpXG4rXHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xuK1x0fVxuK1xuIFx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XG4gXHRpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5mb3J3YXJkaW5nKSkpXG4gXHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDtcbkBAIC02MzgyLDcgKzY0NDIsMTIgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNi5mbG93aTZfaWlmID0gMTtcbiBcdFx0b2lmID0gZmw2LmZsb3dpNl9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdG9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4rXHRcdC8qXG4rXHRcdCAqIGRldi1cdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcbitcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0b2lmID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdGZsNi5mbG93aTZfaWlmID0gb2lmO1xuIFx0XHRmbDYuZmxvd2k2X29pZiA9IDA7XG4gXHRcdHN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7XG4gXHR9XG5AQCAtNjQ4NiwxMyArNjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4rXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG4gfVxuICNlbmRpZlxuIFxuICNkZWZpbmUgQlBGX0ZJQl9MT09LVVBfTUFTSyAoQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgXFxcbiBcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0ggfCBCUEZfRklCX0xPT0tVUF9UQklEIHwgXFxcbi1cdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUkspXG4rXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXFxcbitcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxuK1xuK3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncylcbit7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoZmxhZ3MgXHUwMDI2IChCUEZfRklCX0xPT0tVUF9UQklEIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbiBcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdCAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncylcbkBAIC02NTAwLDcgKzY1NzgsNyBAQCBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdGlmIChwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbitcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xuQEAgLTY1MzgsNyArNjYxNiwxMCBAQCBCUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuK1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChwYXJhbXMtXHUwMDNldG90X2xlbilcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5mZjAzMDE5YWJlMzU1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzUzMiw2ICszNTMyLDQ3IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4rICpcdFx0XHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXG4rICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbisgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4rICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxuKyAqXHRcdFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbisgKlx0XHRcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cbisgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSdzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXG4rICpcdFx0XHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbisgKlx0XHRcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcbisgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuKyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cdTAwM2VpZmluZGV4XG4rICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gVG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxuKyAqXHRcdFx0aWZpbmRleCwgcmVwZWF0IHRoZSBsb29rdXAgd2l0aG91dFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiosIHJlLWluaXRpYWxpemluZyAqcGFyYW1zKlxuKyAqXHRcdFx0Zmlyc3Q6IG91dHB1dCBmaWVsZHMgb3ZlcndyaXRlIHRoZSBpbnB1dHMgdGhleSBzaGFyZVxuKyAqXHRcdFx0c3RvcmFnZSB3aXRoLiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4rICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuKyAqXHRcdFx0dGhlIGhlbHBlcidzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbisgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuKyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbisgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4rICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbisgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4rICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4rICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbisgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbisgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbisgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbisgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4rICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4rICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuKyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbisgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICs3MzY4LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICs3MzgzLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4rXHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICs3NDM3LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbitcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuK1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuK1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuK1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4rXHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuaW5kZXggYmQ3NjU4OTU4MDA0MWYuLmY3MzYxZjlhMzQ1OTJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbkBAIC0yLDYgKzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4gXG5AQCAtMjMsNiArMjQsNyBAQFxuICNkZWZpbmUgSVBWNF9UQklEX0FERFJcdFx0XCIxNzIuMC4wLjI1NFwiXG4gI2RlZmluZSBJUFY0X1RCSURfTkVUXHRcdFwiMTcyLjAuMC4wXCJcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCIxNzIuMC4wLjJcIlxuKyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcIjE3Mi4wLjAuNVwiXG4gI2RlZmluZSBJUFY2X1RCSURfQUREUlx0XHRcImZkMDA6OkZGRkZcIlxuICNkZWZpbmUgSVBWNl9UQklEX05FVFx0XHRcImZkMDA6OlwiXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwiZmQwMDo6MlwiXG5AQCAtMzcsNiArMzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCJmZDAxOjozXCJcbiAjZGVmaW5lIElQVjZfR1cxXHRcdFwiZmQwMTo6MVwiXG4gI2RlZmluZSBJUFY2X0dXMlx0XHRcImZkMDE6OjJcIlxuKyNkZWZpbmUgVkxBTl9JRFx0XHRcdDEwMFxuKyNkZWZpbmUgVkxBTl9JRkFDRVx0XHRcInZldGgxLjEwMFwiXG4rI2RlZmluZSBWTEFOX0lEX0RPV05cdFx0MTAyXG4rI2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCJ2ZXRoMS4xMDJcIlxuKyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCJ2ZXRoMS4yMDBcIlxuKyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCJ2ZXRoMS4yMDAuMzAwXCJcbisjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCIzMDBcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwiMTAuNS4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCIxMC41LjAuMlwiXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwiMTAuNy4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcIjEwLjYuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcIjEwLjUuMC4xXCJcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcImZkMDI6OjI1NFwiXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCJmZDAyOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCJmZDAzOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcImZkMDI6OjFcIlxuKyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuKyNkZWZpbmUgVlJGX0lGQUNFXHRcdFwidnJmLWJsdWVcIlxuKyNkZWZpbmUgVlJGX1RBQkxFXHRcdFwiMTAwMFwiXG4rI2RlZmluZSBWUkZfVkxBTl9JRFx0XHQxMDFcbisjZGVmaW5lIFZSRl9WTEFOX0lGQUNFXHRcdFwidmV0aDEuMTAxXCJcbisjZGVmaW5lIElQVjRfVlJGX0lGQUNFX0FERFJcdFwiMTAuOC4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZSRl9HV1x0XHRcIjEwLjguMC4xXCJcbisjZGVmaW5lIElQVjRfVlJGX0RTVFx0XHRcIjEwLjkuMC4yXCJcbisjZGVmaW5lIFRCSURfVkxBTl9JRFx0XHQ1MFxuKyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwidmV0aDIuNTBcIlxuKyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcIjE3Mi4yLjAuMlwiXG4rI2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwiMTAuMTEuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcIjEwLjUuOS4yXCJcbisjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbisjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRFx0MzAwXG4rI2RlZmluZSBCT05EX0lGQUNFXHRcdFwiYm9uZDk5XCJcbisjZGVmaW5lIEJPTkRfUE9SVFx0XHRcInZldGgzXCJcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXHRcdFwidmV0aDRcIlxuKyNkZWZpbmUgQk9ORF9WTEFOX0lEXHRcdDUwMFxuICNkZWZpbmUgRE1BQ1x0XHRcdFwiMTE6MTE6MTE6MTE6MTE6MTFcIlxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxuICNkZWZpbmUgRE1BQzJcdFx0XHRcIjAxOjAxOjAxOjAxOjAxOjAxXCJcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcbiBcdF9fdTMyIHRiaWQ7XG4gXHRfX3U4IGRtYWNbNl07XG4gXHRfX3UzMiBtYXJrO1xuK1x0LypcbitcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbitcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxuK1x0ICovXG4rXHRfX3UxNiB2bGFuX3Byb3RvO1xuK1x0X191MTYgdmxhbl9pZDtcbitcdGJvb2wgY2hlY2tfdmxhbjtcbitcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4rXHRjb25zdCBjaGFyICppaWY7XHQgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqL1xuK1x0X191MTYgdG90X2xlbjtcdFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xuK1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgKzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4gXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbitcdC8qXG4rXHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuK1x0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxuK1x0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xuK1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcbitcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgfSxcbiBcdHsgLmRlc2MgPSBcIklQdjYgVEJJRCBsb29rdXAgZmFpbHVyZVwiLFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4gXHQgIC5tYXJrID0gTUFSSywgfSxcbitcdC8qIHZsYW4gZWdyZXNzIHJlc29sdXRpb24gKi9cbitcdC8qXG4rXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXG4rXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIFNVQ0NFU1MgYWx3YXlzIGNhcnJpZXMgYSBwaHlzaWNhbCxcbitcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXG4rXHQgKiBpZmluZGV4LiBSZWR1Y2libGUgYXJtcyBwaW4gaWZpbmRleCA9PSB0aGUgcGh5c2ljYWwgcGFyZW50OyB0aGVcbitcdCAqIFFpblEgYW5kIGZvcmVpZ24tbmV0bnMgYXJtcyBwaW4gVkxBTl9GQUlMVVJFIHdpdGggcGFyYW1zLVx1MDAzZWlmaW5kZXhcbitcdCAqIGxlZnQgYXQgdGhlIGlucHV0LCBzbyBhIHJlZ3Jlc3Npb24gdG8gYmVzdC1lZmZvcnQgKFNVQ0NFU1MgKyB0aGVcbitcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0LypcbitcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UncyBtdHVcbitcdCAqICgxNDAwKSwgbm90IHRoZSBwYXJlbnQncyAoMTUwMClcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSdzIHdpdGhvdXQgdGhlIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCAuZXhwZWN0ZWRfbXR1ID0gMTQwMCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcIixcbitcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCxcbitcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlwiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuaWlmID0gVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzIG92ZXIgYSBib25kXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MgdmlhIFRCSUQgdGFibGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9UQklEX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnRiaWQgPSAxMDAsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgyXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBzdWNjZXNzIHdyaXRlcyBtdHVfcmVzdWx0IHdpdGggdGhlIHN3YXBcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIEZSQUdfTkVFREVEIHJlcG9ydHMgbXR1LCBzd2FwIHVud3JpdHRlblwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsXG4rXHQgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0LyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsXG4rXHQgIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogVlJGOiB0aGUgcmVzb2x2ZWQgc3ViaW50ZXJmYWNlIGlzIGVuc2xhdmVkLCBzbyB0aGUgbDNtZGV2IHJ1bGVcbitcdCAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3RcbitcdCAqIHRoZSBWUkYgdGFibGUgZnJvbSB0aGUgcmVzb2x2ZWQgaW5ncmVzc1xuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBWUkYgdGFibGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxuK1x0ICogbmFtZXMgdGhlIHBoeXNpY2FsIGRldmljZSBhbmQgdGhlIGlucHV0IHRhZyBieXRlcyBzdXJ2aXZlXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHN1YmludGVyZmFjZSBkb3duXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRF9ET1dOLCB9LFxuK1x0LypcbitcdCAqIHRoZSByZXNvbHZlciBydW5zIGJlZm9yZSB0aGUgZm9yd2FyZGluZyBjaGVjaywgc28gb24gZGV2aWNlc1xuK1x0ICogd2l0aCBmb3J3YXJkaW5nIG9mZiBGV0RfRElTQUJMRUQgKG5vdCBOT1RfRldERUQpIHByb3ZlcyB0aGUgdGFnXG4rXHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxQUQsIC52bGFuX2lkID0gUUlOUV9BRF9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAweGUwMDAgfCBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBpbm5lciBRaW5RIGRldmljZSBmcm9tIFZMQU4gaWZpbmRleFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4rXHQgIC5paWYgPSBRSU5RX09VVEVSX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxuK1x0LypcbitcdCAqIGJvbmRpbmc6IHRoZSBWTEFOcyBsaXZlIG9uIHRoZSBtYXN0ZXIsIGFzIG9uIHJlY2VpdmUsIHdoZXJlIHRoZVxuK1x0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxuK1x0ICogaWZpbmRleCBkb2VzIG5vdCBtYXRjaCAocG9ydHMgY2FycnkgdmlkIHN0YXRlIGJ1dCBubyBWTEFOIGRldnMpXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmlpZiA9IEJPTkRfSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIHBvcnQgZG9lcyBub3QgbWF0Y2hcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuaWlmID0gQk9ORF9QT1JULCAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9QT1JULCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cIixcbitcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbitcdHsgLmRlc2MgPSBcInVua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcdTAwM2NcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuIH07XG4gXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuQEAgLTIwNCw2ICs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcbiBcdFNZUyhmYWlsLCBcImlwIHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCIsIE1BUkssIE1BUktfVEFCTEUpO1xuIFx0U1lTKGZhaWwsIFwiaXAgLTYgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcIiwgTUFSSywgTUFSS19UQUJMRSk7XG4gXG4rXHQvKlxuK1x0ICogU2V0dXAgZm9yIHZsYW4gdGVzdHM6IGEgc3ViaW50ZXJmYWNlIGZvciBlZ3Jlc3MgcmVzb2x1dGlvbiBhbmRcbitcdCAqIHRhZy1hcy1pbnB1dCwgYSBRaW5RIHN0YWNrLCBhbmQgYW4gaWlmIHJ1bGUgc28gdGhlIGlucHV0IHRlc3RzXG4rXHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFZMQU5fSUZBQ0UpO1xuK1x0LypcbitcdCAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGVcbitcdCAqIEZJQiByZXN1bHQgKFZMQU4pIGRldmljZSwgc28gbXR1X3Jlc3VsdCBpcyB0aGlzIHZhbHVlLCB3aGljaCB0aGVcbitcdCAqIG5vLWZsYWcgYXJtIGJlbG93IHBpbnNcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXCIsIFZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIElQVjRfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFwiLCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XG4rXG4rXHQvKlxuK1x0ICogc3RheXMgZG93bjogdGhlIGlucHV0IGZsYWcgbXVzdCB0cmVhdCBpdHMgdGFnIHRoZSB3YXkgcmVhbFxuK1x0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXG4rXHQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7XG4rXG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cIiBWTEFOX0lGQUNFIFwiL2ZvcndhcmRpbmdcIiwgXCIxXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlwiIFZMQU5fSUZBQ0UgXCIuZm9yd2FyZGluZylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL1wiIFZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuXCIgVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMFwiLFxuK1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzIHR5cGUgdmxhbiBpZCAzMDBcIixcbitcdCAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBRSU5RX09VVEVSX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXNcIiwgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXCIsIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcIixcbitcdCAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1wiLCBJUFY2X1ZMQU5fRFNULCBJUFY2X0dXMSk7XG4rXHRTWVMoZmFpbCwgXCJpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1wiLFxuK1x0ICAgIFZMQU5fVEFCTEUsIElQVjZfVkxBTl9EU1QsIElQVjZfVkxBTl9HVyk7XG4rXHRTWVMoZmFpbCwgXCJpcCAtNiBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1wiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbitcbitcdC8qIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFwiLCBCT05EX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcIiwgQk9ORF9QT1JULCBCT05EX1BPUlRfUEVFUik7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcIiwgQk9ORF9QT1JULCBCT05EX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBCT05EX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBCT05EX1BPUlQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcy4lZCB1cFwiLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcy4lZFwiLFxuK1x0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbitcbitcdC8qXG4rXHQgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZVxuK1x0ICogbXVzdCBub3Qgc2VlIGl0KSwgZm9yIHRoZSB0YWJsZS1zZWxlY3Rpb24tYnktaW5ncmVzcyBjYXNlc1xuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlc1wiLCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVlJGX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCIsIFZSRl9WTEFOX0lGQUNFLCBWUkZfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFZSRl9WTEFOX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGFkZHIgYWRkICVzLzI0IGRldiAlc1wiLCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7XG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cIiBWUkZfVkxBTl9JRkFDRSBcIi9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi5cIiBWUkZfVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1wiLCBJUFY0X1ZSRl9EU1QsIElQVjRfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcIixcbitcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xuK1xuK1x0LyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqL1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY0L25laWdoL1wiIFZMQU5fSUZBQ0UgXCIvZ2Nfc3RhbGVfdGltZVwiLCBcIjkwMFwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQubmVpZ2guXCIgVkxBTl9JRkFDRSBcIi5nY19zdGFsZV90aW1lKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0U1lTKGZhaWwsIFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXCIsXG4rXHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXCIsXG4rXHQgICAgSVBWNF9WTEFOX0dXLCBWTEFOX0lGQUNFLCBETUFDMik7XG4rXG4rXHQvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBUQklEX1ZMQU5fSUZBQ0UsIFRCSURfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVEJJRF9WTEFOX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzXCIsXG4rXHQgICAgSVBWNF9UQklEX1ZMQU5fRFNULCBUQklEX1ZMQU5fSUZBQ0UpO1xuK1xuK1x0LyogYSBsb2NrZWQtbXR1IHJvdXRlIHZpYSB0aGUgc3ViaW50ZXJmYWNlIGZvciB0aGUgRlJBR19ORUVERUQgY2FzZSAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXCIsXG4rXHQgICAgSVBWNF9WTEFOX01UVV9EU1QsIFZMQU5fSUZBQ0UpO1xuK1xuIFx0cmV0dXJuIDA7XG4gZmFpbDpcbiBcdHJldHVybiAtMTtcbkBAIC0yMTgsOSArNTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpO1xuIFxuIFx0cGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4tXHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGlmaW5kZXg7XG4rXHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHRlc3QtXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cdTAwM2VpaWYpIDogaWZpbmRleDtcbiBcdHBhcmFtcy1cdTAwM2V0YmlkID0gdGVzdC1cdTAwM2V0YmlkO1xuIFx0cGFyYW1zLVx1MDAzZW1hcmsgPSB0ZXN0LVx1MDAzZW1hcms7XG4rXHRwYXJhbXMtXHUwMDNldG90X2xlbiA9IHRlc3QtXHUwMDNldG90X2xlbjtcbitcbitcdC8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqL1xuK1x0aWYgKHRlc3QtXHUwMDNlbG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4rXHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LVx1MDAzZXZsYW5fcHJvdG8pO1xuK1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9pZCk7XG4rXHR9XG4gXG4gXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVx1MDAzZWRhZGRyLCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpID09IDEpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuQEAgLTI5OCw3ICs2NzUsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuIFx0c3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07XG4gXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDtcbi1cdGludCBwcm9nX2ZkLCBlcnIsIHJldCwgaTtcbitcdGludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcmV0LCBpO1xuIFxuIFx0LyogVGhlIHRlc3QgZG9lcyBub3QgdXNlIHRoZSBza2ItXHUwMDNlZGF0YSwgc29cbiBcdCAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuXG5AQCAtMzA5LDExICs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4gXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbiBcdCk7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbitcdCk7XG4gXG4gXHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuIFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4rXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3hkcCk7XG4gXG4gXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVEVTVCk7XG4gXG5AQCAtMzQzLDYgKzcyNSwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfdGVzdF9ydW5fb3B0c1wiKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0LypcbitcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiBpcyBYRFAtb25seTsgdGhlIHRjIGhlbHBlciByZWplY3RzIGl0LlxuK1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHtcbitcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4rXHRcdFx0XHQgIFwidGMgcmVqZWN0cyBCUEZfRklCX0xPT0tVUF9WTEFOXCIpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCJmaWJfbG9va3VwX3JldFwiKTtcbiBcbkBAIC0zNTIsNiArNzQ0LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsXG4rXHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwiaWZpbmRleFwiKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSlcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4rXHRcdFx0XHQgIFwibXR1X3Jlc3VsdFwiKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8sXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcImhfdmxhbl9wcm90b1wiKTtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXCJoX3ZsYW5fVENJXCIpO1xuK1x0XHR9XG4rXG4gXHRcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XG4gXHRcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCJkbWFjIG5vdCBtYXRjaFwiKSkge1xuIFx0XHRcdGNoYXIgZXhwZWN0ZWRbMThdLCBhY3R1YWxbMThdO1xuQEAgLTM2MSwxNyArNzY4LDMyMiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHRcdHByaW50ZihcImRtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwiLCBleHBlY3RlZCwgYWN0dWFsKTtcbiBcdFx0fVxuIFxuLVx0XHQvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuXG4tXHRcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCkge1xuK1x0XHQvKlxuK1x0XHQgKiBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuIFdpdGhcbitcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4rXHRcdCAqIGZpZWxkcyBpbnN0ZWFkLCBzbyBza2lwIHRoZSBjaGVjayBmb3IgdGhvc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSkge1xuIFx0XHRcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9wYXJhbXMudGJpZCwgMCxcbiBcdFx0XHRcdFx0XCJleHBlY3RlZCBmaWJfcGFyYW1zLnRiaWQgdG8gYmUgemVyb1wiKSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuK1x0LypcbitcdCAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGVcbitcdCAqIGN1cnJlbnQgbmV0bnMnIGxvb3BiYWNrIGZvciBjdHgtXHUwMDNlcnhxLVx1MDAzZWRldiwgc28gZGV2X25ldCgpIGlzIE5TX1RFU1RcbitcdCAqIGFuZCB0aGUgbG9va3VwIHJ1bnMgYWdhaW5zdCBpdHMgRklCLiBUaGUgcGF0aC1pbmRlcGVuZGVudCByZXN1bHRzXG4rXHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuK1x0ICogcGF0aDsgdGhlIG5vLXRvdF9sZW4gbXR1X3Jlc3VsdCBpcyBza2Itc3BlY2lmaWMgYW5kIG5vdCByZWNoZWNrZWQuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcbitcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4rXHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IHRlc3RzW2ldLmxvb2t1cF9mbGFncztcbitcbitcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInhkcCB0ZXN0X3J1blwiKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbitcdFx0XHQgICAgICAgXCJ4ZHAgZmliX2xvb2t1cF9yZXRcIikpXG4rXHRcdFx0cHJpbnRmKFwiKHhkcCkgJXNcXG5cIiwgdGVzdHNbaV0uZGVzYyk7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbitcdFx0XHRcdCAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSxcbitcdFx0XHRcdCAgXCJ4ZHAgaWZpbmRleFwiKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbitcdFx0XHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXCJ4ZHAgaF92bGFuX3Byb3RvXCIpO1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0ksXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcInhkcCBoX3ZsYW5fVENJXCIpO1xuK1x0XHR9XG4rXG4rXHRcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XG4rXHRcdEFTU0VSVF9FUShyZXQsIDAsIFwieGRwIGRtYWNcIik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzXG4rXHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuK1x0XHQgKiBza2Itb25seSwgc28gZ2F0ZSBvbiB0b3RfbGVuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbitcdFx0XHRcdCAgXCJ4ZHAgbXR1X3Jlc3VsdFwiKTtcbitcdH1cbitcbiBmYWlsOlxuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBOU19URVNUKTtcbiBcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuK1xuKyNkZWZpbmUgTlNfVkxBTl9BXHRcImZpYl9sb29rdXBfdmxhbl9uc19hXCJcbisjZGVmaW5lIE5TX1ZMQU5fQlx0XCJmaWJfbG9va3VwX3ZsYW5fbnNfYlwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfQUREUlx0XCIxMC42Ni4wLjFcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX05FVE5TX0RTVFx0XCIxMC42Ni4wLjJcIlxuK1xuKy8qXG4rICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWRcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuKyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50J3MgaWZpbmRleCwgYW5kIHRoZVxuKyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4rICovXG4rdm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbitcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuK1x0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcbitcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0XHQgICAgLmN0eF9pbiA9IFx1MDAyNnNrYixcbitcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuK1x0KTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbitcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbitcdGZpYl9wYXJhbXMgPSBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1ZMQU5fQSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVkxBTl9CKTtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zKGEpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4XCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2IHZldGg3IHVwXCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NlwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzXCIsIE5TX1ZMQU5fQik7XG4rXHQvKlxuK1x0ICogdXAgaXQgaW4gQiBiZWZvcmUgdGhlIGlucHV0IGxvb2t1cDogdGhlIG1vdmUgY2xvc2VkIGl0LCBhbmQgYVxuK1x0ICogZG93biBkZXZpY2UgZmFpbHMgdGhlIHJlc29sdmVyIG9uIElGRl9VUCBiZWZvcmUgcmVhY2hpbmcgdGhlXG4rXHQgKiBuZXRucyBjaGVjayB0aGlzIHN1YnRlc3QgZXhpc3RzIHRvIHBpblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCAtbiAlcyBsaW5rIHNldCBkZXYgdmV0aDcuNjYgdXBcIiwgTlNfVkxBTl9CKTtcbitcbitcdHBhcmVudF9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGg3XCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcncyBWTEFOIGdyb3VwLCBidXQgaXRcbitcdCAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZFxuK1x0ICovXG4rXHRza2IuaWZpbmRleCA9IHBhcmVudF9pZHg7XG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSBwYXJlbnRfaWR4O1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyg2Nik7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX05FVE5TX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihkc3QpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8XG4rXHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNnJ1bl9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihpbnB1dClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHRcdCAgXCJpbnB1dCBhY3Jvc3MgbmV0bnMgZmFpbHMgY2xvc2VkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCwgcGFyZW50X2lkeCwgXCJpZmluZGV4IHVudG91Y2hlZFwiKTtcbitcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0ksIGh0b25zKDY2KSwgXCJ0YWcgdW50b3VjaGVkXCIpO1xuK1xuK1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRucyhiKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LypcbitcdCAqIGVncmVzczogdGhlIGZpYiByZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlIGhlcmUsIGJ1dCBpdHMgcGFyZW50XG4rXHQgKiBpcyBpbiB0aGUgb3RoZXIgbmV0bnMsIHNvIHRoZSBzd2FwIG11c3Qgbm90IGhhcHBlblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDcuNjZcIiwgSVBWNF9WTEFOX05FVE5TX0FERFIpO1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvdmV0aDcuNjYvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKGZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHR2bGFuX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDcuNjZcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEodmxhbl9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2bGFuX2lkeDtcbitcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKGRzdClcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihzcmMpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4rXHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuKGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4rXHRcdCAgXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCB2bGFuX2lkeCxcbitcdFx0ICBcImZvcmVpZ24gcGFyZW50IG5vdCBwdWJsaXNoZWRcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCAwLCBcInZsYW4gZmllbGRzIHplcm9cIik7XG4rXG4rZmFpbDpcbitcdGlmIChuc3Rva2VuKVxuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTlNfVkxBTl9BKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTlNfVkxBTl9CKTtcbitcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuKyNkZWZpbmUgUkVESVJFQ1RfTlBLVFMgMTAwMFxuKyNkZWZpbmUgTlNfUkVESVJFQ1QgXCJmaWJfbG9va3VwX3JlZGlyZWN0X25zXCJcbitcbisvKlxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuKyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuKyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbisgKiB4ZHBfZG9fcmVkaXJlY3QoKSArIHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4rICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbisgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbisgKi9cbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4re1xuK1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4rXHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuK1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19SRURJUkVDVCk7XG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19SRURJUkVDVCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoc2V0dXBfbmV0bnMoKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0dmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoMVwiKTtcbitcdHZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDJcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEodmV0aDFfaWR4LCAwLCBcImlmX25hbWV0b2luZGV4KHZldGgxKVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoMilcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qXG4rXHQgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpXG4rXHQgKiBvbmx5IGFjY2VwdHMgdGhlIGZyYW1lIGlmIHZldGgyJ3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xuK1x0ICogdmV0aDIgY2FycmllcyBhbiBYRFAgcHJvZ3JhbTsgeGRwX2NvdW50IHRhbGxpZXMgd2hhdCBhcnJpdmVzLlxuK1x0ICovXG4rXHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9jb3VudCksXG4rXHRcdFx0ICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImF0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdHhkcF9hdHRhY2hlZCA9IHRydWU7XG4rXG4rXHQvKiByZWR1Y2libGUgVkxBTiBlZ3Jlc3M6IHJlc29sdmVzIHRvIHRoZSBwaHlzaWNhbCBwYXJlbnQgdmV0aDEgKi9cbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbitcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oc3JjKVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9FR1JFU1NfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRlbGl2ZXJlZCA9IDA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihyZWR1Y2libGUgZWdyZXNzKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZGlyZWN0ZWQsIFJFRElSRUNUX05QS1RTLCBcInJlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIDAsIFwicmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkXCIpO1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRlbGl2ZXJlZCwgMCwgXCJyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlwiKTtcbitcbitcdC8qXG4rXHQgKiBRaW5RIGVncmVzczogbm90IHJlZHVjaWJsZSwgc28gdGhlIGxvb2t1cCByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmRcbitcdCAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXJcbitcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxuK1x0ICogcHJvZ3JhbSBkaWQgbm90IHJlZGlyZWN0IHRvIGEgZGV2aWNlIHRoYXQgd291bGQgZHJvcCB0aGUgZnJhbWUgYXRcbitcdCAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMidzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxuK1x0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJ3MgZm9yd2FyZGluZ1xuK1x0ICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LlxuK1x0ICovXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHNyYylcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHFpbnEgZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCA9IDA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihxaW5xIGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcInFpbnEgZWdyZXNzIHBhc3NlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCAwLCBcInFpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAoeGRwX2F0dGFjaGVkKVxuK1x0XHRicGZfeGRwX2RldGFjaCh2ZXRoMl9pZHgsIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1JFRElSRUNUKTtcbitcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5pbmRleCA3YjVkZDIyMTRmZjQ2YS4uMzZiNzIxOGQ5YWUyZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5AQCAtNCw3ICs0LDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X2Nscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTtcbiBpbnQgZmliX2xvb2t1cF9yZXQgPSAwO1xuQEAgLTE5LDQgKzIzLDU3IEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuK1x0XHRcdFx0XHRsb29rdXBfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbitpbnQgcmVkaXJlY3RlZCA9IDA7XG4raW50IHBhc3NlZCA9IDA7XG4raW50IGRlbGl2ZXJlZCA9IDA7XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4rXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xuK1x0XHRyZWRpcmVjdGVkKys7XG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuK1x0fVxuK1xuK1x0cGFzc2VkKys7XG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cdTAwM2VkYXRhX2VuZDtcbitcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbitcbitcdC8qXG4rXHQgKiBjb3VudCBvbmx5IHRoZSB0ZXN0J3MgVENQIGZyYW1lczogdGhlIG5ldG5zIGhhcyBsaXZlXG4rXHQgKiBsaW5rLWxvY2FsIHRyYWZmaWMgKERBRCwgTUxEKSB0aGF0IHdvdWxkIHNhdGlzZnkgYSBiYXJlXG4rXHQgKiBjb3VudGVyXG4rXHQgKi9cbitcdGlmICgodm9pZCAqKShldGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdCAgICBldGgtXHUwMDNlaF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKVxuK1x0XHRyZXR1cm4gWERQX0RST1A7XG4rXHRpcGggPSAodm9pZCAqKShldGggKyAxKTtcbitcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuK1x0XHRyZXR1cm4gWERQX0RST1A7XG4rXG4rXHRkZWxpdmVyZWQrKztcbitcdHJldHVybiBYRFBfRFJPUDtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MDguMDMyNDQ4NjU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxNjg5MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZMQU4gQlBGIEZJQiBMb29rdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBWTEFOIHN1cHBvcnQgdG8gdGhlIGBicGZfZmliX2xvb2t1cGAgaGVscGVyLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIHNvbWUgbmV3IGZsYWdzLCBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcvQlBGIHN1YnN5c3RlbSwgc28gZnV6emluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwuXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbW9kaWZpZWQgYW5kIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zLiBUaGUgbW9zdCBpbW1lZGlhdGUgdGFyZ2V0cyB0aGF0IGp1bXAgb3V0IGFyZTpcblxuKiAgIGBicGZfZmliX3NldF9md2RfcGFyYW1zYDogVGhpcyBvbmUncyBsaWtlbHkgdG8gYmUgY29yZSB0byB0aGUgZm9yd2FyZGluZyBsb2dpYy5cbiogICBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmA6IEJlaW5nIGEgbmV3IGZ1bmN0aW9uIGRlZGljYXRlZCB0byBWTEFOIGlucHV0IGRldmljZSBoYW5kbGluZywgaXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGEgcHJpbWUgdGFyZ2V0IGZvciBzY3J1dGlueS5cbiogICBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGA6IFRoZXNlIGFyZSBob3QgcGF0aHMgaW4gdGhlIEZJQiBsb29rdXAsIHNvIHRoZSBtb2RpZmljYXRpb25zIGFyZSBpbXBvcnRhbnQuXG4qICAgYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgOiBUaGVzZSBhcmUga2V5IEJQRiBoZWxwZXJzLCBzbyB0aGV5IHdpbGwgYmUgaW1wb3J0YW50IHRvIGFuYWx5emUuXG5cbkknbGwgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlbGllcyBvbiBgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlgLCBzbyB0aGF0J3MgdGhlIGtleSBvbmUgdG8gZW5hYmxlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgYWxzbyBjb25maWd1cmVkLCBidXQgdGhvc2UgYXJlIHVzdWFsbHkgc3RhbmRhcmQuIEknbGwgYWxzbyBjaGVjayBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMTo1NjoxNS41NDkzNDE4ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNDIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1ZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjIxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlcXG5uZXQvY29yZS9maWx0ZXIuYy02MjEyLVxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSBcXHUwMDI2XFx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjE1LjYwODY4NzkxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzU2ODQzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEZpbHRlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IHJlcXVpcmVtZW50IGhlcmUgc2VlbXMgdG8gYmUgc3VwcG9ydCBmb3IgYFZMQU5fODAyMVFgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gQmVmb3JlIEkgcHJvY2VlZCwgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyIGJlc2lkZXMgdGhpcz8gSSd2ZSBzZWVuIGEgcGF0Y2ggYXBwbGllZCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZnVuY3Rpb24gYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIFZMQU4gaGFuZGxpbmcgaXMgYmVpbmcgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIGV4aXN0aW5nIEJQRiBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWVwbHkgdG8gZ2F1Z2UgdGhlIGVmZmVjdGl2ZW5lc3MgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MTguODg0Mzc0NzQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTQzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy02MjM0LVxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjcxLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjcyOlxcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNzMtXFx0XFx0aWYgKElTX0VSUihkZXYpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MjktXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MzA6XFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjQzMS1cXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjE4LjkzOTMyNDE5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTMyNzYxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgRklCIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBCUEYgRklCIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBpcyB6ZXJvaW5nIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIFNwZWNpZmljYWxseSwgdGhlIG9uZXMgZGlyZWN0bHkgcmVsYXRlZCB0byBWTEFOIGFuZCBmb3J3YXJkaW5nOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRoZSBsb29rdXAgZnVuY3Rpb25zLCBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIE9mIGNvdXJzZSwgd2UgYWxzbyBoYXZlIHRoZSBpcHY0IGFuZCBpcHY2IGxvb2t1cCB2YXJpYXRpb25zIGdldHRpbmcgdHdlYWtlZCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgZm9yd2FyZGluZyBsb2dpYyBiZWluZyBtb2RpZmllZCwgc28gdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gcmVhbGx5IGRpZyBpbnRvLlxuXG5Ob3csIGxldCdzIHNlZSwgdGhlIHBhdGNoIGlzIGFsc28gY2hlY2tpbmcgaWYgd2Ugb25seSBoYXZlIGBWTEFOXzgwMjFRYCBjb25maWd1cmVkLiBSaWdodCwgaXQncyBsZXZlcmFnaW5nIGEgc3VpdGUgb2YgVkxBTi1yZWxhdGVkIGhlbHBlcnM6IGBpc192bGFuX2RldmAsIGB2bGFuX2Rldl9wcml2YCwgYHZsYW5fZGV2X3ZsYW5fcHJvdG9gLCBgdmxhbl9kZXZfdmxhbl9pZGAsIGFuZCB0aGF0IFJDVSBmdW5jdGlvbiwgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAuIE9rYXksIHRoZSBWTEFOIGNvZGUgc2hvdWxkIGJlIGZhaXJseSBzdGFuZGFyZCBmcm9tIGhlcmUsIGJ1dCBJIHdvbmRlciwgYXJlIGFsbCBvZiB0aGVzZSBkZXBlbmRlbnQgb24gYENPTkZJR19WTEFOXzgwMjFRYCBvciBwb3RlbnRpYWxseSB0aGUgbW9kdWxlIHZlcnNpb24sIGBDT05GSUdfVkxBTl84MDIxUV9NT0RVTEVgPyBXZSdyZSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgVkxBTiBzdXBwb3J0IGlzIGVpdGhlciBidWlsdC1pbiBvciBlbmFibGVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQuIEFuZCB0aGF0IFJDVSBoZWxwZXI/IEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGJlaW5nIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gVGltZSB0byBjb25maXJtIHRoYXQsIGFuZCBhbHNvIG1ha2Ugc3VyZSBub3RoaW5nIHVudXN1YWwgaXMgYmVpbmcgZG9uZSB3aXRoIHRoZSBWTEFOLXNwZWNpZmljIGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mjk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjI0LjU5MjYwMjQyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk5MzkzMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00MDY4PXN0YXRpYyBib29sIGJueHRfcmVfY2hlY2tfaWZfdmxhbl92YWxpZChzdHJ1Y3QgYm54dF9yZV9kZXYgKnJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzQtXFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzo0MDc1OlxcdGlmICghX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHJkZXYtXFx1MDAzZW5ldGRldixcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzYtXFx0XFx0XFx0XFx0ICAgICAgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuX2lkKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF9pZmZfZnJvbV9tYWMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYy0xODctXFx0XFx0XFx0aWYgKHZsYW4gXFx1MDAyNlxcdTAwMjYgdmxhbiAhPSBWTEFOX1ZJRF9NQVNLKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM6MTg4OlxcdFxcdFxcdFxcdGRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmxhbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmMtMTg5LVxcdFxcdFxcdH0gZWxzZSBpZiAobmV0aWZfaXNfYm9uZF9zbGF2ZShkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM9MjE4PWludCBjeGdiNF91cGRhdGVfcm9vdF9kZXZfY2xpcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVkxBTl9OX1ZJRDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jOjIzNzpcXHRcXHRyb290X2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzOC1cXHRcXHRpZiAoIXJvb3RfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc0Mz1zdGF0aWMgdm9pZCBtbHhzd19zcF9yaWZfZGVzdHJveV92bGFuX3VwcGVyKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4NzUxOlxcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShicl9kZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUyLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc3MD1pbnQgbWx4c3dfc3Bfcm91dGVyX2JyaWRnZV92bGFuX2FkZChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6ODgzMjpcXHRcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9sZF9wdmlkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDgyPXZvaWQgcWxjbmljX3Jlc3RvcmVfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwOTEtXFx0Zm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItXFx1MDAzZXZsYW5zLCBWTEFOX05fVklEKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwOTI6XFx0XFx0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KG5ldGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2aWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkzLVxcdFxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9MzA5PXN0YXRpYyB2b2lkIGRvX25laWdoX3NvbGljaXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYnVmLCB1MTYgdGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI2LVxcdGlmICh0Y2kpIHtcXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzozMjc6XFx0XFx0bmV0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldi1cXHUwMDNlbmV0LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgdGNpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTEyMz1zdHJ1Y3Qgdmxhbl9wY3B1X3N0YXRzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoxMzY6ZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoyNTM6X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yNTQtXFx0XFx0ICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc1LS8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjc2OnN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNzctXFx0XFx0XFx0XFx0XFx0X19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTkzLVxcdFxcdGlmICh1cHBlcl9kZXYpXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjk0OlxcdFxcdFxcdHJldHVybiBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UodXBwZXJfZGV2LFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOTktfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMDA6RVhQT1JUX1NZTUJPTChfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyND12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE3OS1cXHRpZiAodmlkICE9IDApIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjE4MDpcXHRcXHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVxcdTAwM2VkZXYsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4MS1cXHRcXHRcXHRcXHRcXHRcXHQgICB2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTQ9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1NS1cXHRcXHQvKiBidWlsZCBuZWlnaCB0YWJsZSBsb29rdXAgb24gdGhlIHZsYW4gZGV2aWNlICovXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0NTY6XFx0XFx0dmxhbmRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShici1cXHUwMDNlZGV2LCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgdmlkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQ2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQ3OlxcdHZsYW4gPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0OC1cXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cXHR2aWQgPSBudG9ocyhwYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kpIFxcdTAwMjYgVkxBTl9WSURfTUFTSztcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ0OlxcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fFxcbi0tXFxubmV0L2RzYS90YWcuaD0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGRzYV9zb2Z0d2FyZV91bnRhZ192bGFuX3VuYXdhcmVfYnJpZGdlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvZHNhL3RhZy5oLTEzMS1cXHQgKi9cXG5uZXQvZHNhL3RhZy5oOjEzMjpcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIGh0b25zKHByb3RvKSwgdmlkKTtcXG5uZXQvZHNhL3RhZy5oLTEzMy1cXHRpZiAoIXVwcGVyX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MjYuMzkyMDAyMTk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk4Njc5NTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBUaGlzIEJQRi9WTEFOIFBhdGNoKipcblxuT2theSwgc28gYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAgaXMgZGVmaW5pdGVseSBhdmFpbGFibGUg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnQuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGNydWNpYWwgb25lIHNlZW1zIHRvIGJlIGBWTEFOXzgwMjFRYCwgd2hpY2ggdHJhbnNsYXRlcyB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYENPTkZJR19WTEFOXzgwMjFRYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgcmVsYXRlZCB0byBWTEFOLlxuXG5UaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCB3aGljaCBzdWdnZXN0cyBJJ2xsIG5lZWQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBlbmFibGVkLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIE9mIGNvdXJzZSwgQlBGIHJlcXVpcmVzIGBDT05GSUdfQlBGX1NZU0NBTExgLCBidXQgdGhhdCdzIGEgZ2l2ZW4gaW4gdGhlc2Ugc29ydHMgb2YgcGF0Y2hlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0LiBUaGUgY29kZSB1c2VzIGBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAsIHNvIGBWTEFOXzgwMjFRYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGltcGFjdHM6XG5cbiogICBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmBcbiogICBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2BcbiogICBgYnBmX3hkcF9maWJfbG9va3VwYFxuKiAgIGBicGZfc2tiX2ZpYl9sb29rdXBgXG4qICAgYGJwZl9pcHY0X2ZpYl9sb29rdXBgXG4qICAgYGJwZl9pcHY2X2ZpYl9sb29rdXBgXG5cbldhaXQsIGEgc2Vjb25k4oCmICBgYnBmX2lwdjRfZmliX2xvb2t1cGAgYW5kIGBicGZfaXB2Nl9maWJfbG9va3VwYCBhcmUgaG90IHBhdGhzLCByaWdodD8gWWVzLCB0aGV5J3JlIGNhbGxlZCBieSBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEFuZCB0aGV5J3JlICpzcGVjaWZpY2FsbHkqIG1vZGlmaWVkIGhlcmUuIFRoZXkncmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuIEl0IGxvb2tzIGxpa2UgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCBpcyBhbHNvIHJlbGV2YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AgaXMgYWxzbyBhIGZ1bmN0aW9uLlxuXG5TbywgaGVyZSdzIG15IHJldmlzZWQgbGlzdCB0byBmb2N1cyBvbjpcblxuKiAgIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YFxuKiAgIGBicGZfZmliX3NldF9md2RfcGFyYW1zYFxuKiAgIGBicGZfeGRwX2ZpYl9sb29rdXBgXG4qICAgYGJwZl9za2JfZmliX2xvb2t1cGBcbiogICBgYnBmX2lwdjRfZmliX2xvb2t1cGBcbiogICBgYnBmX2lwdjZfZmliX2xvb2t1cGBcbiogICBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjM0LjM3ODc5OTY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzNDMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjU2MzpzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU2NC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NTc1PUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTgxOlxcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjA5PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NjE4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY2MTk6XFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjYyMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MzQuNDM1MTQ5ODMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMjU5NjkzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgRklCIExvb2t1cCBWTEFOIFN1cHBvcnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AuIFRoYXQncyBpbXBvcnRhbnQgdG8gbm90ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIHRoZW4gbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCwgd2hpY2ggYXJlOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEl0J3Mgd29ydGggaW5jbHVkaW5nIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgIGJlY2F1c2UgdGhleSdyZSBzcGVjaWZpYyB0byBCUEYgRklCIGxvb2t1cHMsIHdoaWNoIGRpZmZlcmVudGlhdGVzIHRoZW0gZnJvbSB0aGUgZ2VuZXJhbCBJUHY0L0lQdjYgcm91dGluZyBsb29rdXBzLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgc2VlbSByZWxldmFudCBoZXJlIGFyZSBgVkxBTl84MDIxUWAsIGBJTkVUYCwgYW5kIGBJUFY2YC4gV2hpbGUgYElORVRgIGFuZCBgSVBWNmAgYXJlIHN0YW5kYXJkLCBpbmNsdWRpbmcgdGhlbSBkb2Vzbid0IGh1cnQuIEhvd2V2ZXIsIGBWTEFOXzgwMjFRYCBpcyB0aGUgbW9zdCBzcGVjaWZpYy4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgYmVpbmcgdXNlZC4gT2theSwganVzdCBgQ09ORklHX1ZMQU5fODAyMVFgLiBHb29kLlxuXG5UaGUgcGF0Y2gncyBjb3JlIGltcGFjdCBpcyBhZGRpbmcgVkxBTiBzdXBwb3J0IHRvIGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCwgaW1wbGVtZW50aW5nIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzLiBUaGlzIGlzIG5ldHdvcmtpbmcgYW5kIEJQRiBjb3JlIGxvZ2ljLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGVzcGVjaWFsbHkgc2luY2Ugc3l6a2FsbGVyIGNhbiByZWFjaCBpdC4gSSB0aGluayB0aGUgb3JpZ2luYWwgbGlzdCBvZiBmb2N1cyBmdW5jdGlvbnMgaXMgYXBwcm9wcmlhdGUsIHNvIHRoZSBsaXN0IHJlbWFpbnM6IGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCwgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgLCBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfaXB2NF9maWJfbG9va3VwYCwgYW5kIGBicGZfaXB2Nl9maWJfbG9va3VwYC4gQWxyaWdodCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDAzMywiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6NDMuNjYxMTIyMDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NjI0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZmliX3ZsYW5faW5wdXRfZGV2XCIsXG4gICAgXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gICAgXCJicGZfZmliX2xvb2t1cF9mbGFnc19va1wiLFxuICAgIFwiYnBmX3hkcF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfc2tiX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXJzIChgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCB0byBoYW5kbGUgVkxBTiBlZ3Jlc3MgYW5kIGluZ3Jlc3MgcmVzb2x1dGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBjYW4gYmUgZnV6emVkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpYl92bGFuX2lucHV0X2RldlwiLFxuICAgIFwiYnBmX2ZpYl9zZXRfZndkX3BhcmFtc1wiLFxuICAgIFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 21:44:44 +0000 UTC FinishedAt: 2026-07-13 21:56:45 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "INET", "IPV6" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "INET", "IPV6" ], "series_id": "b2955805-74ad-4e05-909f-030e825d72f5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_fib_vlan_input_dev", "bpf_fib_set_fwd_params", "bpf_fib_lookup_flags_ok", "bpf_xdp_fib_lookup", "bpf_skb_fib_lookup", "bpf_ipv4_fib_lookup", "bpf_ipv6_fib_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpYl92bGFuX2lucHV0X2RldiYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfbG9va3VwX2ZsYWdzX29rJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjRfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2Nl9maWJfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVkxBTnMgaW4gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlcnMgKGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCkuIEl0IGludHJvZHVjZXMgbmV3IGZsYWdzIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIHRvIGhhbmRsZSBWTEFOIGVncmVzcyBhbmQgaW5ncmVzcyByZXNvbHV0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIGNhbiBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGE3ZjFmYTA4ZGNlMWUxYzI1NDAwYmUwZjNjZjExZGIzMGM5ZGMxYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDIxOjU2OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmZmMDMwMTlhYmUzNTU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ3IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxuJiM0MzsgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbiYjNDM7ICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4mIzQzOyAqXHRcdFx0cGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXG4mIzQzOyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuJiM0MzsgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbiYjNDM7ICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XG4mIzQzOyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuJiM0MzsgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuJiM0MzsgKlx0XHRcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbiYjNDM7ICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gVG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd25cbiYjNDM7ICpcdFx0XHRpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0XG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiosIHJlLWluaXRpYWxpemluZyAqcGFyYW1zKlxuJiM0MzsgKlx0XHRcdGZpcnN0OiBvdXRwdXQgZmllbGRzIG92ZXJ3cml0ZSB0aGUgaW5wdXRzIHRoZXkgc2hhcmVcbiYjNDM7ICpcdFx0XHRzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbiYjNDM7ICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuJiM0MzsgKlx0XHRcdHRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuJiM0MzsgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuJiM0MzsgKlx0XHRcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXG4mIzQzOyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxuJiM0MzsgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuJiM0MzsgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4mIzQzOyAqXHRcdFx0aGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZ1xuJiM0MzsgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4mIzQzOyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbiYjNDM7ICpcdFx0XHRFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlXG4mIzQzOyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbiYjNDM7ICpcdFx0XHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbiYjNDM7ICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCoqLCBtaXJyb3JpbmcgcmVhbCBpbmdyZXNzLlxuJiM0MzsgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4mIzQzOyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1RCSUQqKiBvciAqKkJQRl9GSUJfTE9PS1VQX09VVFBVVCoqXG4mIzQzOyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgJiM0Mzs3MzY4LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNiksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgJiM0Mzs3MzgzLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4mIzQzO1x0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuQEAgLTczOTMsNyAmIzQzOzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4mIzQzO1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuJiM0MztcdFx0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGVcbiYjNDM7XHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi4wZWEzNjJmYTQyODdlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTYyMDEsMjEgJiM0Mzs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxuIHtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gMDtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSAwO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS1cdTAwM2VyZWFsX2RldjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX2Rldl92bGFuX2lkKGRldikpO1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChtdHUpXG4gXHRcdHBhcmFtcy1cdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbiYjNDM7XHR1MTYgdmlkO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFx1MDAyNlx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbiYjNDM7XHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xuJiM0MztcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuJiM0MztcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bGFuX2RldjtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxuIHtcbiYjNDM7XHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMO1xuIFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcbkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbiYjNDM7XHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuJiM0MztcdFx0aWYgKElTX0VSUihkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogdmVyaWZ5IGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvbiB0aGlzIGludGVyZmFjZSAqL1xuIFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxuQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNC5mbG93aTRfaWlmID0gMTtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IDA7XG4gXHR9XG4gXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXHUwMDNldG9zKTtcbkBAIC02MzQ3LDcgJiM0Mzs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuJiM0MztcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtNjM1Nyw2ICYjNDM7NjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9zcmM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfZHN0O1xuJiM0MztcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG5AQCAtNjM3NCw2ICYjNDM7NjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZGV2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbiYjNDM7XHRcdGlmICghZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuIFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XG5AQCAtNjM4Miw3ICYjNDM7NjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xuIFx0XHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4mIzQzO1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG9pZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XG4gXHRcdGZsNi5mbG93aTZfb2lmID0gMDtcbiBcdFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcbiBcdH1cbkBAIC02NDg2LDEzICYjNDM7NjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXG4gXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXG4tXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChmbGFncyBcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdCAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncylcbkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4mIzQzO1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5AQCAtNjUzOCw3ICYjNDM7NjYxNiwxMCBAQCBCUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuJiM0MztcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZXRvdF9sZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZmYwMzAxOWFiZTM1NTQgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4mIzQzOyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuJiM0MzsgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbiYjNDM7ICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4mIzQzOyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbiYjNDM7ICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4mIzQzOyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4mIzQzOyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuJiM0MzsgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBUbyBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93blxuJiM0MzsgKlx0XHRcdGlmaW5kZXgsIHJlcGVhdCB0aGUgbG9va3VwIHdpdGhvdXRcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiwgcmUtaW5pdGlhbGl6aW5nICpwYXJhbXMqXG4mIzQzOyAqXHRcdFx0Zmlyc3Q6IG91dHB1dCBmaWVsZHMgb3ZlcndyaXRlIHRoZSBpbnB1dHMgdGhleSBzaGFyZVxuJiM0MzsgKlx0XHRcdHN0b3JhZ2Ugd2l0aC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkc1xuJiM0MzsgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4mIzQzOyAqXHRcdFx0dGhlIGhlbHBlciYjMzk7cyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XG4mIzQzOyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4mIzQzOyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbiYjNDM7ICpcdFx0XHRyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4mIzQzOyAqXHRcdFx0VHJlYXQgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJXG4mIzQzOyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbiYjNDM7ICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4mIzQzOyAqXHRcdFx0b24gKnBhcmFtcyotXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuJiM0MzsgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbiYjNDM7ICpcdFx0XHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuJiM0MzsgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJiMzOTtzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxuJiM0MzsgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4mIzQzOyAqXHRcdFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcbiYjNDM7ICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbiYjNDM7ICpcdFx0XHQocmV0dXJucyAqKi1FSU5WQUwqKikuXG4gICpcbiAgKlx0XHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxuICAqXHRcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxuQEAgLTczMjcsNiAmIzQzOzczNjgsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVIFx1MDAzY1x1MDAzYyA3KSxcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTczNDAsNiAmIzQzOzczODMsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbiYjNDM7XHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICYjNDM7NzQzNywxMyBAQCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuIFxuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdC8qIG91dHB1dCAqL1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbiYjNDM7XHRcdFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcbiYjNDM7XHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4mIzQzO1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuJiM0MztcdFx0XHQgKiB0aGUgbG9va3VwIGJ5LlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uZjczNjFmOWEzNDU5MmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuIFxuQEAgLTIzLDYgJiM0MzsyNCw3IEBAXG4gI2RlZmluZSBJUFY0X1RCSURfQUREUlx0XHRcJiMzNDsxNzIuMC4wLjI1NFwmIzM0O1xuICNkZWZpbmUgSVBWNF9UQklEX05FVFx0XHRcJiMzNDsxNzIuMC4wLjBcJiMzNDtcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCYjMzQ7MTcyLjAuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcJiMzNDsxNzIuMC4wLjVcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9BRERSXHRcdFwmIzM0O2ZkMDA6OkZGRkZcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9ORVRcdFx0XCYjMzQ7ZmQwMDo6XCYjMzQ7XG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwmIzM0O2ZkMDA6OjJcJiMzNDtcbkBAIC0zNyw2ICYjNDM7MzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCYjMzQ7ZmQwMTo6M1wmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzFcdFx0XCYjMzQ7ZmQwMTo6MVwmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzJcdFx0XCYjMzQ7ZmQwMTo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURcdFx0XHQxMDBcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgxLjEwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURfRE9XTlx0XHQxMDJcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCYjMzQ7dmV0aDEuMTAyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwLjMwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCYjMzQ7MzAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwmIzM0OzEwLjUuMC4yNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7MTAuNS4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwmIzM0OzEwLjcuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcJiMzNDsxMC42LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcJiMzNDsxMC41LjAuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcJiMzNDtmZDAyOjoyNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7ZmQwMjo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCYjMzQ7ZmQwMzo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcJiMzNDtmZDAyOjoxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuJiM0MzsjZGVmaW5lIFZSRl9JRkFDRVx0XHRcJiMzNDt2cmYtYmx1ZVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZSRl9UQUJMRVx0XHRcJiMzNDsxMDAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSURcdFx0MTAxXG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDEuMTAxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlx0XCYjMzQ7MTAuOC4wLjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVlJGX0dXXHRcdFwmIzM0OzEwLjguMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUXHRcdFwmIzM0OzEwLjkuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lEXHRcdDUwXG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgyLjUwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcJiMzNDsxNzIuMi4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwmIzM0OzEwLjExLjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcJiMzNDsxMC41LjkuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSURcdDMwMFxuJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0VcdFx0XCYjMzQ7Ym9uZDk5XCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUXHRcdFwmIzM0O3ZldGgzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcdFx0XCYjMzQ7dmV0aDRcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSURcdFx0NTAwXG4gI2RlZmluZSBETUFDXHRcdFx0XCYjMzQ7MTE6MTE6MTE6MTE6MTE6MTFcJiMzNDtcbiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH1cbiAjZGVmaW5lIERNQUMyXHRcdFx0XCYjMzQ7MDE6MDE6MDE6MDE6MDE6MDFcJiMzNDtcbkBAIC01Miw2ICYjNDM7ODksMTcgQEAgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB7XG4gXHRfX3UzMiB0YmlkO1xuIFx0X191OCBkbWFjWzZdO1xuIFx0X191MzIgbWFyaztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbiYjNDM7XHQgKiB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU4gKGNoZWNrZWQgd2hlbiBjaGVja192bGFuIGlzIHNldClcbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3UxNiB2bGFuX3Byb3RvO1xuJiM0MztcdF9fdTE2IHZsYW5faWQ7XG4mIzQzO1x0Ym9vbCBjaGVja192bGFuO1xuJiM0MztcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4mIzQzO1x0Y29uc3QgY2hhciAqaWlmO1x0ICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi9cbiYjNDM7XHRfX3UxNiB0b3RfbGVuO1x0XHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXG4mIzQzO1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcbiBcdCAgLmRhZGRyID0gSVBWNF9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxuIFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuJiM0MztcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcbiYjNDM7XHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXG4mIzQzO1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxuJiM0MztcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDJcJiMzNDssIH0sXG4gXHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXCYjMzQ7LFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICYjNDM7MjAxLDIxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuIFx0ICAubWFyayA9IE1BUkssIH0sXG4mIzQzO1x0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW52YXJpYW50IHRoZSBWTEFOLWVncmVzcyBhcm1zIGpvaW50bHkgZW5mb3JjZTogYVxuJiM0MztcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxuJiM0MztcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXG4mIzQzO1x0ICogaWZpbmRleC4gUmVkdWNpYmxlIGFybXMgcGluIGlmaW5kZXggPT0gdGhlIHBoeXNpY2FsIHBhcmVudDsgdGhlXG4mIzQzO1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuJiM0MztcdCAqIGxlZnQgYXQgdGhlIGlucHV0LCBzbyBhIHJlZ3Jlc3Npb24gdG8gYmVzdC1lZmZvcnQgKFNVQ0NFU1MgJiM0MzsgdGhlXG4mIzQzO1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyBtdHVcbiYjNDM7XHQgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIHdpdGhvdXQgdGhlIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC50YmlkID0gMTAwLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgyXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc3VjY2VzcyB3cml0ZXMgbXR1X3Jlc3VsdCB3aXRoIHRoZSBzd2FwXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAudG90X2xlbiA9IDUwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELFxuJiM0MztcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuJiM0MztcdC8qIHZsYW4gdGFnIGFzIGxvb2t1cCBpbnB1dCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LFxuJiM0MztcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlXG4mIzQzO1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuJiM0MztcdCAqIHRoZSBWUkYgdGFibGUgZnJvbSB0aGUgcmVzb2x2ZWQgaW5ncmVzc1xuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBWUkYgdGFibGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgRElSRUNUIHVzZXMgVlJGIHRhYmxlIGZyb20gcmVzb2x2ZWQgaW5ncmVzc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxuJiM0MztcdCAqIG5hbWVzIHRoZSBwaHlzaWNhbCBkZXZpY2UgYW5kIHRoZSBpbnB1dCB0YWcgYnl0ZXMgc3Vydml2ZVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBzdWJpbnRlcmZhY2UgZG93blwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiB0aGUgcmVzb2x2ZXIgcnVucyBiZWZvcmUgdGhlIGZvcndhcmRpbmcgY2hlY2ssIHNvIG9uIGRldmljZXNcbiYjNDM7XHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbiYjNDM7XHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXhcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAuaWlmID0gUUlOUV9PVVRFUl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4mIzQzO1x0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxuJiM0MztcdCAqIGlmaW5kZXggZG9lcyBub3QgbWF0Y2ggKHBvcnRzIGNhcnJ5IHZpZCBzdGF0ZSBidXQgbm8gVkxBTiBkZXZzKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIG1hc3RlciByZXNvbHZlc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O3Vua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcdTAwM2NcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuIH07XG4gXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuQEAgLTIwNCw2ICYjNDM7NDc1LDEwNSBAQCBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG4gXHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcJiMzNDssIE1BUkssIE1BUktfVEFCTEUpO1xuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHVwIGZvciB2bGFuIHRlc3RzOiBhIHN1YmludGVyZmFjZSBmb3IgZWdyZXNzIHJlc29sdXRpb24gYW5kXG4mIzQzO1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbiYjNDM7XHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgVkxBTl9JRkFDRSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBsb3dlciB0aGFuIHRoZSB2ZXRoMSBwYXJlbnQgKDE1MDApOiB0aGUgc2tiLXBhdGggbXR1IGNoZWNrIHVzZXMgdGhlXG4mIzQzO1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUsIHdoaWNoIHRoZVxuJiM0MztcdCAqIG5vLWZsYWcgYXJtIGJlbG93IHBpbnNcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXCYjMzQ7LCBWTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFwmIzM0OywgSVBWNl9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcbiYjNDM7XHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7L2ZvcndhcmRpbmdcJiMzNDssIFwmIzM0OzFcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2Ni5jb25mLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCYjMzQ7LFxuJiM0MztcdCAgICBRSU5RX09VVEVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzIHR5cGUgdmxhbiBpZCAzMDBcJiMzNDssXG4mIzQzO1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzXCYjMzQ7LCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcJiMzNDssIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNF9WTEFOX0RTVCwgSVBWNF9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1wmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9QT1JUKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcJiMzNDssIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZVxuJiM0MztcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcJiMzNDssIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCYjMzQ7LFxuJiM0MztcdCAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIFZSRl9WTEFOX0lGQUNFLCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFZSRl9WTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wmIzM0OyBWUkZfVkxBTl9JRkFDRSBcJiMzNDsvZm9yd2FyZGluZ1wmIzM0OywgXCYjMzQ7MVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi5cJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1wmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7XG4mIzQzO1xuJiM0MztcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9nY19zdGFsZV90aW1lXCYjMzQ7LCBcJiMzNDs5MDBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5nY19zdGFsZV90aW1lKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xuJiM0MztcbiYjNDM7XHQvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1xuJiM0MztcdC8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gZmFpbDpcbiBcdHJldHVybiAtMTtcbkBAIC0yMTgsOSAmIzQzOzU4OCwxNiBAQCBzdGF0aWMgaW50IHNldF9sb29rdXBfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbiBcdHBhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuLVx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpZmluZGV4O1xuJiM0MztcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gdGVzdC1cdTAwM2VpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LVx1MDAzZWlpZikgOiBpZmluZGV4O1xuIFx0cGFyYW1zLVx1MDAzZXRiaWQgPSB0ZXN0LVx1MDAzZXRiaWQ7XG4gXHRwYXJhbXMtXHUwMDNlbWFyayA9IHRlc3QtXHUwMDNlbWFyaztcbiYjNDM7XHRwYXJhbXMtXHUwMDNldG90X2xlbiA9IHRlc3QtXHUwMDNldG90X2xlbjtcbiYjNDM7XG4mIzQzO1x0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX3Byb3RvKTtcbiYjNDM7XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX2lkKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVx1MDAzZWRhZGRyLCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpID09IDEpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiBcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuIFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XG4tXHRpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7XG4mIzQzO1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XG4gXG4gXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cdTAwM2VkYXRhLCBzb1xuIFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cbkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4gXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbiBcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHQpO1xuIFxuIFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4mIzQzO1x0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xuIFxuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVEVTVCk7XG4gXG5AQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfcHJvZ190ZXN0X3J1bl9vcHRzXCYjMzQ7KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4mIzQzO1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cJiMzNDspO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCYjMzQ7ZmliX2xvb2t1cF9yZXRcJiMzNDspO1xuIFxuQEAgLTM1Miw2ICYjNDM7NzQ0LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwmIzM0O2lmaW5kZXhcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O210dV9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDtoX3ZsYW5fcHJvdG9cJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuJiM0MztcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwmIzM0O2hfdmxhbl9UQ0lcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtkbWFjIG5vdCBtYXRjaFwmIzM0OykpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTcgJiM0Mzs3NjgsMzIyIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuJiM0MztcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4mIzQzO1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuJiM0MztcdCAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4mIzQzO1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbiYjNDM7XHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuJiM0MztcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7eGRwIHRlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3hkcCBmaWJfbG9va3VwX3JldFwmIzM0OykpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDsoeGRwKSAlc1xcblwmIzM0OywgdGVzdHNbaV0uZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgaWZpbmRleFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiYjNDM7XHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDt4ZHAgaF92bGFuX3Byb3RvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcJiMzNDt4ZHAgaF92bGFuX1RDSVwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O3hkcCBkbWFjXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbiYjNDM7XHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuJiM0MztcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgbXR1X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiBmYWlsOlxuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1RFU1QpO1xuIFx0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbiB9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1ZMQU5fQVx0XCYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2FcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19WTEFOX0JcdFwmIzM0O2ZpYl9sb29rdXBfdmxhbl9uc19iXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX05FVE5TX0FERFJcdFwmIzM0OzEwLjY2LjAuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9ORVROU19EU1RcdFwmIzM0OzEwLjY2LjAuMlwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWRcbiYjNDM7ICogb24gaXRzIHBhcmVudC4gTmVpdGhlciBkaXJlY3Rpb24gbWF5IHRoZW4gY3Jvc3MgdGhlIGJvdW5kYXJ5OiB0aGVcbiYjNDM7ICogZWdyZXNzIGZsYWcgbXVzdCBub3QgcHVibGlzaCB0aGUgZm9yZWlnbiBwYXJlbnQmIzM5O3MgaWZpbmRleCwgYW5kIHRoZVxuJiM0MzsgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbiYjNDM7XHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHJ1bl9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHRcdCAgICAuY3R4X2luID0gXHUwMDI2c2tiLFxuJiM0MztcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuJiM0MztcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbiYjNDM7XHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3hkcCk7XG4mIzQzO1x0ZmliX3BhcmFtcyA9IFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9wYXJhbXM7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1ZMQU5fQSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVkxBTl9CKTtcbiYjNDM7XG4mIzQzO1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9BKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRucyhhKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4XCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2IHZldGg3IHVwXCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NlwmIzM0Oyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzXCYjMzQ7LCBOU19WTEFOX0IpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdXAgaXQgaW4gQiBiZWZvcmUgdGhlIGlucHV0IGxvb2t1cDogdGhlIG1vdmUgY2xvc2VkIGl0LCBhbmQgYVxuJiM0MztcdCAqIGRvd24gZGV2aWNlIGZhaWxzIHRoZSByZXNvbHZlciBvbiBJRkZfVVAgYmVmb3JlIHJlYWNoaW5nIHRoZVxuJiM0MztcdCAqIG5ldG5zIGNoZWNrIHRoaXMgc3VidGVzdCBleGlzdHMgdG8gcGluXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIC1uICVzIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwmIzM0OywgTlNfVkxBTl9CKTtcbiYjNDM7XG4mIzQzO1x0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGg3XCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNyYjMzk7cyBWTEFOIGdyb3VwLCBidXQgaXRcbiYjNDM7XHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRza2IuaWZpbmRleCA9IHBhcmVudF9pZHg7XG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyg2Nik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9ORVROU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbiYjNDM7XHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihpbnB1dClcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0XHQgIFwmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwmIzM0O2lmaW5kZXggdW50b3VjaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwmIzM0O3RhZyB1bnRvdWNoZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuJiM0MztcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoNy42NlwmIzM0OywgSVBWNF9WTEFOX05FVE5TX0FERFIpO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmxhbl9pZHg7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9ORVROU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHNyYylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW4oZWdyZXNzKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSxcbiYjNDM7XHRcdCAgXCYjMzQ7ZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCB2bGFuX2lkeCxcbiYjNDM7XHRcdCAgXCYjMzQ7Zm9yZWlnbiBwYXJlbnQgbm90IHB1Ymxpc2hlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCYjMzQ7dmxhbiBmaWVsZHMgemVyb1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmIChuc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQSk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQik7XG4mIzQzO1x0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRURJUkVDVF9OUEtUUyAxMDAwXG4mIzQzOyNkZWZpbmUgTlNfUkVESVJFQ1QgXCYjMzQ7ZmliX2xvb2t1cF9yZWRpcmVjdF9uc1wmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGVncmVzcyBmbGFnIGV4aXN0cyBzbyBhbiBYRFAgcHJvZ3JhbSBjYW4gcmVkaXJlY3QgdG8gdGhlIHBoeXNpY2FsXG4mIzQzOyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuJiM0MzsgKiB4ZHBfZG9fZmx1c2goKSwgYmVjYXVzZSBhIFZMQU4gZGV2aWNlIGhhcyBubyBuZG9feGRwX3htaXQuIERyaXZlIHJlYWxcbiYjNDM7ICogZnJhbWVzIHdpdGggQlBGX0ZfVEVTVF9YRFBfTElWRV9GUkFNRVMsIHdoaWNoIHJ1bnMgdGhlIG5hdGl2ZVxuJiM0MzsgKiB4ZHBfZG9fcmVkaXJlY3QoKSAmIzQzOyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xuJiM0MzsgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcbiYjNDM7ICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbiYjNDM7ICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVkaXJlY3RfZmQsIGVyciwgdmV0aDFfaWR4LCB2ZXRoMl9pZHggPSAtMTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4mIzQzO1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbiYjNDM7XHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcbiYjNDM7XHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbiYjNDM7XHRcdCAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NCksXG4mIzQzO1x0XHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9YRFBfTElWRV9GUkFNRVMsXG4mIzQzO1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmVkaXJlY3RfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcbiYjNDM7XHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfUkVESVJFQ1QpO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1JFRElSRUNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0aWYgKHNldHVwX25ldG5zKCkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgxXCYjMzQ7KTtcbiYjNDM7XHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoMlwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDEpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGgyKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuJiM0MztcdCAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDImIzM5O3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xuJiM0MztcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9jb3VudCksXG4mIzQzO1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdHhkcF9hdHRhY2hlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIHJlZHVjaWJsZSBWTEFOIGVncmVzczogcmVzb2x2ZXMgdG8gdGhlIHBoeXNpY2FsIHBhcmVudCB2ZXRoMSAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihyZWR1Y2libGUgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgUkVESVJFQ1RfTlBLVFMsIFwmIzM0O3JlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCwgMCwgXCYjMzQ7cmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGVsaXZlcmVkLCAwLCBcJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4mIzQzO1x0ICogdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIHJlZGlyZWN0aW5nIHRvIHRoZSBpbm5lclxuJiM0MztcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxuJiM0MztcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4mIzQzO1x0ICogeGRwX2RvX2ZsdXNoKCkuIHZldGgyJiMzOTtzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxuJiM0MztcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjayYjMzk7cyBmb3J3YXJkaW5nXG4mIzQzO1x0ICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHFpbnEgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihxaW5xIGVncmVzcylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcJiMzNDtxaW5xIGVncmVzcyBwYXNzZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCAwLCBcJiMzNDtxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmICh4ZHBfYXR0YWNoZWQpXG4mIzQzO1x0XHRicGZfeGRwX2RldGFjaCh2ZXRoMl9pZHgsIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XG4mIzQzO1x0aWYgKG5zdG9rZW4pXG4mIzQzO1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCBcJiMzNDsgTlNfUkVESVJFQ1QpO1xuJiM0MztcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjM2YjcyMThkOWFlMmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTQsNyAmIzQzOzQsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3RfY2xzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTtcbiBpbnQgZmliX2xvb2t1cF9yZXQgPSAwO1xuQEAgLTE5LDQgJiM0MzsyMyw1NyBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZmliX2xvb2t1cF9yZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNmZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSxcbiYjNDM7XHRcdFx0XHRcdGxvb2t1cF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBYRFBfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJlZGlyZWN0ZWQgPSAwO1xuJiM0MztpbnQgcGFzc2VkID0gMDtcbiYjNDM7aW50IGRlbGl2ZXJlZCA9IDA7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtcztcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XG4mIzQzO1x0XHRyZWRpcmVjdGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFzc2VkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpldGggPSBkYXRhO1xuJiM0MztcdHN0cnVjdCBpcGhkciAqaXBoO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNvdW50IG9ubHkgdGhlIHRlc3QmIzM5O3MgVENQIGZyYW1lczogdGhlIG5ldG5zIGhhcyBsaXZlXG4mIzQzO1x0ICogbGluay1sb2NhbCB0cmFmZmljIChEQUQsIE1MRCkgdGhhdCB3b3VsZCBzYXRpc2Z5IGEgYmFyZVxuJiM0MztcdCAqIGNvdW50ZXJcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdCAgICBldGgtXHUwMDNlaF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKVxuJiM0MztcdFx0cmV0dXJuIFhEUF9EUk9QO1xuJiM0MztcdGlwaCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fCBpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRyZXR1cm4gWERQX0RST1A7XG4mIzQzO1xuJiM0MztcdGRlbGl2ZXJlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIFhEUF9EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjE6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZmliX3ZsYW5faW5wdXRfZGV2JiMzNDssCiAgICAmIzM0O2JwZl9maWJfc2V0X2Z3ZF9wYXJhbXMmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2smIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRhN2YxZmEwOGRjZTFlMWMyNTQwMGJlMGYzY2YxMWRiMzBjOWRjMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAyMTo1NjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCA4OWIzNmRlNWZkYmI2ZC4uZmYwMzAxOWFiZTM1NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIgewogICoJCQlVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi0mZ3Q7bWFyayBmb3IgdGhlIGZpYiBsb29rdXAuCiAgKgkJCVRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCwKICAqCQkJYXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKgomIzQzOyAqCQkJSWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZQomIzQzOyAqCQkJcGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0CiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSSBmcm9tCiYjNDM7ICoJCQl0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotJmd0O2lmaW5kZXggd2l0aCB0aGUKJiM0MzsgKgkJCXBhcmVudCYjMzk7cyBpZmluZGV4LiAqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSUQKJiM0MzsgKgkJCW9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG8KJiM0MzsgKgkJCXNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLSZndDtzbWFjIGlzCiYjNDM7ICoJCQl0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGUKJiM0MzsgKgkJCXBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXQKJiM0MzsgKgkJCWlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSwKJiM0MzsgKgkJCXRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1cwomIzQzOyAqCQkJb25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi0mZ3Q7aWZpbmRleAomIzQzOyAqCQkJbGVmdCBhdCB0aGUgaW5wdXQuIFRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duCiYjNDM7ICoJCQlpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0CiYjNDM7ICoJCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiwgcmUtaW5pdGlhbGl6aW5nICpwYXJhbXMqCiYjNDM7ICoJCQlmaXJzdDogb3V0cHV0IGZpZWxkcyBvdmVyd3JpdGUgdGhlIGlucHV0cyB0aGV5IHNoYXJlCiYjNDM7ICoJCQlzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHMKJiM0MzsgKgkJCWFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwCiYjNDM7ICoJCQl0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHQKJiM0MzsgKgkJCXN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi0mZ3Q7bXR1X3Jlc3VsdC4KJiM0MzsgKgkJCVRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zCiYjNDM7ICoJCQlyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU4KJiM0MzsgKgkJCWRldmljZSBkaXJlY3RseS4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKioKJiM0MzsgKgkJCVRyZWF0ICpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJCiYjNDM7ICoJCQlhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzcwomIzQzOyAqCQkJaGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZwomIzQzOyAqCQkJb24gKnBhcmFtcyotJmd0O2lmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mCiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSTsgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBtdXN0IGJlCiYjNDM7ICoJCQlFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlCiYjNDM7ICoJCQkqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotJmd0O2lmaW5kZXggaXMgaXRzZWxmIGEgVkxBTgomIzQzOyAqCQkJZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYQomIzQzOyAqCQkJYm9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkCiYjNDM7ICoJCQl0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuCiYjNDM7ICoJCQlBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpcwomIzQzOyAqCQkJZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKioKJiM0MzsgKgkJCShyZXR1cm5zICoqLUVJTlZBTCoqKS4KICAqCiAgKgkJKmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3IKICAqCQkqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy4KQEAgLTczMjcsNiAmIzQzOzczNjgsOCBAQCBlbnVtIHsKIAlCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVICZsdDsmbHQ7IDMpLAogCUJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgJmx0OyZsdDsgNCksCiAJQlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSAmbHQ7Jmx0OyA1KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSAmbHQ7Jmx0OyA2KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSAmbHQ7Jmx0OyA3KSwKIH07CiAKIGVudW0gewpAQCAtNzM0MCw2ICYjNDM7NzM4Myw3IEBAIGVudW0gewogCUJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi8KIAlCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi8KIAlCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqLwomIzQzOwlCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi8KIH07CiAKIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CkBAIC03MzkzLDcgJiM0Mzs3NDM3LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQkvKiBvdXRwdXQgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZQomIzQzOwkJCSAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkCiYjNDM7CQkJICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoCiYjNDM7CQkJICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlCiYjNDM7CQkJICogdGhlIGxvb2t1cCBieS4KJiM0MzsJCQkgKi8KIAkJCV9fYmUxNgloX3ZsYW5fcHJvdG87CiAJCQlfX2JlMTYJaF92bGFuX1RDSTsKIAkJfTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNjIwMSwyMSAmIzQzOzYyMDEsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0gewogI2VuZGlmCiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KQomIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAomIzQzOwkJCQkgIHUzMiBmbGFncywgdTMyIG10dSwgdTMyIGluX2lmaW5kZXgpCiB7CiAJcGFyYW1zLSZndDtoX3ZsYW5fVENJID0gMDsKIAlwYXJhbXMtJmd0O2hfdmxhbl9wcm90byA9IDA7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpCiYjNDM7CWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikgJmFtcDsmYW1wOyBpc192bGFuX2RldihkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktJmd0O3JlYWxfZGV2OwomIzQzOwomIzQzOwkJaWYgKCFpc192bGFuX2RldihyZWFsX2RldikgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gdmxhbl9kZXZfdmxhbl9wcm90byhkZXYpOwomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7CiYjNDM7CQkJcGFyYW1zLSZndDtpZmluZGV4ID0gcmVhbF9kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aWZpbmRleCA9IGluX2lmaW5kZXg7CiYjNDM7CQkJcmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKG10dSkKIAkJcGFyYW1zLSZndDttdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi8KIAogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CV9fYmUxNiBwcm90byA9IHBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7CiYjNDM7CXUxNiB2aWQ7CiYjNDM7CiYjNDM7CWlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkgJmFtcDsmYW1wOyBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CXZpZCA9IG50b2hzKHBhcmFtcy0mZ3Q7aF92bGFuX1RDSSkgJmFtcDsgVkxBTl9WSURfTUFTSzsKJiM0MzsJdmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTsKJiM0MzsJaWYgKCF2bGFuX2RldiB8fCAhKHZsYW5fZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfVVApIHx8CiYjNDM7CSAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiB2bGFuX2RldjsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpCiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAkJCSAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KQogewomIzQzOwl1MzIgaW5faWZpbmRleCA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7CiAJc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYzsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAkvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovCiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCWlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSkKQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJCWZsNC5mbG93aTRfaWlmID0gMTsKIAkJZmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJfSBlbHNlIHsKLQkJZmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2LSZndDtpZmluZGV4LCBub3QgcGFyYW1zLSZndDtpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlCiYjNDM7CQkgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWZsNC5mbG93aTRfaWlmID0gZGV2LSZndDtpZmluZGV4OwogCQlmbDQuZmxvd2k0X29pZiA9IDA7CiAJfQogCWZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy0mZ3Q7dG9zKTsKQEAgLTYzNDcsNyAmIzQzOzYzOTgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAltZW1jcHkocGFyYW1zLSZndDtzbWFjLCBkZXYtJmd0O2Rldl9hZGRyLCBFVEhfQUxFTik7CiAKIHNldF9md2RfcGFyYW1zOgotCXJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTsKJiM0MzsJcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpOwogfQogI2VuZGlmCiAKQEAgLTYzNTcsNiAmIzQzOzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X3NyYzsKIAlzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X2RzdDsKJiM0MzsJdTMyIGluX2lmaW5kZXggPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJc3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC02Mzc0LDYgJiM0Mzs2NDI2LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAlpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTsKIAlpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LSZndDtjbmYuZm9yd2FyZGluZykpKQogCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7CkBAIC02MzgyLDcgJiM0Mzs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCQlmbDYuZmxvd2k2X2lpZiA9IDE7CiAJCW9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLSZndDtpZmluZGV4OwogCX0gZWxzZSB7Ci0JCW9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLSZndDtpZmluZGV4OwomIzQzOwkJLyoKJiM0MzsJCSAqIGRldi0mZ3Q7aWZpbmRleCwgbm90IHBhcmFtcy0mZ3Q7aWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZQomIzQzOwkJICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLgomIzQzOwkJICovCiYjNDM7CQlvaWYgPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQlmbDYuZmxvd2k2X2lpZiA9IG9pZjsKIAkJZmw2LmZsb3dpNl9vaWYgPSAwOwogCQlzdHJpY3QgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSOwogCX0KQEAgLTY0ODYsMTMgJiM0Mzs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCW1lbWNweShwYXJhbXMtJmd0O3NtYWMsIGRldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogc2V0X2Z3ZF9wYXJhbXM6Ci0JcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpOwomIzQzOwlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7CiB9CiAjZW5kaWYKIAogI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcCiAJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0ggfCBCUEZfRklCX0xPT0tVUF9UQklEIHwgXAotCQkJICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKQomIzQzOwkJCSAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSyB8IFwKJiM0MzsJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CWlmIChmbGFncyAmYW1wOyB+QlBGX0ZJQl9MT09LVVBfTUFTSykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZmxhZ3MgJmFtcDsgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQogCiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCwKIAkgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpCkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHBhcmFtcy0mZ3Q7ZmFtaWx5KSB7CkBAIC02NTM4LDcgJiM0Mzs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocGFyYW1zLSZndDt0b3RfbGVuKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5mZjAzMDE5YWJlMzU1NCAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzUzMiw2ICYjNDM7MzUzMiw0NyBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJCVVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLSZndDttYXJrIGZvciB0aGUgZmliIGxvb2t1cC4KICAqCQkJVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULAogICoJCQlhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuCiYjNDM7ICoJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqCiYjNDM7ICoJCQlJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlCiYjNDM7ICoJCQlwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXQKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGZyb20KJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi0mZ3Q7aWZpbmRleCB3aXRoIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRAomIzQzOyAqCQkJb25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0bwomIzQzOyAqCQkJc2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotJmd0O3NtYWMgaXMKJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdAomIzQzOyAqCQkJaXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLAomIzQzOyAqCQkJdGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzCiYjNDM7ICoJCQlvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLSZndDtpZmluZGV4CiYjNDM7ICoJCQlsZWZ0IGF0IHRoZSBpbnB1dC4gVG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24KJiM0MzsgKgkJCWlmaW5kZXgsIHJlcGVhdCB0aGUgbG9va3VwIHdpdGhvdXQKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqLCByZS1pbml0aWFsaXppbmcgKnBhcmFtcyoKJiM0MzsgKgkJCWZpcnN0OiBvdXRwdXQgZmllbGRzIG92ZXJ3cml0ZSB0aGUgaW5wdXRzIHRoZXkgc2hhcmUKJiM0MzsgKgkJCXN0b3JhZ2Ugd2l0aC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkcwomIzQzOyAqCQkJYXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXAKJiM0MzsgKgkJCXRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdAomIzQzOyAqCQkJc3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLSZndDttdHVfcmVzdWx0LgomIzQzOyAqCQkJVGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXMKJiM0MzsgKgkJCXJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTgomIzQzOyAqCQkJZGV2aWNlIGRpcmVjdGx5LgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKgomIzQzOyAqCQkJVHJlYXQgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kKJiM0MzsgKgkJCWFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzCiYjNDM7ICoJCQloYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnCiYjNDM7ICoJCQlvbiAqcGFyYW1zKi0mZ3Q7aWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2YKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fVENJOyAqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIG11c3QgYmUKJiM0MzsgKgkJCUVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2UKJiM0MzsgKgkJCSoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi0mZ3Q7aWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOCiYjNDM7ICoJCQlkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhCiYjNDM7ICoJCQlib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWQKJiM0MzsgKgkJCXRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy4KJiM0MzsgKgkJCUEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzCiYjNDM7ICoJCQlmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKgomIzQzOyAqCQkJKHJldHVybnMgKiotRUlOVkFMKiopLgogICoKICAqCQkqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvcgogICoJCSoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLgpAQCAtNzMyNyw2ICYjNDM7NzM2OCw4IEBAIGVudW0gewogCUJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgJmx0OyZsdDsgMyksCiAJQlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSAmbHQ7Jmx0OyA0KSwKIAlCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVICZsdDsmbHQ7IDUpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVICZsdDsmbHQ7IDYpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVICZsdDsmbHQ7IDcpLAogfTsKIAogZW51bSB7CkBAIC03MzQwLDYgJiM0Mzs3MzgzLDcgQEAgZW51bSB7CiAJQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovCiYjNDM7CUJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqLwogfTsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIHsKQEAgLTczOTMsNyAmIzQzOzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHsKIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCS8qIG91dHB1dCAqLwomIzQzOwkJCS8qCiYjNDM7CQkJICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlCiYjNDM7CQkJICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWQKJiM0MzsJCQkgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGgKJiM0MzsJCQkgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGUKJiM0MzsJCQkgKiB0aGUgbG9va3VwIGJ5LgomIzQzOwkJCSAqLwogCQkJX19iZTE2CWhfdmxhbl9wcm90bzsKIAkJCV9fYmUxNgloX3ZsYW5fVENJOwogCQl9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCmluZGV4IGJkNzY1ODk1ODAwNDFmLi5mNzM2MWY5YTM0NTkyZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMjMgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaWYuaCZndDsKIApAQCAtMjMsNiAmIzQzOzI0LDcgQEAKICNkZWZpbmUgSVBWNF9UQklEX0FERFIJCSYjMzQ7MTcyLjAuMC4yNTQmIzM0OwogI2RlZmluZSBJUFY0X1RCSURfTkVUCQkmIzM0OzE3Mi4wLjAuMCYjMzQ7CiAjZGVmaW5lIElQVjRfVEJJRF9EU1QJCSYjMzQ7MTcyLjAuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVAkmIzM0OzE3Mi4wLjAuNSYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9BRERSCQkmIzM0O2ZkMDA6OkZGRkYmIzM0OwogI2RlZmluZSBJUFY2X1RCSURfTkVUCQkmIzM0O2ZkMDA6OiYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9EU1QJCSYjMzQ7ZmQwMDo6MiYjMzQ7CkBAIC0zNyw2ICYjNDM7MzksNDEgQEAKICNkZWZpbmUgSVBWNl9MT0NBTAkJJiMzNDtmZDAxOjozJiMzNDsKICNkZWZpbmUgSVBWNl9HVzEJCSYjMzQ7ZmQwMTo6MSYjMzQ7CiAjZGVmaW5lIElQVjZfR1cyCQkmIzM0O2ZkMDE6OjImIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRAkJCTEwMAomIzQzOyNkZWZpbmUgVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDAmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRF9ET1dOCQkxMDIKJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTgkJJiMzNDt2ZXRoMS4xMDImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRQkmIzM0O3ZldGgxLjIwMCYjMzQ7CiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFCSYjMzQ7dmV0aDEuMjAwLjMwMCYjMzQ7CiYjNDM7I2RlZmluZSBWTEFOX1RBQkxFCQkmIzM0OzMwMCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUgkmIzM0OzEwLjUuMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0VHUkVTU19EU1QJJiMzNDsxMC41LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUCQkmIzM0OzEwLjcuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9EU1QJCSYjMzQ7MTAuNi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0dXCQkmIzM0OzEwLjUuMC4xJiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSCSYjMzQ7ZmQwMjo6MjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUCSYjMzQ7ZmQwMjo6MiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRFNUCQkmIzM0O2ZkMDM6OjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0dXCQkmIzM0O2ZkMDI6OjEmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VECQk5OTkKJiM0MzsjZGVmaW5lIFZSRl9JRkFDRQkJJiMzNDt2cmYtYmx1ZSYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVEFCTEUJCSYjMzQ7MTAwMCYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRAkJMTAxCiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUgkmIzM0OzEwLjguMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfR1cJCSYjMzQ7MTAuOC4wLjEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUCQkmIzM0OzEwLjkuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRAkJNTAKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMi41MCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1QJJiMzNDsxNzIuMi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9CT05EX1ZMQU5fRFNUCSYjMzQ7MTAuMTEuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUCSYjMzQ7MTAuNS45LjImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lECQkyMDAKJiM0MzsjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRAkzMDAKJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0UJCSYjMzQ7Ym9uZDk5JiMzNDsKJiM0MzsjZGVmaW5lIEJPTkRfUE9SVAkJJiMzNDt2ZXRoMyYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1BPUlRfUEVFUgkJJiMzNDt2ZXRoNCYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSUQJCTUwMAogI2RlZmluZSBETUFDCQkJJiMzNDsxMToxMToxMToxMToxMToxMSYjMzQ7CiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH0KICNkZWZpbmUgRE1BQzIJCQkmIzM0OzAxOjAxOjAxOjAxOjAxOjAxJiMzNDsKQEAgLTUyLDYgJiM0Mzs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHsKIAlfX3UzMiB0YmlkOwogCV9fdTggZG1hY1s2XTsKIAlfX3UzMiBtYXJrOwomIzQzOwkvKgomIzQzOwkgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnCiYjNDM7CSAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KQomIzQzOwkgKi8KJiM0MzsJX191MTYgdmxhbl9wcm90bzsKJiM0MzsJX191MTYgdmxhbl9pZDsKJiM0MzsJYm9vbCBjaGVja192bGFuOwomIzQzOwljb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy0mZ3Q7aWZpbmRleCBhZnRlciBsb29rdXAgKi8KJiM0MzsJY29uc3QgY2hhciAqaWlmOwkgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqLwomIzQzOwlfX3UxNiB0b3RfbGVuOwkJICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqLwomIzQzOwlfX3UxNiBleHBlY3RlZF9tdHU7CSAgLyogZXhwZWN0ZWQgbXR1X3Jlc3VsdCAodW5pb24gd2l0aCB0b3RfbGVuKSAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiAJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsCiAJICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0CiYjNDM7CSAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXQKJiM0MzsJICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzbwomIzQzOwkgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0JiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULAomIzQzOwkgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCB9LAogCXsgLmRlc2MgPSAmIzM0O0lQdjYgVEJJRCBsb29rdXAgZmFpbHVyZSYjMzQ7LAogCSAgLmRhZGRyID0gSVBWNl9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAogCSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsCkBAIC0xNDIsNiAmIzQzOzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSwKIAkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAogCSAgLm1hcmsgPSBNQVJLLCB9LAomIzQzOwkvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovCiYjNDM7CS8qCiYjNDM7CSAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGEKJiM0MzsJICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsCiYjNDM7CSAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlCiYjNDM7CSAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZQomIzQzOwkgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy0mZ3Q7aWZpbmRleAomIzQzOwkgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZQomIzQzOwkgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS4KJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG10dQomIzQzOwkgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKQomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsCiYjNDM7CSAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2UmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5paWYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IEJPTkRfSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8CiYjNDM7CQkJICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELAomIzQzOwkgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSwKJiM0MzsJLyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZyYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGUmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LAomIzQzOwkgIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlCiYjNDM7CSAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3QKJiM0MzsJICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJLyoKJiM0MzsJICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbAomIzQzOwkgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmUKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd24mIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSwKJiM0MzsJLyoKJiM0MzsJICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzCiYjNDM7CSAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3MKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXgmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGUKJiM0MzsJICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydAomIzQzOwkgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cykKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELAomIzQzOwkgIC5paWYgPSBCT05EX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSUQmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7dW5rbm93biBmbGFnIGJpdCByZWplY3RlZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSAoMSAmbHQ7Jmx0OyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAogfTsKIAogc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKQpAQCAtMjA0LDYgJiM0Mzs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZCkKIAlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAlTWVMoZmFpbCwgJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZAomIzQzOwkgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0cwomIzQzOwkgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy4KJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CS8qCiYjNDM7CSAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGUKJiM0MzsJICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUsIHdoaWNoIHRoZQomIzQzOwkgKiBuby1mbGFnIGFybSBiZWxvdyBwaW5zCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZCYjMzQ7LCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWwKJiM0MzsJICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi8mIzM0OyBWTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMCYjMzQ7LAomIzQzOwkgICAgUUlOUV9PVVRFUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwJiMzNDssCiYjNDM7CSAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzJiMzNDssCiYjNDM7CSAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlcyYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXMmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXMmIzM0OywgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7CiYjNDM7CiYjNDM7CS8qIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSBib25kJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgQk9ORF9QT1JULCBCT05EX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgQk9ORF9QT1JUKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZCYjMzQ7LAomIzQzOwkgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXAmIzM0OywgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcy4lZCYjMzQ7LAomIzQzOwkgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZQomIzQzOwkgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlcyYjMzQ7LCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZSRl9WTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgJiMzNDsuZm9yd2FyZGluZykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXMmIzM0OywKJiM0MzsJICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7CiYjNDM7CiYjNDM7CS8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi8KJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZ2Nfc3RhbGVfdGltZSYjMzQ7LCAmIzM0OzkwMCYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmdjX3N0YWxlX3RpbWUpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGUmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTsKJiM0MzsKJiM0MzsJLyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzJiMzNDssCiYjNDM7CSAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7CiYjNDM7CiAJcmV0dXJuIDA7CiBmYWlsOgogCXJldHVybiAtMTsKQEAgLTIxOCw5ICYjNDM7NTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKIAogCXBhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKLQlwYXJhbXMtJmd0O2lmaW5kZXggPSBpZmluZGV4OwomIzQzOwlwYXJhbXMtJmd0O2lmaW5kZXggPSB0ZXN0LSZndDtpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LSZndDtpaWYpIDogaWZpbmRleDsKIAlwYXJhbXMtJmd0O3RiaWQgPSB0ZXN0LSZndDt0YmlkOwogCXBhcmFtcy0mZ3Q7bWFyayA9IHRlc3QtJmd0O21hcms7CiYjNDM7CXBhcmFtcy0mZ3Q7dG90X2xlbiA9IHRlc3QtJmd0O3RvdF9sZW47CiYjNDM7CiYjNDM7CS8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqLwomIzQzOwlpZiAodGVzdC0mZ3Q7bG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gaHRvbnModGVzdC0mZ3Q7dmxhbl9wcm90byk7CiYjNDM7CQlwYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyh0ZXN0LSZndDt2bGFuX2lkKTsKJiM0MzsJfQogCiAJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC0mZ3Q7ZGFkZHIsIHBhcmFtcy0mZ3Q7aXB2Nl9kc3QpID09IDEpIHsKIAkJcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUNjsKQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiAJc3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07CiAJc3RydWN0IGZpYl9sb29rdXAgKnNrZWw7Ci0JaW50IHByb2dfZmQsIGVyciwgcmV0LCBpOwomIzQzOwlpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTsKIAogCS8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLSZndDtkYXRhLCBzbwogCSAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuCkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJICAgIC5jdHhfaW4gPSAmYW1wO3NrYiwKIAkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLAogCSk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJKTsKIAogCXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiAJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47CiAJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwKTsKJiM0MzsJeGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXBfeGRwKTsKIAogCVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19URVNUKTsKIApAQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMmIzM0OykpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC4KJiM0MzsJCSAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgLUVJTlZBTCwKJiM0MzsJCQkJICAmIzM0O3RjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTiYjMzQ7KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCwKIAkJCSAgJiMzNDtmaWJfbG9va3VwX3JldCYjMzQ7KTsKIApAQCAtMzUyLDYgJiM0Mzs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdCkKIAkJCWFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTsKIAomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldikKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwKJiM0MzsJCQkJICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCAmIzM0O2lmaW5kZXgmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDttdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsCiYjNDM7CQkJCSAgJiMzNDttdHVfcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O2hfdmxhbl9wcm90byYjMzQ7KTsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgJiMzNDtoX3ZsYW5fVENJJiMzNDspOwomIzQzOwkJfQomIzQzOwogCQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKIAkJaWYgKCFBU1NFUlRfRVEocmV0LCAwLCAmIzM0O2RtYWMgbm90IG1hdGNoJiMzNDspKSB7CiAJCQljaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTsKQEAgLTM2MSwxNyAmIzQzOzc2OCwzMjIgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJCXByaW50ZigmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzICYjMzQ7LCBleHBlY3RlZCwgYWN0dWFsKTsKIAkJfQogCi0JCS8vIGVuc3VyZSB0YmlkIGlzIHplcm8mIzM5O2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuCi0JCWlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7CiYjNDM7CQkvKgomIzQzOwkJICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aAomIzQzOwkJICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuCiYjNDM7CQkgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSkgewogCQkJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zLnRiaWQsIDAsCiAJCQkJCSYjMzQ7ZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm8mIzM0OykpCiAJCQkJZ290byBmYWlsOwogCQl9CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGUKJiM0MzsJICogY3VycmVudCBuZXRucyYjMzk7IGxvb3BiYWNrIGZvciBjdHgtJmd0O3J4cS0mZ3Q7ZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVAomIzQzOwkgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0cwomIzQzOwkgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYgomIzQzOwkgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCAmYW1wO3Rlc3RzW2ldLCBza2IuaWZpbmRleCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IHRlc3RzW2ldLmxvb2t1cF9mbGFnczsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt4ZHAgdGVzdF9ydW4mIzM0OykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsCiYjNDM7CQkJICAgICAgICYjMzQ7eGRwIGZpYl9sb29rdXBfcmV0JiMzNDspKQomIzQzOwkJCXByaW50ZigmIzM0Oyh4ZHApICVzXG4mIzM0OywgdGVzdHNbaV0uZGVzYyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LAomIzQzOwkJCQkgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksCiYjNDM7CQkJCSAgJiMzNDt4ZHAgaWZpbmRleCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpCiYjNDM7CQkJYXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O3hkcCBoX3ZsYW5fcHJvdG8mIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksCiYjNDM7CQkJCSAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksICYjMzQ7eGRwIGhfdmxhbl9UQ0kmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKJiM0MzsJCUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7eGRwIGRtYWMmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXMKJiM0MzsJCSAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtJmd0O210dSBhbmQgaXMKJiM0MzsJCSAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSAmYW1wOyZhbXA7IHRlc3RzW2ldLnRvdF9sZW4pCiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O210dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSwKJiM0MzsJCQkJICAmIzM0O3hkcCBtdHVfcmVzdWx0JiMzNDspOwomIzQzOwl9CiYjNDM7CiBmYWlsOgogCWlmIChuc3Rva2VuKQogCQljbG9zZV9uZXRucyhuc3Rva2VuKTsKIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IE5TX1RFU1QpOwogCWZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBOU19WTEFOX0EJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYSYjMzQ7CiYjNDM7I2RlZmluZSBOU19WTEFOX0IJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfQUREUgkmIzM0OzEwLjY2LjAuMSYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfRFNUCSYjMzQ7MTAuNjYuMC4yJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgVkxBTiBkZXZpY2UgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMgd2hpbGUgc3RheWluZyByZWdpc3RlcmVkCiYjNDM7ICogb24gaXRzIHBhcmVudC4gTmVpdGhlciBkaXJlY3Rpb24gbWF5IHRoZW4gY3Jvc3MgdGhlIGJvdW5kYXJ5OiB0aGUKJiM0MzsgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCYjMzk7cyBpZmluZGV4LCBhbmQgdGhlCiYjNDM7ICogaW5wdXQgZmxhZyBtdXN0IGZhaWwgY2xvc2VkIHJhdGhlciB0aGFuIHVzZSBhIGZvcmVpZ24gaW5ncmVzcy4KJiM0MzsgKi8KJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX25ldG5zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKJiM0MzsJc3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07CiYjNDM7CXN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDsKJiM0MzsJaW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHJ1bl9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjYsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLAomIzQzOwkJICAgIC5jdHhfaW4gPSAmYW1wO3NrYiwKJiM0MzsJCSAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSwKJiM0MzsJKTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjYsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cCk7CiYjNDM7CXhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwX3hkcCk7CiYjNDM7CWZpYl9wYXJhbXMgPSAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtczsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1ZMQU5fQSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19WTEFOX0IpOwomIzQzOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zKGEpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4JiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXAmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDcgbmFtZSB2ZXRoNy42NiB0eXBlIHZsYW4gaWQgNjYmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzJiMzNDssIE5TX1ZMQU5fQik7CiYjNDM7CS8qCiYjNDM7CSAqIHVwIGl0IGluIEIgYmVmb3JlIHRoZSBpbnB1dCBsb29rdXA6IHRoZSBtb3ZlIGNsb3NlZCBpdCwgYW5kIGEKJiM0MzsJICogZG93biBkZXZpY2UgZmFpbHMgdGhlIHJlc29sdmVyIG9uIElGRl9VUCBiZWZvcmUgcmVhY2hpbmcgdGhlCiYjNDM7CSAqIG5ldG5zIGNoZWNrIHRoaXMgc3VidGVzdCBleGlzdHMgdG8gcGluCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCBkZXYgdmV0aDcuNjYgdXAmIzM0OywgTlNfVkxBTl9CKTsKJiM0MzsKJiM0MzsJcGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDcmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0CiYjNDM7CSAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZAomIzQzOwkgKi8KJiM0MzsJc2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwlmaWJfcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyg2Nik7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8CiYjNDM7CQkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO3J1bl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGlucHV0KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkJICAmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCBwYXJlbnRfaWR4LCAmIzM0O2lmaW5kZXggdW50b3VjaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgaHRvbnMoNjYpLCAmIzM0O3RhZyB1bnRvdWNoZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zKGIpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudAomIzQzOwkgKiBpcyBpbiB0aGUgb3RoZXIgbmV0bnMsIHNvIHRoZSBzd2FwIG11c3Qgbm90IGhhcHBlbgomIzQzOwkgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2IHZldGg3LjY2JiMzNDssIElQVjRfVkxBTl9ORVROU19BRERSKTsKJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvdmV0aDcuNjYvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwoZm9yd2FyZGluZykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoNy42NiYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3LjY2KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJbWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpOwomIzQzOwlmaWJfcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlmaWJfcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwomIzQzOwlmaWJfcGFyYW1zLSZndDtpZmluZGV4ID0gdmxhbl9pZHg7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihkc3QpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCA9IC0xOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGVncmVzcykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwKJiM0MzsJCSAgJiMzNDtlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCB2bGFuX2lkeCwKJiM0MzsJCSAgJiMzNDtmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgMCwgJiMzNDt2bGFuIGZpZWxkcyB6ZXJvJiMzNDspOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChuc3Rva2VuKQomIzQzOwkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVkxBTl9BKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19WTEFOX0IpOwomIzQzOwlmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDAKJiM0MzsjZGVmaW5lIE5TX1JFRElSRUNUICYjMzQ7ZmliX2xvb2t1cF9yZWRpcmVjdF9ucyYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZWdyZXNzIGZsYWcgZXhpc3RzIHNvIGFuIFhEUCBwcm9ncmFtIGNhbiByZWRpcmVjdCB0byB0aGUgcGh5c2ljYWwKJiM0MzsgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXQKJiM0MzsgKiB4ZHBfZG9fZmx1c2goKSwgYmVjYXVzZSBhIFZMQU4gZGV2aWNlIGhhcyBubyBuZG9feGRwX3htaXQuIERyaXZlIHJlYWwKJiM0MzsgKiBmcmFtZXMgd2l0aCBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywgd2hpY2ggcnVucyB0aGUgbmF0aXZlCiYjNDM7ICogeGRwX2RvX3JlZGlyZWN0KCkgJiM0MzsgeGRwX2RvX2ZsdXNoKCkgcGF0aDogYSByZWR1Y2libGUgVkxBTiBlZ3Jlc3MKJiM0MzsgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblEKJiM0MzsgKiBlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kIGlzIHBhc3NlZCB0byB0aGUgc3RhY2sgaW5zdGVhZCBvZgomIzQzOyAqIHJlZGlyZWN0ZWQgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBzaWxlbnRseSBkcm9wIGl0LgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fcmVkaXJlY3Qodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZWRpcmVjdF9mZCwgZXJyLCB2ZXRoMV9pZHgsIHZldGgyX2lkeCA9IC0xOwomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKJiM0MzsJc3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMOwomIzQzOwlib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y0LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSwKJiM0MzsJCSAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywKJiM0MzsJCSAgICAucmVwZWF0ID0gUkVESVJFQ1RfTlBLVFMsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcmVkaXJlY3RfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7CiYjNDM7CWZpYl9wYXJhbXMgPSAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtczsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1JFRElSRUNUKTsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfUkVESVJFQ1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlpZiAoc2V0dXBfbmV0bnMoKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMSYjMzQ7KTsKJiM0MzsJdmV0aDJfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMiYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMSkmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmVkaXJlY3QgdG8gdmV0aDEgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLiB2ZXRoX3hkcF94bWl0KCkKJiM0MzsJICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMiYjMzk7cyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zCiYjNDM7CSAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy4KJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnhkcF9jb3VudCksCiYjNDM7CQkJICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMiYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJeGRwX2F0dGFjaGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovCiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZldGgxX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Bhc3NlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Bhc3NlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O2RlbGl2ZXJlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kCiYjNDM7CSAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXIKJiM0MzsJICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlCiYjNDM7CSAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0CiYjNDM7CSAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMiYjMzk7cyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2UKJiM0MzsJICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJiMzOTtzIGZvcndhcmRpbmcKJiM0MzsJICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LgomIzQzOwkgKi8KJiM0MzsJbWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpOwomIzQzOwlmaWJfcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlmaWJfcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwomIzQzOwlmaWJfcGFyYW1zLSZndDtpZmluZGV4ID0gdmV0aDFfaWR4OwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfc3JjKSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihzcmMpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihxaW5xIGRzdCkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cmVkaXJlY3RlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHFpbnEgZWdyZXNzKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtxaW5xIGVncmVzcyBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQsIDAsICYjMzQ7cWlucSBlZ3Jlc3Mgbm90IHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKHhkcF9hdHRhY2hlZCkKJiM0MzsJCWJwZl94ZHBfZGV0YWNoKHZldGgyX2lkeCwgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTsKJiM0MzsJaWYgKG5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19SRURJUkVDVCk7CiYjNDM7CWZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjM2YjcyMThkOWFlMmVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKQEAgLTQsNyAmIzQzOzQsMTEgQEAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BrdF9jbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW4uaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTsKIGludCBmaWJfbG9va3VwX3JldCA9IDA7CkBAIC0xOSw0ICYjNDM7MjMsNTcgQEAgaW50IGZpYl9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiBUQ19BQ1RfU0hPVDsKIH0KIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCBmaWJfbG9va3VwX3hkcChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtmaWJfcGFyYW1zLCBzaXplb2YoZmliX3BhcmFtcyksCiYjNDM7CQkJCQlsb29rdXBfZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gWERQX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO2ludCByZWRpcmVjdGVkID0gMDsKJiM0MztpbnQgcGFzc2VkID0gMDsKJiM0MztpbnQgZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MztTRUMoJiMzNDt4ZHAmIzM0OykKJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtczsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpOwomIzQzOwlpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykgewomIzQzOwkJcmVkaXJlY3RlZCYjNDM7JiM0Mzs7CiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0KHBhcmFtcy5pZmluZGV4LCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXNzZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJdm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LSZndDtkYXRhOwomIzQzOwl2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpY3R4LSZndDtkYXRhX2VuZDsKJiM0MzsJc3RydWN0IGV0aGhkciAqZXRoID0gZGF0YTsKJiM0MzsJc3RydWN0IGlwaGRyICppcGg7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGNvdW50IG9ubHkgdGhlIHRlc3QmIzM5O3MgVENQIGZyYW1lczogdGhlIG5ldG5zIGhhcyBsaXZlCiYjNDM7CSAqIGxpbmstbG9jYWwgdHJhZmZpYyAoREFELCBNTEQpIHRoYXQgd291bGQgc2F0aXNmeSBhIGJhcmUKJiM0MzsJICogY291bnRlcgomIzQzOwkgKi8KJiM0MzsJaWYgKCh2b2lkICopKGV0aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CSAgICBldGgtJmd0O2hfcHJvdG8gIT0gYnBmX2h0b25zKEVUSF9QX0lQKSkKJiM0MzsJCXJldHVybiBYRFBfRFJPUDsKJiM0MzsJaXBoID0gKHZvaWQgKikoZXRoICYjNDM7IDEpOwomIzQzOwlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwgaXBoLSZndDtwcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCXJldHVybiBYRFBfRFJPUDsKJiM0MzsKJiM0MzsJZGVsaXZlcmVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIFhEUF9EUk9QOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIEJQRiBGSUIgTG9va3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBWTEFOIHN1cHBvcnQgdG8gdGhlIGBicGZfZmliX2xvb2t1cGAgaGVscGVyLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBmbGFncywgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtLCBzbyBmdXp6aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbW9kaWZpZWQgYW5kIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zLiBUaGUgbW9zdCBpbW1lZGlhdGUgdGFyZ2V0cyB0aGF0IGp1bXAgb3V0IGFyZToKCiogICBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2A6IFRoaXMgb25lJiMzOTtzIGxpa2VseSB0byBiZSBjb3JlIHRvIHRoZSBmb3J3YXJkaW5nIGxvZ2ljLgoqICAgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgOiBCZWluZyBhIG5ldyBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gVkxBTiBpbnB1dCBkZXZpY2UgaGFuZGxpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgYSBwcmltZSB0YXJnZXQgZm9yIHNjcnV0aW55LgoqICAgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgOiBUaGVzZSBhcmUgaG90IHBhdGhzIGluIHRoZSBGSUIgbG9va3VwLCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaW1wb3J0YW50LgoqICAgYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgOiBUaGVzZSBhcmUga2V5IEJQRiBoZWxwZXJzLCBzbyB0aGV5IHdpbGwgYmUgaW1wb3J0YW50IHRvIGFuYWx5emUuCgpJJiMzOTtsbCBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlbGllcyBvbiBgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkgb25lIHRvIGVuYWJsZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBhbHNvIGNvbmZpZ3VyZWQsIGJ1dCB0aG9zZSBhcmUgdXN1YWxseSBzdGFuZGFyZC4gSSYjMzk7bGwgYWxzbyBjaGVjayBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVkxBTl84MDIxUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTYyMDQ9c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIxMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5uZXQvY29yZS9maWx0ZXIuYy02MjEyLVx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY2MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBGaWx0ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgcmVxdWlyZW1lbnQgaGVyZSBzZWVtcyB0byBiZSBzdXBwb3J0IGZvciBgVkxBTl84MDIxUWAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBCZWZvcmUgSSBwcm9jZWVkLCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gY29uc2lkZXIgYmVzaWRlcyB0aGlzPyBJJiMzOTt2ZSBzZWVuIGEgcGF0Y2ggYXBwbGllZCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGZ1bmN0aW9uIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBWTEFOIGhhbmRsaW5nIGlzIGJlaW5nIGltcGxlbWVudGVkIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVlcGx5IHRvIGdhdWdlIHRoZSBlZmZlY3RpdmVuZXNzIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02MjA0PXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXG5uZXQvY29yZS9maWx0ZXIuYzo2MjMzOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzNC1cdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjI1ND1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjcxLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjcyOlx0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNzMtXHRcdGlmIChJU19FUlIoZGV2KSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NDA2PXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY0MjktXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MzA6XHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjQzMS1cdFx0aWYgKElTX0VSUihkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mjk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEZJQiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgRklCIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBpcyB6ZXJvaW5nIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIFNwZWNpZmljYWxseSwgdGhlIG9uZXMgZGlyZWN0bHkgcmVsYXRlZCB0byBWTEFOIGFuZCBmb3J3YXJkaW5nOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRoZSBsb29rdXAgZnVuY3Rpb25zLCBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIE9mIGNvdXJzZSwgd2UgYWxzbyBoYXZlIHRoZSBpcHY0IGFuZCBpcHY2IGxvb2t1cCB2YXJpYXRpb25zIGdldHRpbmcgdHdlYWtlZCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGZvcndhcmRpbmcgbG9naWMgYmVpbmcgbW9kaWZpZWQsIHNvIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIHJlYWxseSBkaWcgaW50by4KCk5vdywgbGV0JiMzOTtzIHNlZSwgdGhlIHBhdGNoIGlzIGFsc28gY2hlY2tpbmcgaWYgd2Ugb25seSBoYXZlIGBWTEFOXzgwMjFRYCBjb25maWd1cmVkLiBSaWdodCwgaXQmIzM5O3MgbGV2ZXJhZ2luZyBhIHN1aXRlIG9mIFZMQU4tcmVsYXRlZCBoZWxwZXJzOiBgaXNfdmxhbl9kZXZgLCBgdmxhbl9kZXZfcHJpdmAsIGB2bGFuX2Rldl92bGFuX3Byb3RvYCwgYHZsYW5fZGV2X3ZsYW5faWRgLCBhbmQgdGhhdCBSQ1UgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLiBPa2F5LCB0aGUgVkxBTiBjb2RlIHNob3VsZCBiZSBmYWlybHkgc3RhbmRhcmQgZnJvbSBoZXJlLCBidXQgSSB3b25kZXIsIGFyZSBhbGwgb2YgdGhlc2UgZGVwZW5kZW50IG9uIGBDT05GSUdfVkxBTl84MDIxUWAgb3IgcG90ZW50aWFsbHkgdGhlIG1vZHVsZSB2ZXJzaW9uLCBgQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFYD8gV2UmIzM5O3JlIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBWTEFOIHN1cHBvcnQgaXMgZWl0aGVyIGJ1aWx0LWluIG9yIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBob3cgdGhpcyBpcyBzdHJ1Y3R1cmVkLiBBbmQgdGhhdCBSQ1UgaGVscGVyPyBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBiZWluZyBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/IFRpbWUgdG8gY29uZmlybSB0aGF0LCBhbmQgYWxzbyBtYWtlIHN1cmUgbm90aGluZyB1bnVzdWFsIGlzIGJlaW5nIGRvbmUgd2l0aCB0aGUgVkxBTi1zcGVjaWZpYyBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jPTQwNjg9c3RhdGljIGJvb2wgYm54dF9yZV9jaGVja19pZl92bGFuX3ZhbGlkKHN0cnVjdCBibnh0X3JlX2RldiAqcmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzQtXHQgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6NDA3NTpcdGlmICghX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHJkZXYtXHUwMDNlbmV0ZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00MDc2LVx0XHRcdFx0ICAgICAgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuX2lkKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfaWZmX2Zyb21fbWFjKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jLTE4Ny1cdFx0XHRpZiAodmxhbiBcdTAwMjZcdTAwMjYgdmxhbiAhPSBWTEFOX1ZJRF9NQVNLKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYzoxODg6XHRcdFx0XHRkZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHZsYW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmMtMTg5LVx0XHRcdH0gZWxzZSBpZiAobmV0aWZfaXNfYm9uZF9zbGF2ZShkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jPTIxOD1pbnQgY3hnYjRfdXBkYXRlX3Jvb3RfZGV2X2NsaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmMtMjM2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkxBTl9OX1ZJRDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYzoyMzc6XHRcdHJvb3RfZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYy0yMzgtXHRcdGlmICghcm9vdF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc0Mz1zdGF0aWMgdm9pZCBtbHhzd19zcF9yaWZfZGVzdHJveV92bGFuX3VwcGVyKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODc1MC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjg3NTE6XHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHZpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUyLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc3MD1pbnQgbWx4c3dfc3Bfcm91dGVyX2JyaWRnZV92bGFuX2FkZChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTg4MzEtXHRcdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjg4MzI6XHRcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShicl9kZXYsIGh0b25zKEVUSF9QXzgwMjFRKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTg4MzMtXHRcdFx0XHRcdFx0ICAgICBvbGRfcHZpZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jPTQwODI9dm9pZCBxbGNuaWNfcmVzdG9yZV9pbmRldl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwOTEtXHRmb3JfZWFjaF9zZXRfYml0KHZpZCwgYWRhcHRlci1cdTAwM2V2bGFucywgVkxBTl9OX1ZJRCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwOTI6XHRcdGRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShuZXRkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkzLVx0XHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYz0zMDk9c3RhdGljIHZvaWQgZG9fbmVpZ2hfc29saWNpdChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4ICpidWYsIHUxNiB0Y2kpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI2LVx0aWYgKHRjaSkge1xuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM6MzI3Olx0XHRuZXRkZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LVx1MDAzZW5ldCwgaHRvbnMoRVRIX1BfODAyMVEpLFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI4LVx0XHRcdFx0XHRcdCAgdGNpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0xMjM9c3RydWN0IHZsYW5fcGNwdV9zdGF0cyB7XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMTM1LVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MTM2OmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNy1cdFx0XHRcdFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MjUzOl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yNTQtXHRcdCAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMD1ib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc1LS8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NzY6c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc3LVx0XHRcdFx0XHRfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTkzLVx0XHRpZiAodXBwZXJfZGV2KVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjk0Olx0XHRcdHJldHVybiBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UodXBwZXJfZGV2LFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTk1LVx0XHRcdFx0XHRcdCAgICB2bGFuX3Byb3RvLCB2bGFuX2lkKTtcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOTktfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEwMDpFWFBPUlRfU1lNQk9MKF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTAxLVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MTI0PXZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE3OS1cdGlmICh2aWQgIT0gMCkge1xubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxODA6XHRcdHZsYW5kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnItXHUwMDNlZGV2LCBza2ItXHUwMDNldmxhbl9wcm90byxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTgxLVx0XHRcdFx0XHRcdCAgIHZpZCk7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTQ9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTUtXHRcdC8qIGJ1aWxkIG5laWdoIHRhYmxlIGxvb2t1cCBvbiB0aGUgdmxhbiBkZXZpY2UgKi9cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDU2Olx0XHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVx1MDAzZWRldiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1Ny1cdFx0XHRcdFx0XHQgICB2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0Ni1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQ3Olx0dmxhbiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShiciwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0OC1cdFx0XHRcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYikgXHUwMDI2IFZMQU5fVklEX01BU0spO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyMzM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDQ6XHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuLS1cbm5ldC9kc2EvdGFnLmg9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBkc2Ffc29mdHdhcmVfdW50YWdfdmxhbl91bmF3YXJlX2JyaWRnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9kc2EvdGFnLmgtMTMxLVx0ICovXG5uZXQvZHNhL3RhZy5oOjEzMjpcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShiciwgaHRvbnMocHJvdG8pLCB2aWQpO1xubmV0L2RzYS90YWcuaC0xMzMtXHRpZiAoIXVwcGVyX2RldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBUaGlzIEJQRi9WTEFOIFBhdGNoKioKCk9rYXksIHNvIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgIGlzIGRlZmluaXRlbHkgYXZhaWxhYmxlIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgY3J1Y2lhbCBvbmUgc2VlbXMgdG8gYmUgYFZMQU5fODAyMVFgLCB3aGljaCB0cmFuc2xhdGVzIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX1ZMQU5fODAyMVFgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSAqb25seSogbmVjZXNzYXJ5IGNvbmZpZyByZWxhdGVkIHRvIFZMQU4uCgpUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCB3aGljaCBzdWdnZXN0cyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgZW5hYmxlZC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBPZiBjb3Vyc2UsIEJQRiByZXF1aXJlcyBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYnV0IHRoYXQmIzM5O3MgYSBnaXZlbiBpbiB0aGVzZSBzb3J0cyBvZiBwYXRjaGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0LiBUaGUgY29kZSB1c2VzIGBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAsIHNvIGBWTEFOXzgwMjFRYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW1wYWN0czoKCiogICBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAKKiAgIGBicGZfZmliX3NldF9md2RfcGFyYW1zYAoqICAgYGJwZl94ZHBfZmliX2xvb2t1cGAKKiAgIGBicGZfc2tiX2ZpYl9sb29rdXBgCiogICBgYnBmX2lwdjRfZmliX2xvb2t1cGAKKiAgIGBicGZfaXB2Nl9maWJfbG9va3VwYAoKV2FpdCwgYSBzZWNvbmTigKYgIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgIGFyZSBob3QgcGF0aHMsIHJpZ2h0PyBZZXMsIHRoZXkmIzM5O3JlIGNhbGxlZCBieSBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEFuZCB0aGV5JiMzOTtyZSAqc3BlY2lmaWNhbGx5KiBtb2RpZmllZCBoZXJlLiBUaGV5JiMzOTtyZSBkZWZpbml0ZWx5IGltcG9ydGFudC4gSXQgbG9va3MgbGlrZSBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgIGlzIGFsc28gcmVsZXZhbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCBpcyBhbHNvIGEgZnVuY3Rpb24uCgpTbywgaGVyZSYjMzk7cyBteSByZXZpc2VkIGxpc3QgdG8gZm9jdXMgb246CgoqICAgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgCiogICBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AKKiAgIGBicGZfeGRwX2ZpYl9sb29rdXBgCiogICBgYnBmX3NrYl9maWJfbG9va3VwYAoqICAgYGJwZl9pcHY0X2ZpYl9sb29rdXBgCiogICBgYnBmX2lwdjZfZmliX2xvb2t1cGAKKiAgIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02NDA2PXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjItXG5uZXQvY29yZS9maWx0ZXIuYzo2NTYzOnN0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY1NzU9QlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjU4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjY1ODE6XHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY2MDk9QlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NjE4LVxubmV0L2NvcmUvZmlsdGVyLmM6NjYxOTpcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxubmV0L2NvcmUvZmlsdGVyLmMtNjYyMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDMzCgkJCQkJCQlvdXRwdXQ6IDI0MwoJCQkJCQkJdGhvdWdodHM6IDUyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBGSUIgTG9va3VwIFZMQU4gU3VwcG9ydCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdGUuIE15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIG5lZWRzIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQsIHdoaWNoIGFyZTogYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AsIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLiBJdCYjMzk7cyB3b3J0aCBpbmNsdWRpbmcgYGJwZl9pcHY0X2ZpYl9sb29rdXBgIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAgYmVjYXVzZSB0aGV5JiMzOTtyZSBzcGVjaWZpYyB0byBCUEYgRklCIGxvb2t1cHMsIHdoaWNoIGRpZmZlcmVudGlhdGVzIHRoZW0gZnJvbSB0aGUgZ2VuZXJhbCBJUHY0L0lQdjYgcm91dGluZyBsb29rdXBzLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQgaGVyZSBhcmUgYFZMQU5fODAyMVFgLCBgSU5FVGAsIGFuZCBgSVBWNmAuIFdoaWxlIGBJTkVUYCBhbmQgYElQVjZgIGFyZSBzdGFuZGFyZCwgaW5jbHVkaW5nIHRoZW0gZG9lc24mIzM5O3QgaHVydC4gSG93ZXZlciwgYFZMQU5fODAyMVFgIGlzIHRoZSBtb3N0IHNwZWNpZmljLiBMZXQgbWUgZG91YmxlIGNoZWNrIGlmIGFueSBvdGhlciBjb25maWdzIGFyZSBiZWluZyB1c2VkLiBPa2F5LCBqdXN0IGBDT05GSUdfVkxBTl84MDIxUWAuIEdvb2QuCgpUaGUgcGF0Y2gmIzM5O3MgY29yZSBpbXBhY3QgaXMgYWRkaW5nIFZMQU4gc3VwcG9ydCB0byBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAsIGltcGxlbWVudGluZyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBpcyBuZXR3b3JraW5nIGFuZCBCUEYgY29yZSBsb2dpYywgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IHNpbmNlIHN5emthbGxlciBjYW4gcmVhY2ggaXQuIEkgdGhpbmsgdGhlIG9yaWdpbmFsIGxpc3Qgb2YgZm9jdXMgZnVuY3Rpb25zIGlzIGFwcHJvcHJpYXRlLCBzbyB0aGUgbGlzdCByZW1haW5zOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl9zZXRfZndkX3BhcmFtcyYjMzQ7LAogICAgJiMzNDticGZfZmliX2xvb2t1cF9mbGFnc19vayYjMzQ7LAogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXJzIChgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCB0byBoYW5kbGUgVkxBTiBlZ3Jlc3MgYW5kIGluZ3Jlc3MgcmVzb2x1dGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBjYW4gYmUgZnV6emVkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZmliX3ZsYW5faW5wdXRfZGV2JiMzNDssCiAgICAmIzM0O2JwZl9maWJfc2V0X2Z3ZF9wYXJhbXMmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2smIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMTo1NjowNy40OTY3MzQ2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI0NTI2MzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpYl92bGFuX2lucHV0X2RldlwiLFxuICAgIFwiYnBmX2ZpYl9zZXRfZndkX3BhcmFtc1wiLFxuICAgIFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjA3LjQ5Njc0MDE3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0ODQxNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGE3ZjFmYTA4ZGNlMWUxYzI1NDAwYmUwZjNjZjExZGIzMGM5ZGMxYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMTo1NjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZmYwMzAxOWFiZTM1NTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTM1MzIsNiArMzUzMiw0NyBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqXFx0XFx0XFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXFx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxcbiAgKlxcdFxcdFxcdFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCxcXG4gICpcXHRcXHRcXHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXFxuKyAqXFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcXG4rICpcXHRcXHRcXHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXFxuKyAqXFx0XFx0XFx0cGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0XFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxcbisgKlxcdFxcdFxcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzIGlmaW5kZXguICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxcbisgKlxcdFxcdFxcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cXG4rICpcXHRcXHRcXHRzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi1cXHUwMDNlc21hYyBpc1xcbisgKlxcdFxcdFxcdHRoZSBWTEFOIGRldmljZSdzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXFxuKyAqXFx0XFx0XFx0cGFyZW50J3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XFxuKyAqXFx0XFx0XFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxcbisgKlxcdFxcdFxcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xcbisgKlxcdFxcdFxcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVxcdTAwM2VpZmluZGV4XFxuKyAqXFx0XFx0XFx0bGVmdCBhdCB0aGUgaW5wdXQuIFRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cXG4rICpcXHRcXHRcXHRpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0XFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiosIHJlLWluaXRpYWxpemluZyAqcGFyYW1zKlxcbisgKlxcdFxcdFxcdGZpcnN0OiBvdXRwdXQgZmllbGRzIG92ZXJ3cml0ZSB0aGUgaW5wdXRzIHRoZXkgc2hhcmVcXG4rICpcXHRcXHRcXHRzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcXG4rICpcXHRcXHRcXHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxcbisgKlxcdFxcdFxcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XFxuKyAqXFx0XFx0XFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVxcdTAwM2VtdHVfcmVzdWx0LlxcbisgKlxcdFxcdFxcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXFxuKyAqXFx0XFx0XFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlIGRpcmVjdGx5LlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXFxuKyAqXFx0XFx0XFx0VHJlYXQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0lcXG4rICpcXHRcXHRcXHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xcbisgKlxcdFxcdFxcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcXG4rICpcXHRcXHRcXHRvbiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxcbisgKlxcdFxcdFxcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxcbisgKlxcdFxcdFxcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXFxuKyAqXFx0XFx0XFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cXG4rICpcXHRcXHRcXHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xcbisgKlxcdFxcdFxcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxcbisgKlxcdFxcdFxcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cXG4gICpcXG4gICpcXHRcXHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxcbiAgKlxcdFxcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxcbkBAIC03MzI3LDYgKzczNjgsOCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAzKSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA0KSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA1KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gfTtcXG4gXFxuIGVudW0ge1xcbkBAIC03MzQwLDYgKzczODMsNyBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xcbiBcXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cXG4rXFx0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xcbkBAIC03MzkzLDcgKzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG4gXFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0Lyogb3V0cHV0ICovXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxcbitcXHRcXHRcXHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcXG4rXFx0XFx0XFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXFxuK1xcdFxcdFxcdCAqIHRoZSBsb29rdXAgYnkuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fcHJvdG87XFxuIFxcdFxcdFxcdF9fYmUxNlxcdGhfdmxhbl9UQ0k7XFxuIFxcdFxcdH07XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC02MjAxLDIxICs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxcbitzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxcbiB7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IDA7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXFx1MDAyNlxcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXFx1MDAzZXJlYWxfZGV2O1xcbitcXG4rXFx0XFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkge1xcbitcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcmVhbF9kZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKG10dSlcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxcbit7XFxuK1xcdF9fYmUxNiBwcm90byA9IHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XFxuK1xcdHUxNiB2aWQ7XFxuK1xcbitcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFxcdTAwMjZcXHUwMDI2IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0dmlkID0gbnRvaHMocGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJKSBcXHUwMDI2IFZMQU5fVklEX01BU0s7XFxuK1xcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxuK1xcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHx8XFxuK1xcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiB2bGFuX2RldjtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0XFx0ICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpXFxuIHtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcXG4gXFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcXG4gXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbkBAIC02MjI5LDYgKzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdGlmICh1bmxpa2VseSghZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldik7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cXG4gXFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbiBcXHRpZiAodW5saWtlbHkoIWluX2RldiB8fCAhSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkpXFxuQEAgLTYyMzgsNyArNjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSAxO1xcbiBcXHRcXHRmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGRldi1cXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxcbitcXHRcXHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xcbiBcXHR9XFxuIFxcdGZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy1cXHUwMDNldG9zKTtcXG5AQCAtNjM0Nyw3ICs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdG1lbWNweShwYXJhbXMtXFx1MDAzZXNtYWMsIGRldi1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4gXFxuIHNldF9md2RfcGFyYW1zOlxcbi1cXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XFxuK1xcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTYzNTcsNiArNjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXFx1MDAzZWlwdjZfc3JjO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVxcdTAwM2VpcHY2X2RzdDtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBmaWI2X3Jlc3VsdCByZXMgPSB7fTtcXG4gXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuQEAgLTYzNzQsNiArNjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0aWYgKHVubGlrZWx5KCFkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxuK1xcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcXG4rXFx0XFx0aWYgKCFkZXYpXFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcXG4rXFx0fVxcbitcXG4gXFx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XFxuIFxcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5mb3J3YXJkaW5nKSkpXFxuIFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDtcXG5AQCAtNjM4Miw3ICs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRcXHRmbDYuZmxvd2k2X2lpZiA9IDE7XFxuIFxcdFxcdG9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRvaWYgPSBmbDYuZmxvd2k2X2lpZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZGV2LVxcdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVxcdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG9pZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XFxuIFxcdFxcdGZsNi5mbG93aTZfb2lmID0gMDtcXG4gXFx0XFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcXG4gXFx0fVxcbkBAIC02NDg2LDEzICs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VzbWFjLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbiBzZXRfZndkX3BhcmFtczpcXG4tXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xcbitcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXFxcXG4gXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXFxcXG4tXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxcbitcXHRcXHRcXHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxcXFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpXFxuK1xcbitzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGZsYWdzIFxcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gXFxuIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXFxuQEAgLTY1MDAsNyArNjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHRpZiAocGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcXG4rXFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0c3dpdGNoIChwYXJhbXMtXFx1MDAzZWZhbWlseSkge1xcbkBAIC02NTM4LDcgKzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFx0aWYgKHBsZW4gXFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKHBhcmFtcy1cXHUwMDNldG90X2xlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmZmMDMwMTlhYmUzNTU0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0zNTMyLDYgKzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKlxcdFxcdFxcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVxcdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cXG4gICpcXHRcXHRcXHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXFxuICAqXFx0XFx0XFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXFxuKyAqXFx0XFx0XFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxcbisgKlxcdFxcdFxcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxcbisgKlxcdFxcdFxcdCpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGZyb21cXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggd2l0aCB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcXG4rICpcXHRcXHRcXHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXFxuKyAqXFx0XFx0XFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXFx1MDAzZXNtYWMgaXNcXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxcbisgKlxcdFxcdFxcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcXG4rICpcXHRcXHRcXHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcXG4rICpcXHRcXHRcXHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleFxcbisgKlxcdFxcdFxcdGxlZnQgYXQgdGhlIGlucHV0LiBUbyBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXFxuKyAqXFx0XFx0XFx0aWZpbmRleCwgcmVwZWF0IHRoZSBsb29rdXAgd2l0aG91dFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqLCByZS1pbml0aWFsaXppbmcgKnBhcmFtcypcXG4rICpcXHRcXHRcXHRmaXJzdDogb3V0cHV0IGZpZWxkcyBvdmVyd3JpdGUgdGhlIGlucHV0cyB0aGV5IHNoYXJlXFxuKyAqXFx0XFx0XFx0c3RvcmFnZSB3aXRoLiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXFxuKyAqXFx0XFx0XFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcXG4rICpcXHRcXHRcXHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxcbisgKlxcdFxcdFxcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cXHUwMDNlbXR1X3Jlc3VsdC5cXG4rICpcXHRcXHRcXHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xcbisgKlxcdFxcdFxcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSBkaXJlY3RseS5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxcbisgKlxcdFxcdFxcdFRyZWF0ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJXFxuKyAqXFx0XFx0XFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcXG4rICpcXHRcXHRcXHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXFxuKyAqXFx0XFx0XFx0b24gKnBhcmFtcyotXFx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxcbisgKlxcdFxcdFxcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcXG4rICpcXHRcXHRcXHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcXG4rICpcXHRcXHRcXHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxcbisgKlxcdFxcdFxcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXFxuKyAqXFx0XFx0XFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcXG4rICpcXHRcXHRcXHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcXG4rICpcXHRcXHRcXHQocmV0dXJucyAqKi1FSU5WQUwqKikuXFxuICAqXFxuICAqXFx0XFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcXG4gICpcXHRcXHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cXG5AQCAtNzMyNyw2ICs3MzY4LDggQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgMyksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNCksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNSksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNiksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNyksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5AQCAtNzM0MCw2ICs3MzgzLDcgQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXFxuK1xcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG5AQCAtNzM5Myw3ICs3NDM3LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XFxuIFxcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdC8qIG91dHB1dCAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcXG4rXFx0XFx0XFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXFxuK1xcdFxcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxcbitcXHRcXHRcXHQgKiB0aGUgbG9va3VwIGJ5LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0X19iZTE2XFx0aF92bGFuX3Byb3RvO1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fVENJO1xcbiBcXHRcXHR9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uZjczNjFmOWEzNDU5MmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZi5oXFx1MDAzZVxcbiBcXG5AQCAtMjMsNiArMjQsNyBAQFxcbiAjZGVmaW5lIElQVjRfVEJJRF9BRERSXFx0XFx0XFxcIjE3Mi4wLjAuMjU0XFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9ORVRcXHRcXHRcXFwiMTcyLjAuMC4wXFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcXHRcXHRcXFwiMTcyLjAuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVFxcdFxcXCIxNzIuMC4wLjVcXFwiXFxuICNkZWZpbmUgSVBWNl9UQklEX0FERFJcXHRcXHRcXFwiZmQwMDo6RkZGRlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfTkVUXFx0XFx0XFxcImZkMDA6OlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXFx0XFx0XFxcImZkMDA6OjJcXFwiXFxuQEAgLTM3LDYgKzM5LDQxIEBAXFxuICNkZWZpbmUgSVBWNl9MT0NBTFxcdFxcdFxcXCJmZDAxOjozXFxcIlxcbiAjZGVmaW5lIElQVjZfR1cxXFx0XFx0XFxcImZkMDE6OjFcXFwiXFxuICNkZWZpbmUgSVBWNl9HVzJcXHRcXHRcXFwiZmQwMTo6MlxcXCJcXG4rI2RlZmluZSBWTEFOX0lEXFx0XFx0XFx0MTAwXFxuKyNkZWZpbmUgVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9JRF9ET1dOXFx0XFx0MTAyXFxuKyNkZWZpbmUgVkxBTl9JRkFDRV9ET1dOXFx0XFx0XFxcInZldGgxLjEwMlxcXCJcXG4rI2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXFx0XFxcInZldGgxLjIwMFxcXCJcXG4rI2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXFx0XFxcInZldGgxLjIwMC4zMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9UQUJMRVxcdFxcdFxcXCIzMDBcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcXHRcXFwiMTAuNS4wLjI1NFxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCIxMC41LjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXFx0XFx0XFxcIjEwLjcuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9EU1RcXHRcXHRcXFwiMTAuNi4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0dXXFx0XFx0XFxcIjEwLjUuMC4xXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXFx0XFxcImZkMDI6OjI1NFxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCJmZDAyOjoyXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcXHRcXHRcXFwiZmQwMzo6MlxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fR1dcXHRcXHRcXFwiZmQwMjo6MVxcXCJcXG4rI2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcXHRcXHQ5OTlcXG4rI2RlZmluZSBWUkZfSUZBQ0VcXHRcXHRcXFwidnJmLWJsdWVcXFwiXFxuKyNkZWZpbmUgVlJGX1RBQkxFXFx0XFx0XFxcIjEwMDBcXFwiXFxuKyNkZWZpbmUgVlJGX1ZMQU5fSURcXHRcXHQxMDFcXG4rI2RlZmluZSBWUkZfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDFcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlxcdFxcXCIxMC44LjAuMjU0XFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0dXXFx0XFx0XFxcIjEwLjguMC4xXFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0RTVFxcdFxcdFxcXCIxMC45LjAuMlxcXCJcXG4rI2RlZmluZSBUQklEX1ZMQU5fSURcXHRcXHQ1MFxcbisjZGVmaW5lIFRCSURfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMi41MFxcXCJcXG4rI2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcXHRcXFwiMTcyLjIuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFxcdFxcXCIxMC4xMS4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcXHRcXFwiMTAuNS45LjJcXFwiXFxuKyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXFx0XFx0MjAwXFxuKyNkZWZpbmUgUUlOUV9JTk5FUl9WTEFOX0lEXFx0MzAwXFxuKyNkZWZpbmUgQk9ORF9JRkFDRVxcdFxcdFxcXCJib25kOTlcXFwiXFxuKyNkZWZpbmUgQk9ORF9QT1JUXFx0XFx0XFxcInZldGgzXFxcIlxcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXFx0XFx0XFxcInZldGg0XFxcIlxcbisjZGVmaW5lIEJPTkRfVkxBTl9JRFxcdFxcdDUwMFxcbiAjZGVmaW5lIERNQUNcXHRcXHRcXHRcXFwiMTE6MTE6MTE6MTE6MTE6MTFcXFwiXFxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxcbiAjZGVmaW5lIERNQUMyXFx0XFx0XFx0XFxcIjAxOjAxOjAxOjAxOjAxOjAxXFxcIlxcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcXG4gXFx0X191MzIgdGJpZDtcXG4gXFx0X191OCBkbWFjWzZdO1xcbiBcXHRfX3UzMiBtYXJrO1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnXFxuK1xcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxcbitcXHQgKi9cXG4rXFx0X191MTYgdmxhbl9wcm90bztcXG4rXFx0X191MTYgdmxhbl9pZDtcXG4rXFx0Ym9vbCBjaGVja192bGFuO1xcbitcXHRjb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy1cXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cXG4rXFx0Y29uc3QgY2hhciAqaWlmO1xcdCAgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmV0aDEgaW5wdXQgZGV2aWNlICovXFxuK1xcdF9fdTE2IHRvdF9sZW47XFx0XFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xcbitcXHRfX3UxNiBleHBlY3RlZF9tdHU7XFx0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xcbkBAIC03OSw2ICsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcXG4gXFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcXG4gXFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XFxuK1xcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcXG4rXFx0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xcbitcXHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcXG4rXFx0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMlxcXCIsIH0sXFxuIFxcdHsgLmRlc2MgPSBcXFwiSVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXFxcIixcXG4gXFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XFxuIFxcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfR1cxLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbiBcXHQgIC5tYXJrID0gTUFSSywgfSxcXG4rXFx0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xcbitcXHQvKlxcbitcXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXFxuK1xcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxcbitcXHQgKiB4bWl0LWNhcGFibGUgaWZpbmRleDsgbm8gU1VDQ0VTUyBldmVyIHJldHVybnMgYSBWTEFOLWRldmljZVxcbitcXHQgKiBpZmluZGV4LiBSZWR1Y2libGUgYXJtcyBwaW4gaWZpbmRleCA9PSB0aGUgcGh5c2ljYWwgcGFyZW50OyB0aGVcXG4rXFx0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXFx1MDAzZWlmaW5kZXhcXG4rXFx0ICogbGVmdCBhdCB0aGUgaW5wdXQsIHNvIGEgcmVncmVzc2lvbiB0byBiZXN0LWVmZm9ydCAoU1VDQ0VTUyArIHRoZVxcbitcXHQgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS5cXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgbm8gZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHQvKlxcbitcXHQgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJ3MgbXR1XFxuK1xcdCAqICgxNDAwKSwgbm90IHRoZSBwYXJlbnQncyAoMTUwMClcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSdzIHdpdGhvdXQgdGhlIGZsYWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9OVURfRkFJTEVEX0FERFIsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgUWluUSBub3QgcmVkdWNpYmxlIChWTEFOX0ZBSUxVUkUpXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxcbitcXHQgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFFpblEgZWdyZXNzIHdpdGhvdXQgdGhlIGZsYWcgKGVzY2FwZSBoYXRjaClcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBuZWlnaGJvdXIgb24gdGhlIFZMQU4gZGV2aWNlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTixcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmlpZiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9CT05EX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MgdmlhIFRCSUQgdGFibGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnRiaWQgPSAxMDAsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMlxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBzdWNjZXNzIHdyaXRlcyBtdHVfcmVzdWx0IHdpdGggdGhlIHN3YXBcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsXFxuK1xcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0LyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjYgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsXFxuK1xcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVULFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9zcmMgPSBJUFY0X1ZMQU5fSUZBQ0VfQUREUixcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlXFxuK1xcdCAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3RcXG4rXFx0ICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgVlJGIHN1YmludGVyZmFjZSwgbm8gZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgRElSRUNUIHVzZXMgVlJGIHRhYmxlIGZyb20gcmVzb2x2ZWQgaW5ncmVzc1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIGZhaWx1cmUgYXJtcyBhbHNvIGFzc2VydCBwYXJhbXMgaXMgbGVmdCB1bnRvdWNoZWQ6IGlmaW5kZXggc3RpbGxcXG4rXFx0ICogbmFtZXMgdGhlIHBoeXNpY2FsIGRldmljZSBhbmQgdGhlIGlucHV0IHRhZyBieXRlcyBzdXJ2aXZlXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIHN1YmludGVyZmFjZSBkb3duXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXFxuK1xcdC8qXFxuK1xcdCAqIHRoZSByZXNvbHZlciBydW5zIGJlZm9yZSB0aGUgZm9yd2FyZGluZyBjaGVjaywgc28gb24gZGV2aWNlc1xcbitcXHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcXG4rXFx0ICogcmVzb2x2ZWQgdG8gdGhhdCBkZXZpY2UgYW5kIHRoZSBsb29rdXAgdXNlZCBpdCBhcyBpbmdyZXNzXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxQUQsIC52bGFuX2lkID0gUUlOUV9BRF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgUENQIGFuZCBERUkgYml0cyBpZ25vcmVkIGluIFRDSVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBpbm5lciBRaW5RIGRldmljZSBmcm9tIFZMQU4gaWZpbmRleFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxcbitcXHQgIC5paWYgPSBRSU5RX09VVEVSX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFFJTlFfSU5ORVJfVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXFxuK1xcdCAqIGZyYW1lIGlzIHN0ZWVyZWQgdG8gdGhlIG1hc3RlciBiZWZvcmUgVkxBTiBwcm9jZXNzaW5nOyBhIHBvcnRcXG4rXFx0ICogaWZpbmRleCBkb2VzIG5vdCBtYXRjaCAocG9ydHMgY2FycnkgdmlkIHN0YXRlIGJ1dCBubyBWTEFOIGRldnMpXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXFxuK1xcdCAgLmlpZiA9IEJPTkRfSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgVklEIDAgcHJpb3JpdHkgdGFnIGZhaWxzIGNsb3NlZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJ1bmtub3duIGZsYWcgYml0IHJlamVjdGVkXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gKDEgXFx1MDAzY1xcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIE9VVFBVVFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxcbkBAIC0yMDQsNiArNDc1LDEwNSBAQCBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXFxuIFxcdFNZUyhmYWlsLCBcXFwiaXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcXFwiLCBNQVJLLCBNQVJLX1RBQkxFKTtcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1xcXCIsIE1BUkssIE1BUktfVEFCTEUpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0dXAgZm9yIHZsYW4gdGVzdHM6IGEgc3ViaW50ZXJmYWNlIGZvciBlZ3Jlc3MgcmVzb2x1dGlvbiBhbmRcXG4rXFx0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcXG4rXFx0ICogb2JzZXJ2ZSB3aGljaCBkZXZpY2UgdGhlIGxvb2t1cCB1c2VkIGFzIGluZ3Jlc3MuXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVkxBTl9JRkFDRSk7XFxuK1xcdC8qXFxuK1xcdCAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGVcXG4rXFx0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUsIHdoaWNoIHRoZVxcbitcXHQgKiBuby1mbGFnIGFybSBiZWxvdyBwaW5zXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyBtdHUgMTQwMFxcXCIsIFZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIElQVjRfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBhZGRyIGFkZCAlcy82NCBkZXYgJXMgbm9kYWRcXFwiLCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXFxuK1xcdCAqIGluZ3Jlc3MgdHJlYXRzIGEgZnJhbWUgYXJyaXZpbmcgb24gYSBkb3duIFZMQU4gZGV2aWNlIChkcm9wKVxcbitcXHQgKi9cXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcXG4rXFxuK1xcdGVyciA9IHdyaXRlX3N5c2N0bChcXFwiL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXFxcIiBWTEFOX0lGQUNFIFxcXCIvZm9yd2FyZGluZ1xcXCIsIFxcXCIxXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlxcXCIgVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVyciA9IHdyaXRlX3N5c2N0bChcXFwiL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvXFxcIiBWTEFOX0lGQUNFIFxcXCIvZm9yd2FyZGluZ1xcXCIsIFxcXCIxXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIndyaXRlX3N5c2N0bChuZXQuaXB2Ni5jb25mLlxcXCIgVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMFxcXCIsXFxuK1xcdCAgICBRSU5RX09VVEVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMgdHlwZSB2bGFuIGlkIDMwMFxcXCIsXFxuK1xcdCAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBRSU5RX09VVEVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzXFxcIiwgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcXFwiLCBJUFY0X1ZMQU5fRFNULCBJUFY0X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXFxcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXNcXFwiLCBJUFY2X1ZMQU5fRFNULCBJUFY2X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgLTYgcm91dGUgYWRkIHRhYmxlICVzICVzLzEyOCB2aWEgJXNcXFwiLFxcbitcXHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1xcXCIsIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xcbitcXG4rXFx0LyogYSBib25kIHdpdGggb25lIHBvcnQgYW5kIGEgVkxBTiBvbiB0aGUgYm9uZCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFxcXCIsIEJPTkRfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcXFwiLCBCT05EX1BPUlQsIEJPTkRfUE9SVF9QRUVSKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcXFwiLCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIEJPTkRfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIEJPTkRfUE9SVCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBCT05EX0lGQUNFLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQsIEJPTkRfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzLiVkIHVwXFxcIiwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkXFxcIixcXG4rXFx0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGEgVlJGIHdpdGggaXRzIG93biBkZWRpY2F0ZWQgc3ViaW50ZXJmYWNlICh0aGUgaWlmIHJ1bGVzIGFib3ZlXFxuK1xcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcXFwiLCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVlJGX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIFZSRl9WTEFOX0lGQUNFLCBWUkZfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgJXMgbWFzdGVyICVzXFxcIiwgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVlJGX1ZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIElQVjRfVlJGX0lGQUNFX0FERFIsIFZSRl9WTEFOX0lGQUNFKTtcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cXFwiIFZSRl9WTEFOX0lGQUNFIFxcXCIvZm9yd2FyZGluZ1xcXCIsIFxcXCIxXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlxcXCIgVlJGX1ZMQU5fSUZBQ0UgXFxcIi5mb3J3YXJkaW5nKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1xcXCIsIElQVjRfVlJGX0RTVCwgSVBWNF9HVzEpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcXFwiLFxcbitcXHQgICAgVlJGX1RBQkxFLCBJUFY0X1ZSRl9EU1QsIElQVjRfVlJGX0dXKTtcXG4rXFxuK1xcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvXFxcIiBWTEFOX0lGQUNFIFxcXCIvZ2Nfc3RhbGVfdGltZVxcXCIsIFxcXCI5MDBcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlxcXCIgVkxBTl9JRkFDRSBcXFwiLmdjX3N0YWxlX3RpbWUpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcXFwiLFxcbitcXHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTtcXG4rXFxuK1xcdC8qIGEgVkxBTiBvbiB2ZXRoMiB3aXRoIGEgcm91dGUgaW4gdGhlIHRiaWQgdGVzdCB0YWJsZSAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFRCSURfVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlIDEwMCAlcy8zMiBkZXYgJXNcXFwiLFxcbitcXHQgICAgSVBWNF9UQklEX1ZMQU5fRFNULCBUQklEX1ZMQU5fSUZBQ0UpO1xcbitcXG4rXFx0LyogYSBsb2NrZWQtbXR1IHJvdXRlIHZpYSB0aGUgc3ViaW50ZXJmYWNlIGZvciB0aGUgRlJBR19ORUVERUQgY2FzZSAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMgbXR1IGxvY2sgMTAwMFxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gZmFpbDpcXG4gXFx0cmV0dXJuIC0xO1xcbkBAIC0yMTgsOSArNTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdG1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7XFxuIFxcbiBcXHRwYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuLVxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IGlmaW5kZXg7XFxuK1xcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHRlc3QtXFx1MDAzZWlpZiA/IGlmX25hbWV0b2luZGV4KHRlc3QtXFx1MDAzZWlpZikgOiBpZmluZGV4O1xcbiBcXHRwYXJhbXMtXFx1MDAzZXRiaWQgPSB0ZXN0LVxcdTAwM2V0YmlkO1xcbiBcXHRwYXJhbXMtXFx1MDAzZW1hcmsgPSB0ZXN0LVxcdTAwM2VtYXJrO1xcbitcXHRwYXJhbXMtXFx1MDAzZXRvdF9sZW4gPSB0ZXN0LVxcdTAwM2V0b3RfbGVuO1xcbitcXG4rXFx0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXFxuK1xcdGlmICh0ZXN0LVxcdTAwM2Vsb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cXHUwMDNldmxhbl9wcm90byk7XFxuK1xcdFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHRlc3QtXFx1MDAzZXZsYW5faWQpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVxcdTAwM2VkYWRkciwgcGFyYW1zLVxcdTAwM2VpcHY2X2RzdCkgPT0gMSkge1xcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xcbkBAIC0yOTgsNyArNjc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcXG4gXFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XFxuLVxcdGludCBwcm9nX2ZkLCBlcnIsIHJldCwgaTtcXG4rXFx0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XFxuIFxcbiBcXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cXHUwMDNlZGF0YSwgc29cXG4gXFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cXG5AQCAtMzA5LDExICs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0ICAgIC5jdHhfaW4gPSBcXHUwMDI2c2tiLFxcbiBcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXFxuIFxcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0KTtcXG4gXFxuIFxcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XFxuIFxcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuX2FuZF9sb2FkXFxcIikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcXG4rXFx0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcXG4gXFxuIFxcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVEVTVCk7XFxuIFxcbkBAIC0zNDMsNiArNzI1LDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXFxuIFxcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHNcXFwiKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXFxuK1xcdFxcdCAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgXFxcInRjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTlxcXCIpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcXG4gXFx0XFx0XFx0ICBcXFwiZmliX2xvb2t1cF9yZXRcXFwiKTtcXG4gXFxuQEAgLTM1Miw2ICs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcXG4gXFx0XFx0XFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xcbiBcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSwgXFxcImlmaW5kZXhcXFwiKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXFxuK1xcdFxcdFxcdFxcdCAgXFxcIm10dV9yZXN1bHRcXFwiKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCAgaHRvbnModGVzdHNbaV0udmxhbl9wcm90byksIFxcXCJoX3ZsYW5fcHJvdG9cXFwiKTtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksXFxuK1xcdFxcdFxcdFxcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFxcXCJoX3ZsYW5fVENJXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVxcdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xcbiBcXHRcXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFxcXCJkbWFjIG5vdCBtYXRjaFxcXCIpKSB7XFxuIFxcdFxcdFxcdGNoYXIgZXhwZWN0ZWRbMThdLCBhY3R1YWxbMThdO1xcbkBAIC0zNjEsMTcgKzc2OCwzMjIgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCJkbWFjIGV4cGVjdGVkICVzIGFjdHVhbCAlcyBcXFwiLCBleHBlY3RlZCwgYWN0dWFsKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLlxcbi1cXHRcXHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGVuc3VyZSB0YmlkIGlzIHplcm8nZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxcbitcXHRcXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIHRoZSB1bmlvbiBob2xkcyB0aGUgcGFja2VkIHZsYW5cXG4rXFx0XFx0ICogZmllbGRzIGluc3RlYWQsIHNvIHNraXAgdGhlIGNoZWNrIGZvciB0aG9zZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICgodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgISh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSkge1xcbiBcXHRcXHRcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXMudGJpZCwgMCxcXG4gXFx0XFx0XFx0XFx0XFx0XFxcImV4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXFxcIikpXFxuIFxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSZS1ydW4gdGhlIGNhc2VzIHRocm91Z2ggYnBmX3hkcF9maWJfbG9va3VwKCkuIHRlc3RfcnVuIHVzZXMgdGhlXFxuK1xcdCAqIGN1cnJlbnQgbmV0bnMnIGxvb3BiYWNrIGZvciBjdHgtXFx1MDAzZXJ4cS1cXHUwMDNlZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVFxcbitcXHQgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0c1xcbitcXHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxcbitcXHQgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCBcXHUwMDI2dGVzdHNbaV0sIHNrYi5pZmluZGV4KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbG9va3VwX2ZsYWdzID0gdGVzdHNbaV0ubG9va3VwX2ZsYWdzO1xcbitcXG4rXFx0XFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFxcdTAwMjZ4ZHBfb3B0cyk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInhkcCB0ZXN0X3J1blxcXCIpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJ4ZHAgZmliX2xvb2t1cF9yZXRcXFwiKSlcXG4rXFx0XFx0XFx0cHJpbnRmKFxcXCIoeGRwKSAlc1xcXFxuXFxcIiwgdGVzdHNbaV0uZGVzYyk7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLFxcbitcXHRcXHRcXHRcXHQgIFxcXCJ4ZHAgaWZpbmRleFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcXG4rXFx0XFx0XFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXFxcInhkcCBoX3ZsYW5fcHJvdG9cXFwiKTtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksXFxuK1xcdFxcdFxcdFxcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFxcXCJ4ZHAgaF92bGFuX1RDSVxcXCIpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy1cXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHJldCwgMCwgXFxcInhkcCBkbWFjXFxcIik7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBtdHVfcmVzdWx0IGZyb20gYSB0b3RfbGVuIGxvb2t1cCBpcyB0aGUgcm91dGUgbXR1IGFuZCBpc1xcbitcXHRcXHQgKiBwYXRoLWluZGVwZW5kZW50OyB0aGUgbm8tdG90X2xlbiBhcm0gcmVhZHMgZGV2LVxcdTAwM2VtdHUgYW5kIGlzXFxuK1xcdFxcdCAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUgXFx1MDAyNlxcdTAwMjYgdGVzdHNbaV0udG90X2xlbilcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwieGRwIG10dV9yZXN1bHRcXFwiKTtcXG4rXFx0fVxcbitcXG4gZmFpbDpcXG4gXFx0aWYgKG5zdG9rZW4pXFxuIFxcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbiBcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19URVNUKTtcXG4gXFx0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcXG4gfVxcbitcXG4rI2RlZmluZSBOU19WTEFOX0FcXHRcXFwiZmliX2xvb2t1cF92bGFuX25zX2FcXFwiXFxuKyNkZWZpbmUgTlNfVkxBTl9CXFx0XFxcImZpYl9sb29rdXBfdmxhbl9uc19iXFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9ORVROU19BRERSXFx0XFxcIjEwLjY2LjAuMVxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfRFNUXFx0XFxcIjEwLjY2LjAuMlxcXCJcXG4rXFxuKy8qXFxuKyAqIEEgVkxBTiBkZXZpY2UgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMgd2hpbGUgc3RheWluZyByZWdpc3RlcmVkXFxuKyAqIG9uIGl0cyBwYXJlbnQuIE5laXRoZXIgZGlyZWN0aW9uIG1heSB0aGVuIGNyb3NzIHRoZSBib3VuZGFyeTogdGhlXFxuKyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50J3MgaWZpbmRleCwgYW5kIHRoZVxcbisgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLlxcbisgKi9cXG4rdm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcXG4rXFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHJ1bl9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHRcXHQgICAgLmN0eF9pbiA9IFxcdTAwMjZza2IsXFxuK1xcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcXG4rXFx0KTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xcbitcXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xcbitcXHRmaWJfcGFyYW1zID0gXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX3BhcmFtcztcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVkxBTl9BKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19WTEFOX0IpO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9BKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zKGEpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgdmV0aDcgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoOFxcXCIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiB2ZXRoNyB1cFxcXCIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDcgbmFtZSB2ZXRoNy42NiB0eXBlIHZsYW4gaWQgNjZcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCB2ZXRoNy42NiBuZXRucyAlc1xcXCIsIE5TX1ZMQU5fQik7XFxuK1xcdC8qXFxuK1xcdCAqIHVwIGl0IGluIEIgYmVmb3JlIHRoZSBpbnB1dCBsb29rdXA6IHRoZSBtb3ZlIGNsb3NlZCBpdCwgYW5kIGFcXG4rXFx0ICogZG93biBkZXZpY2UgZmFpbHMgdGhlIHJlc29sdmVyIG9uIElGRl9VUCBiZWZvcmUgcmVhY2hpbmcgdGhlXFxuK1xcdCAqIG5ldG5zIGNoZWNrIHRoaXMgc3VidGVzdCBleGlzdHMgdG8gcGluXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIC1uICVzIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFxcXCIsIE5TX1ZMQU5fQik7XFxuK1xcbitcXHRwYXJlbnRfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXFxcInZldGg3XFxcIik7XFxuK1xcdGlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGlucHV0OiB0aGUgbW92ZWQgZGV2aWNlIGlzIHN0aWxsIGluIHZldGg3J3MgVkxBTiBncm91cCwgYnV0IGl0XFxuK1xcdCAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZFxcbitcXHQgKi9cXG4rXFx0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSBwYXJlbnRfaWR4O1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyg2Nik7XFxuK1xcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9kc3QpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihkc3QpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcXG4rXFx0XFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFxcdTAwMjZydW5fb3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfcnVuKGlucHV0KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0XFx0ICBcXFwiaW5wdXQgYWNyb3NzIG5ldG5zIGZhaWxzIGNsb3NlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCwgcGFyZW50X2lkeCwgXFxcImlmaW5kZXggdW50b3VjaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFxcXCJ0YWcgdW50b3VjaGVkXFxcIik7XFxuK1xcbitcXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9CKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zKGIpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGVncmVzczogdGhlIGZpYiByZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlIGhlcmUsIGJ1dCBpdHMgcGFyZW50XFxuK1xcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoNy42NlxcXCIsIElQVjRfVkxBTl9ORVROU19BRERSKTtcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKGZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXFxcInZldGg3LjY2XFxcIik7XFxuK1xcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGg3LjY2KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSB2bGFuX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9ORVROU19EU1QsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX05FVE5TX0FERFIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcXHUwMDI2eGRwX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihlZ3Jlc3MpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHRcXHQgIFxcXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxcbitcXHRcXHQgIFxcXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCAwLCBcXFwidmxhbiBmaWVsZHMgemVyb1xcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKG5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0EpO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0IpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcXG4rI2RlZmluZSBOU19SRURJUkVDVCBcXFwiZmliX2xvb2t1cF9yZWRpcmVjdF9uc1xcXCJcXG4rXFxuKy8qXFxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxcbisgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcXG4rICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcXG4rICogeGRwX2RvX3JlZGlyZWN0KCkgKyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xcbisgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcXG4rICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXFxuKyAqL1xcbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XFxuK1xcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcXG4rXFx0XFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxcbitcXHRcXHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1JFRElSRUNUKTtcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfUkVESVJFQ1QpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXFxcIm9wZW5fbmV0bnNcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRpZiAoc2V0dXBfbmV0bnMoKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXFxcInZldGgxXFxcIik7XFxuK1xcdHZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoMlxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEodmV0aDFfaWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDEpXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGgyKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpXFxuK1xcdCAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDIncyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zXFxuK1xcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cXG4rXFx0ICovXFxuK1xcdGVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnhkcF9jb3VudCksXFxuK1xcdFxcdFxcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMlxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdHhkcF9hdHRhY2hlZCA9IHRydWU7XFxuK1xcbitcXHQvKiByZWR1Y2libGUgVkxBTiBlZ3Jlc3M6IHJlc29sdmVzIHRvIHRoZSBwaHlzaWNhbCBwYXJlbnQgdmV0aDEgKi9cXG4rXFx0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9zcmMpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihzcmMpXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9FR1JFU1NfRFNULCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9kc3QpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihyZWR1Y2libGUgZHN0KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVkaXJlY3RlZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGFzc2VkID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkZWxpdmVyZWQgPSAwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXFx1MDAyNmxmX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihyZWR1Y2libGUgZWdyZXNzKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQsIFJFRElSRUNUX05QS1RTLCBcXFwicmVkdWNpYmxlIGVncmVzcyByZWRpcmVjdGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCwgMCwgXFxcInJlZHVjaWJsZSBlZ3Jlc3Mgbm90IHBhc3NlZFxcXCIpO1xcbitcXHRBU1NFUlRfR1Qoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkZWxpdmVyZWQsIDAsIFxcXCJyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXFxuK1xcdCAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXJcXG4rXFx0ICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlXFxuK1xcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XFxuK1xcdCAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMidzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxcbitcXHQgKiBhIHBhc3NlZCBmcmFtZSBjYW4gc3RpbGwgcmVhY2ggdmV0aDIgdGhyb3VnaCB0aGUgc3RhY2sncyBmb3J3YXJkaW5nXFxuK1xcdCAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC5cXG4rXFx0ICovXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfc3JjKSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24oc3JjKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCBcXHUwMDI2ZmliX3BhcmFtcy1cXHUwMDNlaXB2NF9kc3QpLFxcbitcXHRcXHQgICAgICAgMSwgXFxcImluZXRfcHRvbihxaW5xIGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCA9IDA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcXHUwMDI2bGZfb3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfcnVuKHFpbnEgZWdyZXNzKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCwgUkVESVJFQ1RfTlBLVFMsIFxcXCJxaW5xIGVncmVzcyBwYXNzZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVkaXJlY3RlZCwgMCwgXFxcInFpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkXFxcIik7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAoeGRwX2F0dGFjaGVkKVxcbitcXHRcXHRicGZfeGRwX2RldGFjaCh2ZXRoMl9pZHgsIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XFxuK1xcdGlmIChuc3Rva2VuKVxcbitcXHRcXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsIFxcXCIgTlNfUkVESVJFQ1QpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjM2YjcyMThkOWFlMmVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuQEAgLTQsNyArNCwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGt0X2Nscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTtcXG4gaW50IGZpYl9sb29rdXBfcmV0ID0gMDtcXG5AQCAtMTksNCArMjMsNTcgQEAgaW50IGZpYl9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIH1cXG4gXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXFx1MDAyNmZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSxcXG4rXFx0XFx0XFx0XFx0XFx0bG9va3VwX2ZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4raW50IHJlZGlyZWN0ZWQgPSAwO1xcbitpbnQgcGFzc2VkID0gMDtcXG4raW50IGRlbGl2ZXJlZCA9IDA7XFxuK1xcbitTRUMoXFxcInhkcFxcXCIpXFxuK2ludCBmaWJfbG9va3VwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtcztcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpO1xcbitcXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xcbitcXHRcXHRyZWRpcmVjdGVkKys7XFxuK1xcdFxcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xcbitcXHR9XFxuK1xcbitcXHRwYXNzZWQrKztcXG4rXFx0cmV0dXJuIFhEUF9QQVNTO1xcbit9XFxuK1xcbitTRUMoXFxcInhkcFxcXCIpXFxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XFxuK1xcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogY291bnQgb25seSB0aGUgdGVzdCdzIFRDUCBmcmFtZXM6IHRoZSBuZXRucyBoYXMgbGl2ZVxcbitcXHQgKiBsaW5rLWxvY2FsIHRyYWZmaWMgKERBRCwgTUxEKSB0aGF0IHdvdWxkIHNhdGlzZnkgYSBiYXJlXFxuK1xcdCAqIGNvdW50ZXJcXG4rXFx0ICovXFxuK1xcdGlmICgodm9pZCAqKShldGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdCAgICBldGgtXFx1MDAzZWhfcHJvdG8gIT0gYnBmX2h0b25zKEVUSF9QX0lQKSlcXG4rXFx0XFx0cmV0dXJuIFhEUF9EUk9QO1xcbitcXHRpcGggPSAodm9pZCAqKShldGggKyAxKTtcXG4rXFx0aWYgKCh2b2lkICopKGlwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0cmV0dXJuIFhEUF9EUk9QO1xcbitcXG4rXFx0ZGVsaXZlcmVkKys7XFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjA4LjAzMjQ0NjcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MDk1NDMwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIixcbiAgICBcImJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNcIixcbiAgICBcImJwZl9maWJfbG9va3VwX2ZsYWdzX29rXCIsXG4gICAgXCJicGZfeGRwX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9za2JfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2lwdjRfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2lwdjZfZmliX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVkxBTnMgaW4gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlcnMgKGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCkuIEl0IGludHJvZHVjZXMgbmV3IGZsYWdzIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIHRvIGhhbmRsZSBWTEFOIGVncmVzcyBhbmQgaW5ncmVzcyByZXNvbHV0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIGNhbiBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhN2YxZmEwOGRjZTFlMWMyNTQwMGJlMGYzY2YxMWRiMzBjOWRjMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMTo1NjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmZmMDMwMTlhYmUzNTU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgKzM1MzIsNDcgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbisgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbisgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4rICpcdFx0XHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuKyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuKyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbisgKlx0XHRcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuKyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuKyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4rICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbisgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBUbyBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXG4rICpcdFx0XHRpZmluZGV4LCByZXBlYXQgdGhlIGxvb2t1cCB3aXRob3V0XG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiwgcmUtaW5pdGlhbGl6aW5nICpwYXJhbXMqXG4rICpcdFx0XHRmaXJzdDogb3V0cHV0IGZpZWxkcyBvdmVyd3JpdGUgdGhlIGlucHV0cyB0aGV5IHNoYXJlXG4rICpcdFx0XHRzdG9yYWdlIHdpdGguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbisgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4rICpcdFx0XHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuKyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4rICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuKyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4rICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbisgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuKyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbisgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbisgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4rICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuKyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuKyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuKyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXIncyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbisgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbisgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4rICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuKyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgKzczNjgsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuK1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgKzczODMsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbitcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgKzc0MzcsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbitcdFx0XHQvKlxuK1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuK1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4rXHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4rXHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4rXHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbitcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNjIwMSwyMSArNjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxuK3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbitcdFx0XHRcdCAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleClcbiB7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IDA7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlcbitcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFx1MDAyNlx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS1cdTAwM2VyZWFsX2RldjtcbitcbitcdFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gdmxhbl9kZXZfdmxhbl9wcm90byhkZXYpO1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpbl9pZmluZGV4O1xuK1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcbitcdFx0fVxuK1x0fVxuKyNlbmRpZlxuK1xuIFx0aWYgKG10dSlcbiBcdFx0cGFyYW1zLVx1MDAzZW10dV9yZXN1bHQgPSBtdHU7IC8qIHVuaW9uIHdpdGggdG90X2xlbiAqL1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcbit7XG4rXHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2O1xuK1x0dTE2IHZpZDtcbitcbitcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkgXHUwMDI2XHUwMDI2IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0dmlkID0gbnRvaHMocGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xuK1x0dmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTtcbitcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuK1x0ICAgICFuZXRfZXEoZGV2X25ldCh2bGFuX2RldiksIGRldl9uZXQoZGV2KSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIHZsYW5fZGV2O1xuK31cbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0XHQgICAgICAgdTMyIGZsYWdzLCBib29sIGNoZWNrX210dSlcbiB7XG4rXHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMO1xuIFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcbkBAIC02MjI5LDYgKzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRpZiAodW5saWtlbHkoIWRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4rXHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuK1x0XHRpZiAoSVNfRVJSKGRldikpXG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbitcdFx0aWYgKCFkZXYpXG4rXHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xuK1x0fVxuK1xuIFx0LyogdmVyaWZ5IGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvbiB0aGlzIGludGVyZmFjZSAqL1xuIFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxuQEAgLTYyMzgsNyArNjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw0LmZsb3dpNF9paWYgPSAxO1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0Zmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbitcdFx0LypcbitcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuK1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IDA7XG4gXHR9XG4gXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXHUwMDNldG9zKTtcbkBAIC02MzQ3LDcgKzYzOTgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4rXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTYzNTcsNiArNjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9zcmM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfZHN0O1xuK1x0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdHN0cnVjdCBmaWI2X3Jlc3VsdCByZXMgPSB7fTtcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbkBAIC02Mzc0LDYgKzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRpZiAodW5saWtlbHkoIWRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4rXHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuK1x0XHRpZiAoSVNfRVJSKGRldikpXG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbitcdFx0aWYgKCFkZXYpXG4rXHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xuK1x0fVxuK1xuIFx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XG4gXHRpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5mb3J3YXJkaW5nKSkpXG4gXHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDtcbkBAIC02MzgyLDcgKzY0NDIsMTIgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNi5mbG93aTZfaWlmID0gMTtcbiBcdFx0b2lmID0gZmw2LmZsb3dpNl9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdG9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4rXHRcdC8qXG4rXHRcdCAqIGRldi1cdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcbitcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0b2lmID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdGZsNi5mbG93aTZfaWlmID0gb2lmO1xuIFx0XHRmbDYuZmxvd2k2X29pZiA9IDA7XG4gXHRcdHN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7XG4gXHR9XG5AQCAtNjQ4NiwxMyArNjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4rXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG4gfVxuICNlbmRpZlxuIFxuICNkZWZpbmUgQlBGX0ZJQl9MT09LVVBfTUFTSyAoQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgXFxcbiBcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0ggfCBCUEZfRklCX0xPT0tVUF9UQklEIHwgXFxcbi1cdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUkspXG4rXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXFxcbitcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxuK1xuK3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncylcbit7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoZmxhZ3MgXHUwMDI2IChCUEZfRklCX0xPT0tVUF9UQklEIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbiBcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdCAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncylcbkBAIC02NTAwLDcgKzY1NzgsNyBAQCBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdGlmIChwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbitcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xuQEAgLTY1MzgsNyArNjYxNiwxMCBAQCBCUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuK1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChwYXJhbXMtXHUwMDNldG90X2xlbilcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5mZjAzMDE5YWJlMzU1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzUzMiw2ICszNTMyLDQ3IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4rICpcdFx0XHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXG4rICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbisgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4rICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxuKyAqXHRcdFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbisgKlx0XHRcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cbisgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSdzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXG4rICpcdFx0XHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbisgKlx0XHRcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcbisgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuKyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cdTAwM2VpZmluZGV4XG4rICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gVG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxuKyAqXHRcdFx0aWZpbmRleCwgcmVwZWF0IHRoZSBsb29rdXAgd2l0aG91dFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiosIHJlLWluaXRpYWxpemluZyAqcGFyYW1zKlxuKyAqXHRcdFx0Zmlyc3Q6IG91dHB1dCBmaWVsZHMgb3ZlcndyaXRlIHRoZSBpbnB1dHMgdGhleSBzaGFyZVxuKyAqXHRcdFx0c3RvcmFnZSB3aXRoLiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4rICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuKyAqXHRcdFx0dGhlIGhlbHBlcidzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbisgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuKyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbisgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4rICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbisgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4rICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4rICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbisgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbisgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbisgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbisgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4rICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4rICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuKyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbisgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICs3MzY4LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICs3MzgzLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4rXHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICs3NDM3LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbitcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuK1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuK1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuK1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4rXHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuaW5kZXggYmQ3NjU4OTU4MDA0MWYuLmY3MzYxZjlhMzQ1OTJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbkBAIC0yLDYgKzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4gXG5AQCAtMjMsNiArMjQsNyBAQFxuICNkZWZpbmUgSVBWNF9UQklEX0FERFJcdFx0XCIxNzIuMC4wLjI1NFwiXG4gI2RlZmluZSBJUFY0X1RCSURfTkVUXHRcdFwiMTcyLjAuMC4wXCJcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCIxNzIuMC4wLjJcIlxuKyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcIjE3Mi4wLjAuNVwiXG4gI2RlZmluZSBJUFY2X1RCSURfQUREUlx0XHRcImZkMDA6OkZGRkZcIlxuICNkZWZpbmUgSVBWNl9UQklEX05FVFx0XHRcImZkMDA6OlwiXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwiZmQwMDo6MlwiXG5AQCAtMzcsNiArMzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCJmZDAxOjozXCJcbiAjZGVmaW5lIElQVjZfR1cxXHRcdFwiZmQwMTo6MVwiXG4gI2RlZmluZSBJUFY2X0dXMlx0XHRcImZkMDE6OjJcIlxuKyNkZWZpbmUgVkxBTl9JRFx0XHRcdDEwMFxuKyNkZWZpbmUgVkxBTl9JRkFDRVx0XHRcInZldGgxLjEwMFwiXG4rI2RlZmluZSBWTEFOX0lEX0RPV05cdFx0MTAyXG4rI2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCJ2ZXRoMS4xMDJcIlxuKyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCJ2ZXRoMS4yMDBcIlxuKyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCJ2ZXRoMS4yMDAuMzAwXCJcbisjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCIzMDBcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwiMTAuNS4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCIxMC41LjAuMlwiXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwiMTAuNy4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcIjEwLjYuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcIjEwLjUuMC4xXCJcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcImZkMDI6OjI1NFwiXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCJmZDAyOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCJmZDAzOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcImZkMDI6OjFcIlxuKyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuKyNkZWZpbmUgVlJGX0lGQUNFXHRcdFwidnJmLWJsdWVcIlxuKyNkZWZpbmUgVlJGX1RBQkxFXHRcdFwiMTAwMFwiXG4rI2RlZmluZSBWUkZfVkxBTl9JRFx0XHQxMDFcbisjZGVmaW5lIFZSRl9WTEFOX0lGQUNFXHRcdFwidmV0aDEuMTAxXCJcbisjZGVmaW5lIElQVjRfVlJGX0lGQUNFX0FERFJcdFwiMTAuOC4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZSRl9HV1x0XHRcIjEwLjguMC4xXCJcbisjZGVmaW5lIElQVjRfVlJGX0RTVFx0XHRcIjEwLjkuMC4yXCJcbisjZGVmaW5lIFRCSURfVkxBTl9JRFx0XHQ1MFxuKyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwidmV0aDIuNTBcIlxuKyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcIjE3Mi4yLjAuMlwiXG4rI2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwiMTAuMTEuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcIjEwLjUuOS4yXCJcbisjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbisjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRFx0MzAwXG4rI2RlZmluZSBCT05EX0lGQUNFXHRcdFwiYm9uZDk5XCJcbisjZGVmaW5lIEJPTkRfUE9SVFx0XHRcInZldGgzXCJcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXHRcdFwidmV0aDRcIlxuKyNkZWZpbmUgQk9ORF9WTEFOX0lEXHRcdDUwMFxuICNkZWZpbmUgRE1BQ1x0XHRcdFwiMTE6MTE6MTE6MTE6MTE6MTFcIlxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxuICNkZWZpbmUgRE1BQzJcdFx0XHRcIjAxOjAxOjAxOjAxOjAxOjAxXCJcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcbiBcdF9fdTMyIHRiaWQ7XG4gXHRfX3U4IGRtYWNbNl07XG4gXHRfX3UzMiBtYXJrO1xuK1x0LypcbitcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbitcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxuK1x0ICovXG4rXHRfX3UxNiB2bGFuX3Byb3RvO1xuK1x0X191MTYgdmxhbl9pZDtcbitcdGJvb2wgY2hlY2tfdmxhbjtcbitcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4rXHRjb25zdCBjaGFyICppaWY7XHQgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqL1xuK1x0X191MTYgdG90X2xlbjtcdFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xuK1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgKzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4gXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbitcdC8qXG4rXHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuK1x0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxuK1x0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xuK1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcbitcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgfSxcbiBcdHsgLmRlc2MgPSBcIklQdjYgVEJJRCBsb29rdXAgZmFpbHVyZVwiLFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4gXHQgIC5tYXJrID0gTUFSSywgfSxcbitcdC8qIHZsYW4gZWdyZXNzIHJlc29sdXRpb24gKi9cbitcdC8qXG4rXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXG4rXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIFNVQ0NFU1MgYWx3YXlzIGNhcnJpZXMgYSBwaHlzaWNhbCxcbitcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXG4rXHQgKiBpZmluZGV4LiBSZWR1Y2libGUgYXJtcyBwaW4gaWZpbmRleCA9PSB0aGUgcGh5c2ljYWwgcGFyZW50OyB0aGVcbitcdCAqIFFpblEgYW5kIGZvcmVpZ24tbmV0bnMgYXJtcyBwaW4gVkxBTl9GQUlMVVJFIHdpdGggcGFyYW1zLVx1MDAzZWlmaW5kZXhcbitcdCAqIGxlZnQgYXQgdGhlIGlucHV0LCBzbyBhIHJlZ3Jlc3Npb24gdG8gYmVzdC1lZmZvcnQgKFNVQ0NFU1MgKyB0aGVcbitcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0LypcbitcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UncyBtdHVcbitcdCAqICgxNDAwKSwgbm90IHRoZSBwYXJlbnQncyAoMTUwMClcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSdzIHdpdGhvdXQgdGhlIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCAuZXhwZWN0ZWRfbXR1ID0gMTQwMCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcIixcbitcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCxcbitcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlwiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuaWlmID0gVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzIG92ZXIgYSBib25kXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MgdmlhIFRCSUQgdGFibGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9UQklEX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnRiaWQgPSAxMDAsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgyXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBzdWNjZXNzIHdyaXRlcyBtdHVfcmVzdWx0IHdpdGggdGhlIHN3YXBcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIEZSQUdfTkVFREVEIHJlcG9ydHMgbXR1LCBzd2FwIHVud3JpdHRlblwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsXG4rXHQgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0LyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsXG4rXHQgIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogVlJGOiB0aGUgcmVzb2x2ZWQgc3ViaW50ZXJmYWNlIGlzIGVuc2xhdmVkLCBzbyB0aGUgbDNtZGV2IHJ1bGVcbitcdCAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3RcbitcdCAqIHRoZSBWUkYgdGFibGUgZnJvbSB0aGUgcmVzb2x2ZWQgaW5ncmVzc1xuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBWUkYgdGFibGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxuK1x0ICogbmFtZXMgdGhlIHBoeXNpY2FsIGRldmljZSBhbmQgdGhlIGlucHV0IHRhZyBieXRlcyBzdXJ2aXZlXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHN1YmludGVyZmFjZSBkb3duXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRF9ET1dOLCB9LFxuK1x0LypcbitcdCAqIHRoZSByZXNvbHZlciBydW5zIGJlZm9yZSB0aGUgZm9yd2FyZGluZyBjaGVjaywgc28gb24gZGV2aWNlc1xuK1x0ICogd2l0aCBmb3J3YXJkaW5nIG9mZiBGV0RfRElTQUJMRUQgKG5vdCBOT1RfRldERUQpIHByb3ZlcyB0aGUgdGFnXG4rXHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxQUQsIC52bGFuX2lkID0gUUlOUV9BRF9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAweGUwMDAgfCBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBpbm5lciBRaW5RIGRldmljZSBmcm9tIFZMQU4gaWZpbmRleFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4rXHQgIC5paWYgPSBRSU5RX09VVEVSX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxuK1x0LypcbitcdCAqIGJvbmRpbmc6IHRoZSBWTEFOcyBsaXZlIG9uIHRoZSBtYXN0ZXIsIGFzIG9uIHJlY2VpdmUsIHdoZXJlIHRoZVxuK1x0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxuK1x0ICogaWZpbmRleCBkb2VzIG5vdCBtYXRjaCAocG9ydHMgY2FycnkgdmlkIHN0YXRlIGJ1dCBubyBWTEFOIGRldnMpXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmlpZiA9IEJPTkRfSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIHBvcnQgZG9lcyBub3QgbWF0Y2hcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuaWlmID0gQk9ORF9QT1JULCAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9QT1JULCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cIixcbitcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbitcdHsgLmRlc2MgPSBcInVua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcdTAwM2NcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuIH07XG4gXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuQEAgLTIwNCw2ICs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcbiBcdFNZUyhmYWlsLCBcImlwIHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCIsIE1BUkssIE1BUktfVEFCTEUpO1xuIFx0U1lTKGZhaWwsIFwiaXAgLTYgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcIiwgTUFSSywgTUFSS19UQUJMRSk7XG4gXG4rXHQvKlxuK1x0ICogU2V0dXAgZm9yIHZsYW4gdGVzdHM6IGEgc3ViaW50ZXJmYWNlIGZvciBlZ3Jlc3MgcmVzb2x1dGlvbiBhbmRcbitcdCAqIHRhZy1hcy1pbnB1dCwgYSBRaW5RIHN0YWNrLCBhbmQgYW4gaWlmIHJ1bGUgc28gdGhlIGlucHV0IHRlc3RzXG4rXHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFZMQU5fSUZBQ0UpO1xuK1x0LypcbitcdCAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGVcbitcdCAqIEZJQiByZXN1bHQgKFZMQU4pIGRldmljZSwgc28gbXR1X3Jlc3VsdCBpcyB0aGlzIHZhbHVlLCB3aGljaCB0aGVcbitcdCAqIG5vLWZsYWcgYXJtIGJlbG93IHBpbnNcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXCIsIFZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIElQVjRfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFwiLCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XG4rXG4rXHQvKlxuK1x0ICogc3RheXMgZG93bjogdGhlIGlucHV0IGZsYWcgbXVzdCB0cmVhdCBpdHMgdGFnIHRoZSB3YXkgcmVhbFxuK1x0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXG4rXHQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7XG4rXG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cIiBWTEFOX0lGQUNFIFwiL2ZvcndhcmRpbmdcIiwgXCIxXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlwiIFZMQU5fSUZBQ0UgXCIuZm9yd2FyZGluZylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL1wiIFZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuXCIgVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMFwiLFxuK1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzIHR5cGUgdmxhbiBpZCAzMDBcIixcbitcdCAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBRSU5RX09VVEVSX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXNcIiwgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXCIsIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcIixcbitcdCAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1wiLCBJUFY2X1ZMQU5fRFNULCBJUFY2X0dXMSk7XG4rXHRTWVMoZmFpbCwgXCJpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1wiLFxuK1x0ICAgIFZMQU5fVEFCTEUsIElQVjZfVkxBTl9EU1QsIElQVjZfVkxBTl9HVyk7XG4rXHRTWVMoZmFpbCwgXCJpcCAtNiBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1wiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbitcbitcdC8qIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFwiLCBCT05EX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcIiwgQk9ORF9QT1JULCBCT05EX1BPUlRfUEVFUik7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcIiwgQk9ORF9QT1JULCBCT05EX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBCT05EX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBCT05EX1BPUlQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcy4lZCB1cFwiLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcy4lZFwiLFxuK1x0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbitcbitcdC8qXG4rXHQgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZVxuK1x0ICogbXVzdCBub3Qgc2VlIGl0KSwgZm9yIHRoZSB0YWJsZS1zZWxlY3Rpb24tYnktaW5ncmVzcyBjYXNlc1xuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlc1wiLCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVlJGX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCIsIFZSRl9WTEFOX0lGQUNFLCBWUkZfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFZSRl9WTEFOX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGFkZHIgYWRkICVzLzI0IGRldiAlc1wiLCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7XG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cIiBWUkZfVkxBTl9JRkFDRSBcIi9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi5cIiBWUkZfVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1wiLCBJUFY0X1ZSRl9EU1QsIElQVjRfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcIixcbitcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xuK1xuK1x0LyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqL1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY0L25laWdoL1wiIFZMQU5fSUZBQ0UgXCIvZ2Nfc3RhbGVfdGltZVwiLCBcIjkwMFwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQubmVpZ2guXCIgVkxBTl9JRkFDRSBcIi5nY19zdGFsZV90aW1lKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0U1lTKGZhaWwsIFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXCIsXG4rXHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXCIsXG4rXHQgICAgSVBWNF9WTEFOX0dXLCBWTEFOX0lGQUNFLCBETUFDMik7XG4rXG4rXHQvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBUQklEX1ZMQU5fSUZBQ0UsIFRCSURfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVEJJRF9WTEFOX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzXCIsXG4rXHQgICAgSVBWNF9UQklEX1ZMQU5fRFNULCBUQklEX1ZMQU5fSUZBQ0UpO1xuK1xuK1x0LyogYSBsb2NrZWQtbXR1IHJvdXRlIHZpYSB0aGUgc3ViaW50ZXJmYWNlIGZvciB0aGUgRlJBR19ORUVERUQgY2FzZSAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXCIsXG4rXHQgICAgSVBWNF9WTEFOX01UVV9EU1QsIFZMQU5fSUZBQ0UpO1xuK1xuIFx0cmV0dXJuIDA7XG4gZmFpbDpcbiBcdHJldHVybiAtMTtcbkBAIC0yMTgsOSArNTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpO1xuIFxuIFx0cGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4tXHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGlmaW5kZXg7XG4rXHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHRlc3QtXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cdTAwM2VpaWYpIDogaWZpbmRleDtcbiBcdHBhcmFtcy1cdTAwM2V0YmlkID0gdGVzdC1cdTAwM2V0YmlkO1xuIFx0cGFyYW1zLVx1MDAzZW1hcmsgPSB0ZXN0LVx1MDAzZW1hcms7XG4rXHRwYXJhbXMtXHUwMDNldG90X2xlbiA9IHRlc3QtXHUwMDNldG90X2xlbjtcbitcbitcdC8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqL1xuK1x0aWYgKHRlc3QtXHUwMDNlbG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4rXHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LVx1MDAzZXZsYW5fcHJvdG8pO1xuK1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9pZCk7XG4rXHR9XG4gXG4gXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVx1MDAzZWRhZGRyLCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpID09IDEpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuQEAgLTI5OCw3ICs2NzUsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuIFx0c3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07XG4gXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDtcbi1cdGludCBwcm9nX2ZkLCBlcnIsIHJldCwgaTtcbitcdGludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcmV0LCBpO1xuIFxuIFx0LyogVGhlIHRlc3QgZG9lcyBub3QgdXNlIHRoZSBza2ItXHUwMDNlZGF0YSwgc29cbiBcdCAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuXG5AQCAtMzA5LDExICs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4gXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbiBcdCk7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbitcdCk7XG4gXG4gXHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuIFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4rXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3hkcCk7XG4gXG4gXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVEVTVCk7XG4gXG5AQCAtMzQzLDYgKzcyNSwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfdGVzdF9ydW5fb3B0c1wiKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0LypcbitcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiBpcyBYRFAtb25seTsgdGhlIHRjIGhlbHBlciByZWplY3RzIGl0LlxuK1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHtcbitcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4rXHRcdFx0XHQgIFwidGMgcmVqZWN0cyBCUEZfRklCX0xPT0tVUF9WTEFOXCIpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCJmaWJfbG9va3VwX3JldFwiKTtcbiBcbkBAIC0zNTIsNiArNzQ0LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsXG4rXHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwiaWZpbmRleFwiKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSlcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4rXHRcdFx0XHQgIFwibXR1X3Jlc3VsdFwiKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8sXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcImhfdmxhbl9wcm90b1wiKTtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXCJoX3ZsYW5fVENJXCIpO1xuK1x0XHR9XG4rXG4gXHRcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XG4gXHRcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCJkbWFjIG5vdCBtYXRjaFwiKSkge1xuIFx0XHRcdGNoYXIgZXhwZWN0ZWRbMThdLCBhY3R1YWxbMThdO1xuQEAgLTM2MSwxNyArNzY4LDMyMiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHRcdHByaW50ZihcImRtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwiLCBleHBlY3RlZCwgYWN0dWFsKTtcbiBcdFx0fVxuIFxuLVx0XHQvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuXG4tXHRcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCkge1xuK1x0XHQvKlxuK1x0XHQgKiBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuIFdpdGhcbitcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4rXHRcdCAqIGZpZWxkcyBpbnN0ZWFkLCBzbyBza2lwIHRoZSBjaGVjayBmb3IgdGhvc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSkge1xuIFx0XHRcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9wYXJhbXMudGJpZCwgMCxcbiBcdFx0XHRcdFx0XCJleHBlY3RlZCBmaWJfcGFyYW1zLnRiaWQgdG8gYmUgemVyb1wiKSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuK1x0LypcbitcdCAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGVcbitcdCAqIGN1cnJlbnQgbmV0bnMnIGxvb3BiYWNrIGZvciBjdHgtXHUwMDNlcnhxLVx1MDAzZWRldiwgc28gZGV2X25ldCgpIGlzIE5TX1RFU1RcbitcdCAqIGFuZCB0aGUgbG9va3VwIHJ1bnMgYWdhaW5zdCBpdHMgRklCLiBUaGUgcGF0aC1pbmRlcGVuZGVudCByZXN1bHRzXG4rXHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuK1x0ICogcGF0aDsgdGhlIG5vLXRvdF9sZW4gbXR1X3Jlc3VsdCBpcyBza2Itc3BlY2lmaWMgYW5kIG5vdCByZWNoZWNrZWQuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcbitcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4rXHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IHRlc3RzW2ldLmxvb2t1cF9mbGFncztcbitcbitcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInhkcCB0ZXN0X3J1blwiKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbitcdFx0XHQgICAgICAgXCJ4ZHAgZmliX2xvb2t1cF9yZXRcIikpXG4rXHRcdFx0cHJpbnRmKFwiKHhkcCkgJXNcXG5cIiwgdGVzdHNbaV0uZGVzYyk7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbitcdFx0XHRcdCAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSxcbitcdFx0XHRcdCAgXCJ4ZHAgaWZpbmRleFwiKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbitcdFx0XHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXCJ4ZHAgaF92bGFuX3Byb3RvXCIpO1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0ksXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcInhkcCBoX3ZsYW5fVENJXCIpO1xuK1x0XHR9XG4rXG4rXHRcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XG4rXHRcdEFTU0VSVF9FUShyZXQsIDAsIFwieGRwIGRtYWNcIik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzXG4rXHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuK1x0XHQgKiBza2Itb25seSwgc28gZ2F0ZSBvbiB0b3RfbGVuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbitcdFx0XHRcdCAgXCJ4ZHAgbXR1X3Jlc3VsdFwiKTtcbitcdH1cbitcbiBmYWlsOlxuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBOU19URVNUKTtcbiBcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuK1xuKyNkZWZpbmUgTlNfVkxBTl9BXHRcImZpYl9sb29rdXBfdmxhbl9uc19hXCJcbisjZGVmaW5lIE5TX1ZMQU5fQlx0XCJmaWJfbG9va3VwX3ZsYW5fbnNfYlwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fTkVUTlNfQUREUlx0XCIxMC42Ni4wLjFcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX05FVE5TX0RTVFx0XCIxMC42Ni4wLjJcIlxuK1xuKy8qXG4rICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWRcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuKyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50J3MgaWZpbmRleCwgYW5kIHRoZVxuKyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4rICovXG4rdm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbitcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuK1x0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcbitcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0XHQgICAgLmN0eF9pbiA9IFx1MDAyNnNrYixcbitcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuK1x0KTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbitcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbitcdGZpYl9wYXJhbXMgPSBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1ZMQU5fQSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVkxBTl9CKTtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zKGEpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4XCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2IHZldGg3IHVwXCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NlwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzXCIsIE5TX1ZMQU5fQik7XG4rXHQvKlxuK1x0ICogdXAgaXQgaW4gQiBiZWZvcmUgdGhlIGlucHV0IGxvb2t1cDogdGhlIG1vdmUgY2xvc2VkIGl0LCBhbmQgYVxuK1x0ICogZG93biBkZXZpY2UgZmFpbHMgdGhlIHJlc29sdmVyIG9uIElGRl9VUCBiZWZvcmUgcmVhY2hpbmcgdGhlXG4rXHQgKiBuZXRucyBjaGVjayB0aGlzIHN1YnRlc3QgZXhpc3RzIHRvIHBpblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCAtbiAlcyBsaW5rIHNldCBkZXYgdmV0aDcuNjYgdXBcIiwgTlNfVkxBTl9CKTtcbitcbitcdHBhcmVudF9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGg3XCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcncyBWTEFOIGdyb3VwLCBidXQgaXRcbitcdCAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZFxuK1x0ICovXG4rXHRza2IuaWZpbmRleCA9IHBhcmVudF9pZHg7XG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSBwYXJlbnRfaWR4O1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyg2Nik7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX05FVE5TX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihkc3QpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8XG4rXHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNnJ1bl9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihpbnB1dClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHRcdCAgXCJpbnB1dCBhY3Jvc3MgbmV0bnMgZmFpbHMgY2xvc2VkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCwgcGFyZW50X2lkeCwgXCJpZmluZGV4IHVudG91Y2hlZFwiKTtcbitcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0ksIGh0b25zKDY2KSwgXCJ0YWcgdW50b3VjaGVkXCIpO1xuK1xuK1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRucyhiKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LypcbitcdCAqIGVncmVzczogdGhlIGZpYiByZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlIGhlcmUsIGJ1dCBpdHMgcGFyZW50XG4rXHQgKiBpcyBpbiB0aGUgb3RoZXIgbmV0bnMsIHNvIHRoZSBzd2FwIG11c3Qgbm90IGhhcHBlblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDcuNjZcIiwgSVBWNF9WTEFOX05FVE5TX0FERFIpO1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvdmV0aDcuNjYvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKGZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHR2bGFuX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDcuNjZcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEodmxhbl9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2bGFuX2lkeDtcbitcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKGRzdClcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fTkVUTlNfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihzcmMpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4rXHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuKGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4rXHRcdCAgXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCB2bGFuX2lkeCxcbitcdFx0ICBcImZvcmVpZ24gcGFyZW50IG5vdCBwdWJsaXNoZWRcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCAwLCBcInZsYW4gZmllbGRzIHplcm9cIik7XG4rXG4rZmFpbDpcbitcdGlmIChuc3Rva2VuKVxuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTlNfVkxBTl9BKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTlNfVkxBTl9CKTtcbitcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuKyNkZWZpbmUgUkVESVJFQ1RfTlBLVFMgMTAwMFxuKyNkZWZpbmUgTlNfUkVESVJFQ1QgXCJmaWJfbG9va3VwX3JlZGlyZWN0X25zXCJcbitcbisvKlxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuKyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuKyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbisgKiB4ZHBfZG9fcmVkaXJlY3QoKSArIHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4rICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbisgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbisgKi9cbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4re1xuK1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4rXHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuK1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19SRURJUkVDVCk7XG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19SRURJUkVDVCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoc2V0dXBfbmV0bnMoKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0dmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoMVwiKTtcbitcdHZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDJcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEodmV0aDFfaWR4LCAwLCBcImlmX25hbWV0b2luZGV4KHZldGgxKVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoMilcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qXG4rXHQgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpXG4rXHQgKiBvbmx5IGFjY2VwdHMgdGhlIGZyYW1lIGlmIHZldGgyJ3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xuK1x0ICogdmV0aDIgY2FycmllcyBhbiBYRFAgcHJvZ3JhbTsgeGRwX2NvdW50IHRhbGxpZXMgd2hhdCBhcnJpdmVzLlxuK1x0ICovXG4rXHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9jb3VudCksXG4rXHRcdFx0ICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImF0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdHhkcF9hdHRhY2hlZCA9IHRydWU7XG4rXG4rXHQvKiByZWR1Y2libGUgVkxBTiBlZ3Jlc3M6IHJlc29sdmVzIHRvIHRoZSBwaHlzaWNhbCBwYXJlbnQgdmV0aDEgKi9cbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbitcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oc3JjKVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9FR1JFU1NfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRlbGl2ZXJlZCA9IDA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihyZWR1Y2libGUgZWdyZXNzKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZGlyZWN0ZWQsIFJFRElSRUNUX05QS1RTLCBcInJlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIDAsIFwicmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkXCIpO1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRlbGl2ZXJlZCwgMCwgXCJyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlwiKTtcbitcbitcdC8qXG4rXHQgKiBRaW5RIGVncmVzczogbm90IHJlZHVjaWJsZSwgc28gdGhlIGxvb2t1cCByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmRcbitcdCAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXJcbitcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxuK1x0ICogcHJvZ3JhbSBkaWQgbm90IHJlZGlyZWN0IHRvIGEgZGV2aWNlIHRoYXQgd291bGQgZHJvcCB0aGUgZnJhbWUgYXRcbitcdCAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMidzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxuK1x0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJ3MgZm9yd2FyZGluZ1xuK1x0ICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LlxuK1x0ICovXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHNyYylcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHFpbnEgZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCA9IDA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihxaW5xIGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcInFpbnEgZWdyZXNzIHBhc3NlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCAwLCBcInFpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAoeGRwX2F0dGFjaGVkKVxuK1x0XHRicGZfeGRwX2RldGFjaCh2ZXRoMl9pZHgsIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1JFRElSRUNUKTtcbitcdGZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5pbmRleCA3YjVkZDIyMTRmZjQ2YS4uMzZiNzIxOGQ5YWUyZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5AQCAtNCw3ICs0LDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X2Nscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIGZpYl9wYXJhbXMgPSB7fTtcbiBpbnQgZmliX2xvb2t1cF9yZXQgPSAwO1xuQEAgLTE5LDQgKzIzLDU3IEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuK1x0XHRcdFx0XHRsb29rdXBfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbitpbnQgcmVkaXJlY3RlZCA9IDA7XG4raW50IHBhc3NlZCA9IDA7XG4raW50IGRlbGl2ZXJlZCA9IDA7XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4rXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xuK1x0XHRyZWRpcmVjdGVkKys7XG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuK1x0fVxuK1xuK1x0cGFzc2VkKys7XG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cdTAwM2VkYXRhX2VuZDtcbitcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbitcbitcdC8qXG4rXHQgKiBjb3VudCBvbmx5IHRoZSB0ZXN0J3MgVENQIGZyYW1lczogdGhlIG5ldG5zIGhhcyBsaXZlXG4rXHQgKiBsaW5rLWxvY2FsIHRyYWZmaWMgKERBRCwgTUxEKSB0aGF0IHdvdWxkIHNhdGlzZnkgYSBiYXJlXG4rXHQgKiBjb3VudGVyXG4rXHQgKi9cbitcdGlmICgodm9pZCAqKShldGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdCAgICBldGgtXHUwMDNlaF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKVxuK1x0XHRyZXR1cm4gWERQX0RST1A7XG4rXHRpcGggPSAodm9pZCAqKShldGggKyAxKTtcbitcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuK1x0XHRyZXR1cm4gWERQX0RST1A7XG4rXG4rXHRkZWxpdmVyZWQrKztcbitcdHJldHVybiBYRFBfRFJPUDtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MDguMDMyNDQ4NjU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxNjg5MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZMQU4gQlBGIEZJQiBMb29rdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBWTEFOIHN1cHBvcnQgdG8gdGhlIGBicGZfZmliX2xvb2t1cGAgaGVscGVyLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIHNvbWUgbmV3IGZsYWdzLCBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcvQlBGIHN1YnN5c3RlbSwgc28gZnV6emluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwuXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbW9kaWZpZWQgYW5kIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zLiBUaGUgbW9zdCBpbW1lZGlhdGUgdGFyZ2V0cyB0aGF0IGp1bXAgb3V0IGFyZTpcblxuKiAgIGBicGZfZmliX3NldF9md2RfcGFyYW1zYDogVGhpcyBvbmUncyBsaWtlbHkgdG8gYmUgY29yZSB0byB0aGUgZm9yd2FyZGluZyBsb2dpYy5cbiogICBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmA6IEJlaW5nIGEgbmV3IGZ1bmN0aW9uIGRlZGljYXRlZCB0byBWTEFOIGlucHV0IGRldmljZSBoYW5kbGluZywgaXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGEgcHJpbWUgdGFyZ2V0IGZvciBzY3J1dGlueS5cbiogICBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGA6IFRoZXNlIGFyZSBob3QgcGF0aHMgaW4gdGhlIEZJQiBsb29rdXAsIHNvIHRoZSBtb2RpZmljYXRpb25zIGFyZSBpbXBvcnRhbnQuXG4qICAgYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgOiBUaGVzZSBhcmUga2V5IEJQRiBoZWxwZXJzLCBzbyB0aGV5IHdpbGwgYmUgaW1wb3J0YW50IHRvIGFuYWx5emUuXG5cbkknbGwgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlbGllcyBvbiBgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlgLCBzbyB0aGF0J3MgdGhlIGtleSBvbmUgdG8gZW5hYmxlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgYWxzbyBjb25maWd1cmVkLCBidXQgdGhvc2UgYXJlIHVzdWFsbHkgc3RhbmRhcmQuIEknbGwgYWxzbyBjaGVjayBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMTo1NjoxNS41NDkzNDE4ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNDIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1ZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjIxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlcXG5uZXQvY29yZS9maWx0ZXIuYy02MjEyLVxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSBcXHUwMDI2XFx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjE1LjYwODY4NzkxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzU2ODQzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEZpbHRlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IHJlcXVpcmVtZW50IGhlcmUgc2VlbXMgdG8gYmUgc3VwcG9ydCBmb3IgYFZMQU5fODAyMVFgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gQmVmb3JlIEkgcHJvY2VlZCwgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyIGJlc2lkZXMgdGhpcz8gSSd2ZSBzZWVuIGEgcGF0Y2ggYXBwbGllZCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZnVuY3Rpb24gYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIFZMQU4gaGFuZGxpbmcgaXMgYmVpbmcgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIGV4aXN0aW5nIEJQRiBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWVwbHkgdG8gZ2F1Z2UgdGhlIGVmZmVjdGl2ZW5lc3MgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MTguODg0Mzc0NzQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTQzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy02MjM0LVxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjcxLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjcyOlxcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNzMtXFx0XFx0aWYgKElTX0VSUihkZXYpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MjktXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MzA6XFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjQzMS1cXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjE4LjkzOTMyNDE5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTMyNzYxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgRklCIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBCUEYgRklCIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBpcyB6ZXJvaW5nIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIFNwZWNpZmljYWxseSwgdGhlIG9uZXMgZGlyZWN0bHkgcmVsYXRlZCB0byBWTEFOIGFuZCBmb3J3YXJkaW5nOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRoZSBsb29rdXAgZnVuY3Rpb25zLCBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIE9mIGNvdXJzZSwgd2UgYWxzbyBoYXZlIHRoZSBpcHY0IGFuZCBpcHY2IGxvb2t1cCB2YXJpYXRpb25zIGdldHRpbmcgdHdlYWtlZCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgZm9yd2FyZGluZyBsb2dpYyBiZWluZyBtb2RpZmllZCwgc28gdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gcmVhbGx5IGRpZyBpbnRvLlxuXG5Ob3csIGxldCdzIHNlZSwgdGhlIHBhdGNoIGlzIGFsc28gY2hlY2tpbmcgaWYgd2Ugb25seSBoYXZlIGBWTEFOXzgwMjFRYCBjb25maWd1cmVkLiBSaWdodCwgaXQncyBsZXZlcmFnaW5nIGEgc3VpdGUgb2YgVkxBTi1yZWxhdGVkIGhlbHBlcnM6IGBpc192bGFuX2RldmAsIGB2bGFuX2Rldl9wcml2YCwgYHZsYW5fZGV2X3ZsYW5fcHJvdG9gLCBgdmxhbl9kZXZfdmxhbl9pZGAsIGFuZCB0aGF0IFJDVSBmdW5jdGlvbiwgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAuIE9rYXksIHRoZSBWTEFOIGNvZGUgc2hvdWxkIGJlIGZhaXJseSBzdGFuZGFyZCBmcm9tIGhlcmUsIGJ1dCBJIHdvbmRlciwgYXJlIGFsbCBvZiB0aGVzZSBkZXBlbmRlbnQgb24gYENPTkZJR19WTEFOXzgwMjFRYCBvciBwb3RlbnRpYWxseSB0aGUgbW9kdWxlIHZlcnNpb24sIGBDT05GSUdfVkxBTl84MDIxUV9NT0RVTEVgPyBXZSdyZSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgVkxBTiBzdXBwb3J0IGlzIGVpdGhlciBidWlsdC1pbiBvciBlbmFibGVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQuIEFuZCB0aGF0IFJDVSBoZWxwZXI/IEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGJlaW5nIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gVGltZSB0byBjb25maXJtIHRoYXQsIGFuZCBhbHNvIG1ha2Ugc3VyZSBub3RoaW5nIHVudXN1YWwgaXMgYmVpbmcgZG9uZSB3aXRoIHRoZSBWTEFOLXNwZWNpZmljIGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mjk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjI0LjU5MjYwMjQyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk5MzkzMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00MDY4PXN0YXRpYyBib29sIGJueHRfcmVfY2hlY2tfaWZfdmxhbl92YWxpZChzdHJ1Y3QgYm54dF9yZV9kZXYgKnJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzQtXFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzo0MDc1OlxcdGlmICghX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHJkZXYtXFx1MDAzZW5ldGRldixcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzYtXFx0XFx0XFx0XFx0ICAgICAgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuX2lkKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF9pZmZfZnJvbV9tYWMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYy0xODctXFx0XFx0XFx0aWYgKHZsYW4gXFx1MDAyNlxcdTAwMjYgdmxhbiAhPSBWTEFOX1ZJRF9NQVNLKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM6MTg4OlxcdFxcdFxcdFxcdGRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmxhbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmMtMTg5LVxcdFxcdFxcdH0gZWxzZSBpZiAobmV0aWZfaXNfYm9uZF9zbGF2ZShkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM9MjE4PWludCBjeGdiNF91cGRhdGVfcm9vdF9kZXZfY2xpcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVkxBTl9OX1ZJRDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jOjIzNzpcXHRcXHRyb290X2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzOC1cXHRcXHRpZiAoIXJvb3RfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc0Mz1zdGF0aWMgdm9pZCBtbHhzd19zcF9yaWZfZGVzdHJveV92bGFuX3VwcGVyKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4NzUxOlxcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShicl9kZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUyLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc3MD1pbnQgbWx4c3dfc3Bfcm91dGVyX2JyaWRnZV92bGFuX2FkZChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6ODgzMjpcXHRcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9sZF9wdmlkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDgyPXZvaWQgcWxjbmljX3Jlc3RvcmVfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwOTEtXFx0Zm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItXFx1MDAzZXZsYW5zLCBWTEFOX05fVklEKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwOTI6XFx0XFx0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KG5ldGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2aWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkzLVxcdFxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9MzA5PXN0YXRpYyB2b2lkIGRvX25laWdoX3NvbGljaXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYnVmLCB1MTYgdGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI2LVxcdGlmICh0Y2kpIHtcXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzozMjc6XFx0XFx0bmV0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldi1cXHUwMDNlbmV0LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgdGNpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTEyMz1zdHJ1Y3Qgdmxhbl9wY3B1X3N0YXRzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoxMzY6ZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoyNTM6X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yNTQtXFx0XFx0ICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc1LS8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjc2OnN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNzctXFx0XFx0XFx0XFx0XFx0X19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTkzLVxcdFxcdGlmICh1cHBlcl9kZXYpXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjk0OlxcdFxcdFxcdHJldHVybiBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UodXBwZXJfZGV2LFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOTktfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMDA6RVhQT1JUX1NZTUJPTChfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyND12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE3OS1cXHRpZiAodmlkICE9IDApIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjE4MDpcXHRcXHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVxcdTAwM2VkZXYsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4MS1cXHRcXHRcXHRcXHRcXHRcXHQgICB2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTQ9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1NS1cXHRcXHQvKiBidWlsZCBuZWlnaCB0YWJsZSBsb29rdXAgb24gdGhlIHZsYW4gZGV2aWNlICovXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0NTY6XFx0XFx0dmxhbmRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShici1cXHUwMDNlZGV2LCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgdmlkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQ2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQ3OlxcdHZsYW4gPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0OC1cXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cXHR2aWQgPSBudG9ocyhwYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kpIFxcdTAwMjYgVkxBTl9WSURfTUFTSztcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ0OlxcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fFxcbi0tXFxubmV0L2RzYS90YWcuaD0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGRzYV9zb2Z0d2FyZV91bnRhZ192bGFuX3VuYXdhcmVfYnJpZGdlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvZHNhL3RhZy5oLTEzMS1cXHQgKi9cXG5uZXQvZHNhL3RhZy5oOjEzMjpcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIGh0b25zKHByb3RvKSwgdmlkKTtcXG5uZXQvZHNhL3RhZy5oLTEzMy1cXHRpZiAoIXVwcGVyX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MjYuMzkyMDAyMTk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk4Njc5NTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBUaGlzIEJQRi9WTEFOIFBhdGNoKipcblxuT2theSwgc28gYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAgaXMgZGVmaW5pdGVseSBhdmFpbGFibGUg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnQuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGNydWNpYWwgb25lIHNlZW1zIHRvIGJlIGBWTEFOXzgwMjFRYCwgd2hpY2ggdHJhbnNsYXRlcyB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYENPTkZJR19WTEFOXzgwMjFRYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgcmVsYXRlZCB0byBWTEFOLlxuXG5UaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCB3aGljaCBzdWdnZXN0cyBJJ2xsIG5lZWQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBlbmFibGVkLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIE9mIGNvdXJzZSwgQlBGIHJlcXVpcmVzIGBDT05GSUdfQlBGX1NZU0NBTExgLCBidXQgdGhhdCdzIGEgZ2l2ZW4gaW4gdGhlc2Ugc29ydHMgb2YgcGF0Y2hlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0LiBUaGUgY29kZSB1c2VzIGBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAsIHNvIGBWTEFOXzgwMjFRYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGltcGFjdHM6XG5cbiogICBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmBcbiogICBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2BcbiogICBgYnBmX3hkcF9maWJfbG9va3VwYFxuKiAgIGBicGZfc2tiX2ZpYl9sb29rdXBgXG4qICAgYGJwZl9pcHY0X2ZpYl9sb29rdXBgXG4qICAgYGJwZl9pcHY2X2ZpYl9sb29rdXBgXG5cbldhaXQsIGEgc2Vjb25k4oCmICBgYnBmX2lwdjRfZmliX2xvb2t1cGAgYW5kIGBicGZfaXB2Nl9maWJfbG9va3VwYCBhcmUgaG90IHBhdGhzLCByaWdodD8gWWVzLCB0aGV5J3JlIGNhbGxlZCBieSBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEFuZCB0aGV5J3JlICpzcGVjaWZpY2FsbHkqIG1vZGlmaWVkIGhlcmUuIFRoZXkncmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuIEl0IGxvb2tzIGxpa2UgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCBpcyBhbHNvIHJlbGV2YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AgaXMgYWxzbyBhIGZ1bmN0aW9uLlxuXG5TbywgaGVyZSdzIG15IHJldmlzZWQgbGlzdCB0byBmb2N1cyBvbjpcblxuKiAgIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YFxuKiAgIGBicGZfZmliX3NldF9md2RfcGFyYW1zYFxuKiAgIGBicGZfeGRwX2ZpYl9sb29rdXBgXG4qICAgYGJwZl9za2JfZmliX2xvb2t1cGBcbiogICBgYnBmX2lwdjRfZmliX2xvb2t1cGBcbiogICBgYnBmX2lwdjZfZmliX2xvb2t1cGBcbiogICBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIxOjU2OjM0LjM3ODc5OTY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzNDMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjU2MzpzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU2NC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NTc1PUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTgxOlxcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjA5PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NjE4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY2MTk6XFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjYyMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6MzQuNDM1MTQ5ODMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMjU5NjkzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgRklCIExvb2t1cCBWTEFOIFN1cHBvcnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AuIFRoYXQncyBpbXBvcnRhbnQgdG8gbm90ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIHRoZW4gbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCwgd2hpY2ggYXJlOiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEl0J3Mgd29ydGggaW5jbHVkaW5nIGBicGZfaXB2NF9maWJfbG9va3VwYCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgIGJlY2F1c2UgdGhleSdyZSBzcGVjaWZpYyB0byBCUEYgRklCIGxvb2t1cHMsIHdoaWNoIGRpZmZlcmVudGlhdGVzIHRoZW0gZnJvbSB0aGUgZ2VuZXJhbCBJUHY0L0lQdjYgcm91dGluZyBsb29rdXBzLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgc2VlbSByZWxldmFudCBoZXJlIGFyZSBgVkxBTl84MDIxUWAsIGBJTkVUYCwgYW5kIGBJUFY2YC4gV2hpbGUgYElORVRgIGFuZCBgSVBWNmAgYXJlIHN0YW5kYXJkLCBpbmNsdWRpbmcgdGhlbSBkb2Vzbid0IGh1cnQuIEhvd2V2ZXIsIGBWTEFOXzgwMjFRYCBpcyB0aGUgbW9zdCBzcGVjaWZpYy4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgYmVpbmcgdXNlZC4gT2theSwganVzdCBgQ09ORklHX1ZMQU5fODAyMVFgLiBHb29kLlxuXG5UaGUgcGF0Y2gncyBjb3JlIGltcGFjdCBpcyBhZGRpbmcgVkxBTiBzdXBwb3J0IHRvIGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCwgaW1wbGVtZW50aW5nIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzLiBUaGlzIGlzIG5ldHdvcmtpbmcgYW5kIEJQRiBjb3JlIGxvZ2ljLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGVzcGVjaWFsbHkgc2luY2Ugc3l6a2FsbGVyIGNhbiByZWFjaCBpdC4gSSB0aGluayB0aGUgb3JpZ2luYWwgbGlzdCBvZiBmb2N1cyBmdW5jdGlvbnMgaXMgYXBwcm9wcmlhdGUsIHNvIHRoZSBsaXN0IHJlbWFpbnM6IGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCwgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgLCBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfaXB2NF9maWJfbG9va3VwYCwgYW5kIGBicGZfaXB2Nl9maWJfbG9va3VwYC4gQWxyaWdodCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDAzMywiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjE6NTY6NDMuNjYxMTIyMDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NjI0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZmliX3ZsYW5faW5wdXRfZGV2XCIsXG4gICAgXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gICAgXCJicGZfZmliX2xvb2t1cF9mbGFnc19va1wiLFxuICAgIFwiYnBmX3hkcF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfc2tiX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXJzIChgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCB0byBoYW5kbGUgVkxBTiBlZ3Jlc3MgYW5kIGluZ3Jlc3MgcmVzb2x1dGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBjYW4gYmUgZnV6emVkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpYl92bGFuX2lucHV0X2RldlwiLFxuICAgIFwiYnBmX2ZpYl9zZXRfZndkX3BhcmFtc1wiLFxuICAgIFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVycyAoYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyBuZXcgZmxhZ3MgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgdG8gaGFuZGxlIFZMQU4gZWdyZXNzIGFuZCBpbmdyZXNzIHJlc29sdXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgY2FuIGJlIGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[1] Phase: Succeeded StartedAt: 2026-07-13 21:56:55 +0000 UTC FinishedAt: 2026-07-13 21:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 21:56:55 +0000 UTC FinishedAt: 2026-07-13 21:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2] Phase: Succeeded StartedAt: 2026-07-13 21:56:55 +0000 UTC FinishedAt: 2026-07-14 01:51:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 21:56:55 +0000 UTC FinishedAt: 2026-07-14 01:51:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 21:56:55 +0000 UTC FinishedAt: 2026-07-13 21:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 21:56:55 +0000 UTC FinishedAt: 2026-07-13 21:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-1531792664/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 21:57:06 +0000 UTC FinishedAt: 2026-07-13 22:19:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 21:57:06 +0000 UTC FinishedAt: 2026-07-13 22:19:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5dc7e03a-bef3-43fc-a7a9-2c7c69d8002f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-1531792664/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3a346fdd-9ab3-4d13-9f2b-e2cf324590c8", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-3111946830/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 21:57:06 +0000 UTC FinishedAt: 2026-07-13 22:19:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5dc7e03a-bef3-43fc-a7a9-2c7c69d8002f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-1531792664/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3a346fdd-9ab3-4d13-9f2b-e2cf324590c8", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-3111946830/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 22:19:46 +0000 UTC FinishedAt: 2026-07-13 22:19:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 22:19:46 +0000 UTC FinishedAt: 2026-07-13 22:19:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 22:19:46 +0000 UTC FinishedAt: 2026-07-13 22:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 22:19:46 +0000 UTC FinishedAt: 2026-07-13 22:19:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-3819308671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 22:19:56 +0000 UTC FinishedAt: 2026-07-13 22:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 22:19:56 +0000 UTC FinishedAt: 2026-07-13 22:21:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a346fdd-9ab3-4d13-9f2b-e2cf324590c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-3111946830/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 22:21:51 +0000 UTC FinishedAt: 2026-07-13 22:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 22:21:51 +0000 UTC FinishedAt: 2026-07-13 22:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 22:21:51 +0000 UTC FinishedAt: 2026-07-13 22:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 22:21:51 +0000 UTC FinishedAt: 2026-07-13 22:46:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5dc7e03a-bef3-43fc-a7a9-2c7c69d8002f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-3819308671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "11bc1317-150e-4cea-8cd7-02b88d1d054b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-1069075603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 22:21:51 +0000 UTC FinishedAt: 2026-07-13 22:46:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5dc7e03a-bef3-43fc-a7a9-2c7c69d8002f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-3819308671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "11bc1317-150e-4cea-8cd7-02b88d1d054b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-1069075603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 22:46:31 +0000 UTC FinishedAt: 2026-07-13 22:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 22:46:31 +0000 UTC FinishedAt: 2026-07-13 22:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 22:46:31 +0000 UTC FinishedAt: 2026-07-13 22:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 22:46:31 +0000 UTC FinishedAt: 2026-07-13 22:48:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*11bc1317-150e-4cea-8cd7-02b88d1d054b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-1069075603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 22:48:31 +0000 UTC FinishedAt: 2026-07-14 01:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 22:48:31 +0000 UTC FinishedAt: 2026-07-14 01:51:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3a346fdd-9ab3-4d13-9f2b-e2cf324590c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*11bc1317-150e-4cea-8cd7-02b88d1d054b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-3111946830/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-1069075603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 22:48:31 +0000 UTC FinishedAt: 2026-07-13 22:48:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 22:48:31 +0000 UTC FinishedAt: 2026-07-13 22:48:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-3269223448/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 22:48:31 +0000 UTC FinishedAt: 2026-07-13 22:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 22:48:31 +0000 UTC FinishedAt: 2026-07-13 22:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 22:48:31 +0000 UTC FinishedAt: 2026-07-13 22:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 22:48:41 +0000 UTC FinishedAt: 2026-07-14 01:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbx74d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_fib_vlan_input_dev","bpf_fib_set_fwd_params","bpf_fib_lookup_flags_ok","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","INET","IPV6"],"series_id":"b2955805-74ad-4e05-909f-030e825d72f5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 22:48:41 +0000 UTC FinishedAt: 2026-07-14 01:50:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a346fdd-9ab3-4d13-9f2b-e2cf324590c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*11bc1317-150e-4cea-8cd7-02b88d1d054b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-3111946830/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-build-action-1069075603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbx74d/series-workflowbx74d-convert-artifact-3269223448/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}