Name: series-workflow7t7nn Phase: Succeeded StartedAt: 2026-08-01 13:37:57 +0000 UTC FinishedAt: 2026-08-01 17:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[0] Phase: Succeeded StartedAt: 2026-08-01 13:37:57 +0000 UTC FinishedAt: 2026-08-01 14:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 13:37:57 +0000 UTC FinishedAt: 2026-08-01 14:00:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETKIT", "NET_IPIP", "NET_IPGRE", "NET_IPVTI", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT", "IPV6_VTI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETKIT", "NET_IPIP", "NET_IPGRE", "NET_IPVTI", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT", "IPV6_VTI" ], "series_id": "24c5c8ca-e3b9-405e-8997-6e9d61202074" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "netkit_new_link", "netkit_change_link", "ipgre_newlink", "ipgre_changelink", "erspan_newlink", "erspan_changelink", "vti_newlink", "vti_changelink", "ipip_newlink", "ipip_changelink", "ip6gre_newlink", "ip6gre_changelink", "ip6erspan_newlink", "ip6erspan_changelink", "ip6_tnl_newlink", "ip6_tnl_changelink", "ipip6_newlink", "ipip6_changelink", "ipgre_tunnel_ctl", "vti_tunnel_ctl", "ipip_tunnel_ctl", "ip6gre_tunnel_siocdevprivate", "ip6_tnl_siocdevprivate", "ipip6_tunnel_siocdevprivate" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEtJVCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQVlRJJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVlRJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0a2l0X25ld19saW5rJiMzNDssCiAgICAmIzM0O25ldGtpdF9jaGFuZ2VfbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX25ld2xpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7dnRpX25ld2xpbmsmIzM0OywKICAgICYjMzQ7dnRpX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXBfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O3Z0aV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwaXBfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDssCiAgICAmIzM0O2lwNl90bmxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYXhpbXVtIGhlYWRyb29tIGxpbWl0IGZvciBuZXRraXQgYW5kIElQIHR1bm5lbHMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0dW5uZWwgZGV2aWNlcyB2aWEgbmV0bGluayAobmV3bGluay9jaGFuZ2VsaW5rKSBhbmQgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVhMjczMTQ4YmNlNDUxZmY2NzJmMWI1M2Y1MDY2MDQzNTUxNmE2YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEzOjU2OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbmluZGV4IGEzOTMxY2Q4MjEzMjEuLmQ4ZTljZTFjNjU5ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbkBAIC0yNSw2ICYjNDM7MjUsOCBAQFxuICNkZWZpbmUgTkVUS0lUX05VTV9SWF9RVUVVRVNfUkVBTCAxXG4gI2RlZmluZSBORVRLSVRfTlVNX1RYX1FVRVVFU19SRUFMIDFcbiBcbiYjNDM7I2RlZmluZSBORVRLSVRfSEVBRFJPT01fTUFYIDUxMlxuJiM0MztcbiBzdHJ1Y3QgbmV0a2l0IHtcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2JlZ2luKG5ldGtpdF9mYXN0cGF0aCk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqcGVlcjtcbkBAIC0xMjQ0LDcgJiM0MzsxMjQ2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGtpdF9wb2xpY3lbSUZMQV9ORVRLSVRfTUFYICYjNDM7IDFdID0ge1xuIFx0W0lGTEFfTkVUS0lUX01PREVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX0wzKSxcbiBcdFtJRkxBX05FVEtJVF9QT0xJQ1ldXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtJRkxBX05FVEtJVF9QRUVSX1BPTElDWV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi1cdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cdFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxuJiM0MztcdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTE2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCBORVRLSVRfSEVBRFJPT01fTUFYKSxcbiBcdFtJRkxBX05FVEtJVF9UQUlMUk9PTV1cdFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxuIFx0W0lGTEFfTkVUS0lUX1NDUlVCXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSxcbiBcdFtJRkxBX05FVEtJVF9QRUVSX1NDUlVCXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBORVRLSVRfU0NSVUJfREVGQVVMVCksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5pbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbkBAIC02MjksOCAmIzQzOzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxuIGludCBza2JfdHVubmVsX2NoZWNrX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZW5jYXBfZHN0LFxuIFx0XHRcdCAgaW50IGhlYWRyb29tLCBib29sIHJlcGx5KTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiB7XG4gXHQvKiB3ZSBtdXN0IGNhcCBoZWFkcm9vbSB0byBzb21lIHVwcGVybGltaXQsIGVsc2UgcHNrYl9leHBhbmRfaGVhZFxuIFx0ICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuXG5AQCAtNjQwLDYgJiM0Mzs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgbWF4X2FsbG93ZWQpXG4gXHRcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XG4gXG4mIzQzO1x0cmV0dXJuIGhlYWRyb29tO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4mIzQzO3tcbiYjNDM7XHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4mIzQzO1xuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBSRUFEX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtMzE3LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xuIFx0fVxuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuO1xuJiM0MztcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pO1xuIFx0bXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDApO1xuIFxuIFx0aWYgKG10dSBcdTAwM2MgSVBWNF9NSU5fTVRVKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9ncmUuYyBiL25ldC9pcHY2L2lwNl9ncmUuY1xuaW5kZXggYjg0MzExNmU5YjcwMy4uMDRhYzAwN2ViY2M4NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9ncmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5AQCAtMTEzNyw4ICYjNDM7MTEzNywxMCBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlmIChydC1cdTAwM2Vkc3QuZGV2KSB7XG4tXHRcdFx0dW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGRzdF9sZW47XG4mIzQzO1xuJiM0MztcdFx0XHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgdF9obGVuKTtcbiBcbiBcdFx0XHRpZiAodC1cdTAwM2VkZXYtXHUwMDNlaGVhZGVyX29wcylcbiBcdFx0XHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkc3RfbGVuO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwOC4uNDAzOTk1MjczY2JhZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTUyMiw4ICYjNDM7MTUyMiw5IEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0Mztcbi1cdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7IHRfaGxlbjtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHR0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHR0X2hsZW4pO1xuIFx0XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi1cdTAwM2VtdHUsIElQNl9NQVhfTVRVKTtcbiBcbiBcdFx0XHRtdHUgPSBtdHUgLSB0X2hsZW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xuaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zaXQuY1xuQEAgLTExMzEsNyAmIzQzOzExMzEsNyBAQCBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBtdHUpO1xuIFx0XHRobGVuID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4gXHR9XG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICYjNDM7IGhsZW47XG4mIzQzO1x0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUS0lUJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBWVEkmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRraXRfbmV3X2xpbmsmIzM0OywKICAgICYjMzQ7bmV0a2l0X2NoYW5nZV9saW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDt2dGlfbmV3bGluayYjMzQ7LAogICAgJiMzNDt2dGlfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7dnRpX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7aXBpcF90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXA2X3RubF9zaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1heGltdW0gaGVhZHJvb20gbGltaXQgZm9yIG5ldGtpdCBhbmQgSVAgdHVubmVscyB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHR1bm5lbCBkZXZpY2VzIHZpYSBuZXRsaW5rIChuZXdsaW5rL2NoYW5nZWxpbmspIGFuZCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb24gZW50cnkgcG9pbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWEyNzMxNDhiY2U0NTFmZjY3MmYxYjUzZjUwNjYwNDM1NTE2YTZhMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTM6NTY6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRraXQuYyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jCmluZGV4IGEzOTMxY2Q4MjEzMjEuLmQ4ZTljZTFjNjU5ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGtpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jCkBAIC0yNSw2ICYjNDM7MjUsOCBAQAogI2RlZmluZSBORVRLSVRfTlVNX1JYX1FVRVVFU19SRUFMIDEKICNkZWZpbmUgTkVUS0lUX05VTV9UWF9RVUVVRVNfUkVBTCAxCiAKJiM0MzsjZGVmaW5lIE5FVEtJVF9IRUFEUk9PTV9NQVggNTEyCiYjNDM7CiBzdHJ1Y3QgbmV0a2l0IHsKIAlfX2NhY2hlbGluZV9ncm91cF9iZWdpbihuZXRraXRfZmFzdHBhdGgpOwogCXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICpwZWVyOwpAQCAtMTI0NCw3ICYjNDM7MTI0Niw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRraXRfcG9saWN5W0lGTEFfTkVUS0lUX01BWCAmIzQzOyAxXSA9IHsKIAlbSUZMQV9ORVRLSVRfTU9ERV0JCT0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX0wzKSwKIAlbSUZMQV9ORVRLSVRfUE9MSUNZXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtJRkxBX05FVEtJVF9QRUVSX1BPTElDWV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAotCVtJRkxBX05FVEtJVF9IRUFEUk9PTV0JCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKJiM0MzsJW0lGTEFfTkVUS0lUX0hFQURST09NXQkJPSBOTEFfUE9MSUNZX01BWChOTEFfVTE2LAomIzQzOwkJCQkJCQkgTkVUS0lUX0hFQURST09NX01BWCksCiAJW0lGTEFfTkVUS0lUX1RBSUxST09NXQkJPSB7IC50eXBlID0gTkxBX1UxNiB9LAogCVtJRkxBX05FVEtJVF9TQ1JVQl0JCT0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX1NDUlVCX0RFRkFVTFQpLAogCVtJRkxBX05FVEtJVF9QRUVSX1NDUlVCXQk9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAppbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCkBAIC02MjksOCAmIzQzOzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLAogaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsCiAJCQkgIGludCBoZWFkcm9vbSwgYm9vbCByZXBseSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgdW5zaWduZWQgaW50IGhlYWRyb29tKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiB7CiAJLyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWQKIAkgKiB3aWxsIG92ZXJmbG93IGhlYWRlciBvZmZzZXRzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4KQEAgLTY0MCw2ICYjNDM7NjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGhlYWRyb29tICZndDsgbWF4X2FsbG93ZWQpCiAJCWhlYWRyb29tID0gbWF4X2FsbG93ZWQ7CiAKJiM0MzsJcmV0dXJuIGhlYWRyb29tOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiYjNDM7ewomIzQzOwloZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiYjNDM7CiAJaWYgKGhlYWRyb29tICZndDsgUkVBRF9PTkNFKGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tKSkKIAkJV1JJVEVfT05DRShkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwppbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwpAQCAtMzE3LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQltdHUgPSBtaW4odGRldi0mZ3Q7bXR1LCBJUF9NQVhfTVRVKTsKIAl9CiAKLQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuOwomIzQzOwlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7CiAJbXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIDogMCk7CiAKIAlpZiAobXR1ICZsdDsgSVBWNF9NSU5fTVRVKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IGI4NDMxMTZlOWI3MDMuLjA0YWMwMDdlYmNjODcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTExMzcsOCAmIzQzOzExMzcsMTAgQEAgc3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsCiAJCQlyZXR1cm47CiAKIAkJaWYgKHJ0LSZndDtkc3QuZGV2KSB7Ci0JCQl1bnNpZ25lZCBzaG9ydCBkc3RfbGVuID0gcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOwotCQkJCQkJIHRfaGxlbjsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgZHN0X2xlbjsKJiM0MzsKJiM0MzsJCQlkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LSZndDtkc3QuZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKJiM0MzsJCQkJCQkJICAgdF9obGVuKTsKIAogCQkJaWYgKHQtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcykKIAkJCQlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwOC4uNDAzOTk1MjczY2JhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTUyMiw4ICYjNDM7MTUyMiw5IEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpCiAJCQl0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHQtJmd0O25ldCwgcC0mZ3Q7bGluayk7CiAKIAkJaWYgKHRkZXYpIHsKLQkJCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gdGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7Ci0JCQkJdGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tICYjNDM7IHRfaGxlbjsKJiM0MzsJCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKJiM0MzsJCQkJCQkJCQl0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0MzsKJiM0MzsJCQkJCQkJCQl0X2hsZW4pOwogCQkJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LSZndDttdHUsIElQNl9NQVhfTVRVKTsKIAogCQkJbXR1ID0gbXR1IC0gdF9obGVuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBtdHUpOwogCQlobGVuID0gdGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtJmd0O25lZWRlZF9oZWFkcm9vbTsKIAl9Ci0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gJiM0MzsgaGxlbjsKJiM0MzsJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWwgKnQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIZWFkcm9vbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgaGVhZHJvb20gbGltaXRzIHdpdGhpbiBhIGZldyB0dW5uZWxpbmcgcHJvdG9jb2xzLiBJdCBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcHJldmVudGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgLiBUaGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGBORVRLSVRfSEVBRFJPT01fTUFYYCBhbmQgYXJlIGNhcHBpbmcgYElGTEFfTkVUS0lUX0hFQURST09NYCB0byBpdCwgYW5kIHRoZSBuZXcgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSgpYCBmdW5jdGlvbiBpcyBiZWluZyBhcHBsaWVkIGluIHNldmVyYWwgcGxhY2VzOiBgaXBfdHVubmVsYCwgYGlwNl9ncmVgLCBgaXA2X3R1bm5lbGAsIGFuZCBgc2l0YC4gVGhpcyBtYWtlcyBzZW5zZTsgZXhjZXNzIGhlYWRyb29tIGNhbiBiZSBhIG5hc3R5IHNvdXJjZSBvZiBwcm9ibGVtcywgYW5kIGNhcHBpbmcgaXQgaXMgYSBnb29kIHByZXZlbnRhdGl2ZSBtZWFzdXJlLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGZvY3VzIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uCgoqICAgRm9yIGBuZXRraXRgLCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBmaWxlIGlzIGBkcml2ZXJzL25ldC9uZXRraXQuY2AgYW5kIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfTkVUS0lUYC4gU2ltcGxlIGVub3VnaC4KKiAgIGBpcF90dW5uZWxgJiMzOTtzIGNvZGUgcmVzaWRlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsLmNgLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09ORklHX05FVF9JUElQYCwgYENPTkZJR19ORVRfSVBHUkVgLCBhbmQgc28gb24uIFJpZ2h0LCBzbyBpdCBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyB0dW5uZWwgdHlwZS4KKiAgIGBpcDZfZ3JlYCBpcyBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYCwgd2hpY2ggcmVxdWlyZXMgYENPTkZJR19JUFY2X0dSRWAuCiogICBgaXA2X3R1bm5lbGAsIHNpbWlsYXJseSwgaXMgZm91bmQgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGRlcGVuZHMgb24gYENPTkZJR19JUFY2X1RVTk5FTGAuCiogICBBbmQgZmluYWxseSwgYHNpdGAgaXMgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2l0LmNgLCBjb250cm9sbGVkIGJ5IGBDT05GSUdfSVBWNl9TSVRgLgoKT2theSwgSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgZXhhbWluZSB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlc2Ugb3B0aW9ucyBub3cgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgZnVsbHkuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnQgZm9yIGRpZ2dpbmcgaW50byB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEtJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz00NTM9Y29uZmlnIE5MTU9OXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NjItXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2Mzpjb25maWcgTkVUS0lUXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cdGJvb2wgXCYjMzQ7QlBGLXByb2dyYW1tYWJsZSBuZXR3b3JrIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYmVzaWRlcyB0aGUgb25lcyBJJiMzOTt2ZSBhbHJlYWR5IGV4YW1pbmVkLiBUaGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCB3b3VsZCBiZSB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIElQdjQgYW5kIElQdjYuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbC4gU28sIEkmIzM5O2xsIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgIHRvIHNlZSB3aGF0IGVsc2UgaXMgaW4gdGhlcmUuIEkgYmV0IHRoZXkmIzM5O2xsIGhhdmUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfR1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDb25zaWRlcmluZyBJUHY2IFR1bm5lbGluZyBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi5JJiMzOTttIG11bGxpbmcgb3ZlciBJUHY2IHR1bm5lbGluZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcgYXJvdW5kIGBJUFY2X1NJVGAgYW5kIGBJUFY2X1RVTk5FTGAuIE9mIGNvdXJzZSwgdGhpcyBpcyBqdXN0IGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBvYnZpb3VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNvbmNlcHQgSSBuZWVkIHRvIGFkZHJlc3MgaXMgdGhlIG1lY2hhbmlzbSBmb3IgZW5jYXBzdWxhdGluZyBJUHY2IHBhY2tldHMgd2l0aGluIElQdjQgcGFja2V0cywgb3IgcG90ZW50aWFsbHkgd2l0aGluIGFub3RoZXIgdHJhbnNwb3J0IHByb3RvY29sIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHJpZ2h0PyBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgdGhlIG51YW5jZSBiZXR3ZWVuIHRoZSB0d28uIGBJUFY2X1NJVGAgaXMgdGhlICYjMzQ7U2ltcGxlIEludGVybmV0IFRyYW5zaXRpb24mIzM0OyBwcm90b2NvbC4gSXQmIzM5O3MgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCwgb2Z0ZW4gdGhvdWdodCBvZiBhcyBhIHN0YXRpYyB0dW5uZWwuIE5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnksIGRvZXMgaXQgcmVxdWlyZSBleHBsaWNpdCBjb25maWd1cmF0aW9uIGF0IGJvdGggdHVubmVsIGVuZHBvaW50cz8gVGhhdCB3b3VsZCBpbXBseSBhIGZpeGVkIHR1bm5lbCBkZXN0aW5hdGlvbiwgeWVhaD8gQW5kIHdoYXQgYWJvdXQgdGhlIG92ZXJoZWFkPyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gbWFraW5nIGEgc2VsZWN0aW9uIGZvciBhIGN1cnJlbnQgcHJvamVjdC4gSXMgdGhlcmUgYSBiZXR0ZXIgYXBwcm9hY2g/IE1heWJlIHRoZXJlJiMzOTtzIGEgcmVhc29uIHRvIHVzZSBgSVBWNl9UVU5ORUxgIG92ZXIgaXQuIGBJUFY2X1RVTk5FTGAgcHJvYmFibHkgZW5jb21wYXNzZXMgYSBicm9hZGVyIHJhbmdlIG9mIG9wdGlvbnMsIGFsbG93aW5nIGZvciBkeW5hbWljIHR1bm5lbCBlc3RhYmxpc2htZW50IG9yIGRpZmZlcmVudCBlbmNhcHN1bGF0aW9uIG1ldGhvZHMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgZGV0YWlscywgYnV0IG15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdGhhdCBgSVBWNl9UVU5ORUxgIGlzIHByb2JhYmx5IG1vcmUgZmxleGlibGUuIE9rYXksIEkmIzM5O2xsIHJldmlldyBteSBub3RlcyBvbiB0aGlzIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMga2V5IHRvIHNlbGVjdGluZyB0aGUgbW9zdCBlZmZpY2llbnQgdHJhbnNpdGlvbiBtZXRob2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfU0lUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzoKCioqRXhhbWluaW5nIElQdjQgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgYWdhaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NCB0dW5uZWxpbmcuIEkmIzM5O20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgTkVUX0lQSVBgIGFuZCBgTkVUX0lQR1JFYC4gVGhlc2UgYXJlLCBvZiBjb3Vyc2UsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeW1ib2xzIHRoYXQgY29udHJvbCB3aGV0aGVyIHN1cHBvcnQgZm9yIElQSVAgKElQLWluLUlQKSBhbmQgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgdHVubmVscywgcmVzcGVjdGl2ZWx5LCBhcmUgY29tcGlsZWQgaW50byB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrLiBTbywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIHRvIGVuYWJsZSwgYXMgdGhlc2Ugd2lsbCBhZmZlY3Qga2VybmVsIHNpemUgYW5kIHJlc291cmNlIHVzYWdlLiBJIGtub3cgdGhlIG51YW5jZXMgb2YgdXNpbmcgdGhlc2UsIGluY2x1ZGluZyBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoIGRpZmZlcmVudCBoYXJkd2FyZS4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFzc2Vzc2luZyB0aGUgSVB2NCB0dW5uZWwgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUElQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUDogdHVubmVsaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBJUEdSRSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIGBORVRfSVBHUkVgLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIHR1bm5lbHMsIHJpZ2h0PyBUaGUgY2xhc3NpYywgUkZDIDI3ODQgYW5kIGFsbCB0aGF0LiBJdCYjMzk7cyBhbiBJUCBwcm90b2NvbCwgc28gdGhlIGltcGxpY2F0aW9uIGlzIExheWVyIDMgZW5jYXBzdWxhdGlvbiwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHdheSB0byB0cmFuc3BvcnQgcGFja2V0cyB0aGF0IG1pZ2h0IGJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXR3b3JrJiMzOTtzIG5hdGl2ZSBwcm90b2NvbHMgb3IgdG9wb2xvZ2llcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYXJvdW5kIHNjZW5hcmlvcyB3aGVyZSB5b3UgbmVlZCB0byBnZXQgYXJvdW5kIG5ldHdvcmsgcmVzdHJpY3Rpb25zLCBtYXliZSB0dW5uZWxpbmcgSVB2NiBvdmVyIGFuIElQdjQgbmV0d29yaywgb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MgdGhhdCB3b3VsZG4mIzM5O3Qgbm9ybWFsbHkgdGFsayB0byBlYWNoIG90aGVyIGRpcmVjdGx5LgoKSSYjMzk7bSBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgLSB0aGUgYWRkaXRpb25hbCBJUCBoZWFkZXIgZm9yIGVuY2Fwc3VsYXRpb24gaXRzZWxmLiBUaGF0IGFkZHMgdG8gdGhlIHBhY2tldCBzaXplLCBpbXBhY3RpbmcgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS4gVGhpcyBhbHNvIG1lYW5zIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgcGxhbmUg4oCTIHdoYXQgcm91dGluZyBwcm90b2NvbCBpcyBiZWluZyB1c2VkIG92ZXIgdGhpcyB0dW5uZWw/IFN0YXRpYyByb3V0ZXM/IER5bmFtaWMsIGxpa2UgT1NQRiBvciBCR1A/IEFuZCB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBmcm9udCBhbmQgY2VudGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW5oZXJlbnQgaW4gYW55IHR1bm5lbCAtIG5vdCBvbmx5IHNob3VsZCBpdCBiZSBlbmNyeXB0ZWQsIGJ1dCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgYWNjZXNzIGNvbnRyb2xzIGFuZCBwb3RlbnRpYWwgRG9TIGF0dGFja3MuIFRoZSBmYWN0IHRoYXQgdGhlIEdSRSB0dW5uZWwgaXRzZWxmIGRvZXNuJiMzOTt0IG9mZmVyIGVuY3J5cHRpb24gcmlnaHQgb3V0IG9mIHRoZSBib3ggbWVhbnMgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHdoZXJlIHRoYXQgZXh0cmEgbGF5ZXIgaXMgYmVpbmcgaW1wbGVtZW50ZWQuIElzIGl0IElQU2VjIG9uIHRvcCwgb3Igc29tZSBvdGhlciBzb2x1dGlvbj8KCkZ1bmN0aW9uYWxseSwgSSBzdGFydCB0byBhbmFseXplIG15IG9wdGlvbnMuIFdoYXQgYXJlIHRoZSBhZHZhbnRhZ2VzIG9mIHVzaW5nIEdSRT8gVGhlIGRpc2FkdmFudGFnZXM/IFdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgc3BlY2lmaWMgbmV0d29yayBlbnZpcm9ubWVudD8gSXMgaXQgYSBwb2ludC10by1wb2ludCBzaXR1YXRpb24sIG9yIGEgbXVsdGktcG9pbnQgdG9wb2xvZ3k/IFRoZSBjaG9pY2UgaXMgbWFkZSBiYXNlZCBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCB0aGUgbmVjZXNzaXR5IGZvciB0dW5uZWxpbmcgaW4gZ2VuZXJhbC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wYWN0IG9uIG5ldHdvcmsgZGlhZ25vc3RpY3MuIFBhY2tldCBjYXB0dXJlcyBhcmUgYWx3YXlzIGdvaW5nIHRvIGJlIHBhcnQgb2YgbXkgdG9vbHNldC4KCkkmIzM5O20gYXNzZXNzaW5nIGl0cyBzdWl0YWJpbGl0eSBmb3IgdmFyaW91cyB1c2UgY2FzZXMgYW5kIGl0cyBpbmhlcmVudCBsaW1pdGF0aW9ucy4gSSBjb25zaWRlciBpZiBvdGhlciB0dW5uZWxpbmcgbWVjaGFuaXNtcyBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgd29ya2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHN0ZXBzLCBjaGVja2luZyBmb3IgcG90ZW50aWFsIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzLCBhbmQgZm9ybWluZyBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Qgb2YgdGhpbmdzIHRvIHZlcmlmeSBpbiBhIGxpdmUgZGVwbG95bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUEdSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O0lQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGVzZSBtb2RpZmljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZGlmZiBpbmRpY2F0ZXMgdGhlc2UgZnVuY3Rpb25zIHdlcmUgdG91Y2hlZDogYG5ldGtpdC5jYCwgYGlwX3R1bm5lbC5jYCwgYGlwNl9ncmUuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYHNpdC5jYC4gUmlnaHQsIHNvIG5vdGhpbmcgZGlyZWN0bHkgY2hhbmdlZCBpbiB0aGUgYG5ldGtpdGAgZnVuY3Rpb25zLiBUaGUgYG5ldGtpdF9wb2xpY3lgIGFycmF5IGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhpcyBjaGFuZ2UgaXMgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYnV0IGluZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyB0aGUgbmV0bGluayBwYXJzZXIgd29ya3MuIE5vdGVkLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBvdGhlciBmaWxlcy4gU3BlY2lmaWNhbGx5LCBgaXBfdHVubmVsX2JpbmRfZGV2YCwgYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgLCBgaXA2X3RubF9saW5rX2NvbmZpZ2AsIGFuZCBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCAtIGFsbCBrZXkgZnVuY3Rpb25zIGZvciB0dW5uZWwgYW5kIGludGVyZmFjZSBtYW5hZ2VtZW50LiBJIHNob3VsZCBsb29rIGludG8gd2hldGhlciBvciBub3QgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWNhbGx5IC0gYGlwX3R1bm5lbF9iaW5kX2RldmAgaGFzIGJlZW4gbGlzdGVkIGFzIGEgZnVuY3Rpb24gbW9kaWZpZWQsIHNvIEkmIzM5O2xsIGNoZWNrIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmM9MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqX19pcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yNzktXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoyODA6c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI4MS17XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDItXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6XHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0NC1cdGVyciA9IGRldl9zZXRfbXR1KGRldiwgbXR1KTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz04NjI9c3RhdGljIHZvaWQgaXBfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg4OC1cdFx0dC1cdTAwM2Vmd21hcmsgPSBmd21hcms7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo4ODk6XHRcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtODkwLVx0XHRpZiAoc2V0X210dSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTI1PWludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaXBfdG5sX25ldF9pZCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTU1LVx0XHRpdG4tXHUwMDNlZmJfdHVubmVsX2Rldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE1NjpcdFx0aXRuLVx1MDAzZWZiX3R1bm5lbF9kZXYtXHUwMDNlbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGl0bi1cdTAwM2VmYl90dW5uZWxfZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTctXHRcdGlwX3R1bm5lbF9hZGQoaXRuLCBuZXRkZXZfcHJpdihpdG4tXHUwMDNlZmJfdHVubmVsX2RldikpO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTU9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjI0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIyNTpcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIyNi1cdGlmICh0YltJRkxBX01UVV0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVAgVHVubmVsIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcF90dW5uZWxfYmluZF9kZXZgLiBUaGF0IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHN0YXRpY2FsbHkgZGVmaW5lZCwgYW5kIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIGludm9rZWQgYnkgYSBoYW5kZnVsIG9mIGtleSBmdW5jdGlvbnM6IGBpcF90dW5uZWxfY3JlYXRlYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBgaXBfdHVubmVsX2luaXRfbmV0YCwgYW5kIGBpcF90dW5uZWxfbmV3bGlua2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyB0byBjb25zaWRlci4KCk5vdywgSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGlwX3R1bm5lbF9uZXdsaW5rYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSBtaWdodCBiZSBleHBvcnRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGF0LCBzbyBsZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTM9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2RlbGV0ZV9uZXQpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTYtXHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkxpbmsgQ29uZmlndXJhdGlvbiBhbmQgUm91dGluZyBmb3IgSVAgVHVubmVscyoqCgpSaWdodCwgc28gYGlwX3R1bm5lbF9uZXdsaW5rYCBpcyBkZWZpbml0ZWx5IGFuIGV4cG9ydGVkIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyB0aGUgY29yZSBwcmltaXRpdmUgZm9yIGNyZWF0aW5nIG5ldyBJUCB0dW5uZWwgaW50ZXJmYWNlcywgc28gSSBuZWVkIHRvIGtlZXAgaXQgaW4gbWluZCBhcyBJIHdvcmsuIEJ1dCBub3cgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBicm9hZGVyOiB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHNpZGU/IEkmIzM5O20gY3VyaW91cyBhYm91dCBob3cgcm91dGVzIGFyZSBoYW5kbGVkIGFzIHRoZXNlIHR1bm5lbHMgYXJlIHNldCB1cC4gTGV0IG1lIGRpZyBpbnRvIHRoZSByZWxhdGVkIGNvZGViYXNlIGFuZCBjb25zaWRlciBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAuIElzIHRoaXMgYWxzbyBleHBvcnRlZD8gSXTigJlzIHByb2JhYmx5IGEgZnVuY3Rpb24gaW52b2x2ZWQgd2l0aCBjb25maWd1cmluZyB0aGUgcm91dGluZyBmb3IgR1JFIHR1bm5lbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl04oCZcyBhIG5lY2Vzc2FyeSBmdW5jdGlvbiBhcyB3ZWxsLiBBcmUgdGhlcmUgb3RoZXIgYW5hbG9nb3VzIHJvdXRpbmcgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gYmUgY29uc2lkZXJlZD8gQW5kIHdoYXQgYXJlIHRoZSBicm9hZGVyIHJvdXRpbmcgaW1wbGljYXRpb25zIG9mIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aGVzZSB0dW5uZWxzIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgb2YgYGlwX3R1bm5lbF9uZXdsaW5rYCBhbmQgcm91dGluZyBjb25maWcsIGFzIHRoaXMgaXMgYSBjb3JlIHBpZWNlIG9mIHRoZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MTA4OD1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXHRcdFx0XHRcdCBpbnQgdF9obGVuKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTg0PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTg2LVx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4NzpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4OC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNTI9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTQtXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjU1Olx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZlcnNwYW5fY2FsY19obGVuKHQpKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlN0YXRpYyBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYGlwNmdyZV90bmxfbGlua19jb25maWdgIGFuZCBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQgc3RhdGljYWxseS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvICp3aHkqIHRoZXkmIzM5O3JlIHN0YXRpYyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuIFRoaXMgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGEgYmFkIHRoaW5nLCBidXQgaXQgZG9lcyBtZWFuIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMsIHBvdGVudGlhbGx5IHByZS1kZXRlcm1pbmVkIHNldHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIGNob2ljZXMgYmVoaW5kIHRoYXQgc3RhdGljIGltcGxlbWVudGF0aW9uIOKAkyBpcyBpdCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgcmVxdWlyZW1lbnQgb2YgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgb3IgcHJvdG9jb2wsIGEgc2ltcGxpY2l0eSB0cmFkZS1vZmYsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhY2UsIGxpa2VseSBsb29raW5nIGF0IHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGRhdGEgc3RydWN0dXJlcywgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBiZWhhdmlvciByZWxhdGVkIHRvIHRob3NlIHN0YXRpYyBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBob3cgdGhlc2Ugc3RhdGljIHZhbHVlcyBhcmUgdXNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2Z3JlX3RubF9saW5rX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9Nzk9c3RhdGljIHZvaWQgaXA2Z3JlX3R1bm5lbF9saW5rKHN0cnVjdCBpcDZncmVfbmV0ICppZ24sIHN0cnVjdCBpcDZfdG5sICp0KTtcbm5ldC9pcHY2L2lwNl9ncmUuYzo4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtODEtc3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0zMTU9c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZncmVfdHVubmVsX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTM1Mi1cbm5ldC9pcHY2L2lwNl9ncmUuYzozNTM6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnKG50LCAxKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0zNTQtXHRpcDZncmVfdHVubmVsX2xpbmsoaWduLCBudCk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTkxNz1zdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTEwODctXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTA4ODpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDg5LXtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXHRcdFx0XHRcdCBpbnQgdF9obGVuKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTY3PXN0YXRpYyBpbnQgaXA2Z3JlX2NhbGNfaGxlbihzdHJ1Y3QgaXA2X3RubCAqdHVubmVsKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTgzLVxubmV0L2lwdjYvaXA2X2dyZS5jOjExODQ6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NS17XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4NjpcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjExODc6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmdyZV9jYWxjX2hsZW4odCkpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTExODgtfVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMjEzPXN0YXRpYyBpbnQgaXA2Z3JlX3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTIxNi1cdGlwNmdyZV90bmxfY29weV90bmxfcGFybSh0LCBwKTtcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMjE3Olx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyh0LCBzZXRfbXR1KTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjE4LVx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTE5Nzk9c3RhdGljIGludCBpcDZncmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDAyLVx0aWYgKCFlcnIpIHtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDAzOlx0XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnKG50LCAhdGJbSUZMQV9NVFVdKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDA0LVx0XHRpcDZncmVfdHVubmVsX2xpbmtfbWQoaWduLCBudCk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNTI9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1My17XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NDpcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjIyNTU6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmVyc3Bhbl9jYWxjX2hsZW4odCkpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgSVA2R1JFIEludGVyZmFjZSBDcmVhdGlvbiBQcm9jZXNzKioKClJpZ2h0LCBzbywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaXA2Z3JlX25ld2xpbmtgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMsIGlzbiYjMzk7dCBpdD8gVGhlIGVudHJ5IHBvaW50LiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgZ3VuIGZvciBicmluZ2luZyB1cCBhIG5ldyBHUkUgdHVubmVsIHdpdGggSVB2NiBlbmNhcHN1bGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGtlcm5lbCYjMzk7cyBkYXRhIHN0cnVjdHVyZXMgYW5kIGZsb3cuIEkga25vdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yLCBhdCBhIGhpZ2ggbGV2ZWwsIGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgbmV0bGluayBtZXNzYWdlLCBpbml0aWFsaXppbmcgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGFzc29jaWF0ZWQgcHJvdG9jb2wgaGFuZGxlciwgYW5kIGJpbmRpbmcgaXQgYWxsIHRvZ2V0aGVyLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gcHJvcGFnYXRlcywgd2hhdCBob29rcyBhbmQgY2FsbGJhY2tzIGFyZSByZWdpc3RlcmVkLCBhbmQgd2hhdCBlcnJvciBjaGVja2luZyBpcyBkb25lIGF0IHRoaXMgaW5pdGlhbCBzdGFnZS4gVWx0aW1hdGVseSwgdGhpcyBwb2ludCBpcyBjcml0aWNhbC4gR2V0IHRoaXMgd3JvbmcsIGFuZCB0aGUgZW50aXJlIEdSRSBJUHY2IHR1bm5lbCBpbXBsZW1lbnRhdGlvbiB3aWxsIGZhbGwgYXBhcnQgYXQgdGhlIHNlYW1zLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW50ZXJuYWxzLiBJIGNhbiBndWVzcyBJIHdpbGwgYmUgbmVlZGluZyB0byBsb29rIGNsb3NlbHkgYXQgaXRzIGFyZ3VtZW50IGhhbmRsaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aGF0IGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MTkxMj1zdGF0aWMgYm9vbCBpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NDQtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTk0NTpzdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0ICpsaW5rX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTQ2LVx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk3OC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTc5OnN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTgwLVx0XHRcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAwMC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDAxOlx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDAyLVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjIyMD1zdGF0aWMgaW50IGlwNmVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDItXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI0MzpcdGVyciA9IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihuZXQsIGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI0NC1cdGlmICghZXJyKSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjk3LVx0LnZhbGlkYXRlXHQ9IGlwNmdyZV90dW5uZWxfdmFsaWRhdGUsXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5ODpcdC5uZXdsaW5rXHQ9IGlwNmdyZV9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTktXHQuY2hhbmdlbGlua1x0PSBpcDZncmVfY2hhbmdlbGluayxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjMwNj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxMi1cdC52YWxpZGF0ZVx0PSBpcDZncmVfdGFwX3ZhbGlkYXRlLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMTM6XHQubmV3bGlua1x0PSBpcDZncmVfbmV3bGluayxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzE0LVx0LmNoYW5nZWxpbmtcdD0gaXA2Z3JlX2NoYW5nZWxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjYxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQdjYgR1JFIE5ld2xpbmsgQ2FsbGJhY2sqKgoKQWxyaWdodCwgc28gYGlwNmdyZV9uZXdsaW5rYC4uLiB0aGF0JiMzOTtzIGEgKm5ld2xpbmsqIGNhbGxiYWNrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBzbyB3aGF0IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT8mIzM0OyBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgd2hlcmUgYSBuZXcgSVB2NiBHUkUgdHVubmVsIGlzIGJlaW5nIHNldCB1cCwgY3JlYXRlZCwgb3IgY29uZmlndXJlZC4gVGhlIGtleSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGRlZmluZWQsIGFuZCBob3cgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/CgpBbmQgdGhhdCBsaW5lIG9mIHRoaW5raW5nLCBxdWlja2x5IGxlYWRzIG1lIHRvIHRoZSBvYnZpb3VzIGZpbGU6IGBpcDZfdHVubmVsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgKmV4cGVjdCogdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NiB0dW5uZWxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZXdsaW5rYCBjYWxsIGlzIHVzZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciB0dW5uZWwtcmVsYXRlZCBmdW5jdGlvbnMsIGFuZCB3aGF0IHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIGxpa2VseSBtYW5pcHVsYXRpbmcuIFNvLCBsZXQgbWUgZ28gaGF2ZSBhIGxvb2sgYXQgYGlwNl90dW5uZWwuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfbGlua19jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE0MzY9aXA2X3RubF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTQ3NDpzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzUte1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNTUxPWlwNl90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjItXHRkc3RfY2FjaGVfcmVzZXQoXHUwMDI2dC1cdTAwM2Vkc3RfY2FjaGUpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NjM6XHRpcDZfdG5sX2xpbmtfY29uZmlnKHQpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjQtfVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTc0PXN0YXRpYyBpbnQgaXA2X3RubF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTgwLVx0XHRyZXR1cm4gZXJyO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5ODE6XHRpcDZfdG5sX2xpbmtfY29uZmlnKHQpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5ODItXHRpZiAodC1cdTAwM2VwYXJtcy5jb2xsZWN0X21kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhvc2Uga2VybmVsIGZ1bmN0aW9uczoKCioqS2VybmVsIEZ1bmN0aW9uIENvbnNpZGVyYXRpb25zOiBgaXA2X3RubF9kZXZfaW5pdGAgYW5kIGBpcDZfdG5sX2NoYW5nZWAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIHdvcmtpbmdzIG9mIElQdjYgdHVubmVsaW5nIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIG15IG1pbmQgaXMgZHJhd24gdG8gdHdvIGNydWNpYWwgZnVuY3Rpb25zOiBgaXA2X3RubF9kZXZfaW5pdGAgYW5kIGBpcDZfdG5sX2NoYW5nZWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGBpcDZfdG5sX2Rldl9pbml0YCBhcyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYSB0dW5uZWwgZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGlzIGVzdGFibGlzaGVkIOKAkyBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGluZyByZXNvdXJjZXMsIGFuZCBnZXR0aW5nIHRoZSB0dW5uZWwgaW50ZXJmYWNlIHJlYWR5IGZvciB0cmFmZmljLiBJJiMzOTttIGNvbnNpZGVyaW5nIHdoYXQgYXNwZWN0cyBvZiB0aGUgdHVubmVsIGFyZSBzZXQgdXAgYXQgdGhpcyBwb2ludDogdGhlIGxpbmstbGF5ZXIgcGFyYW1ldGVycywgcm91dGluZyB0YWJsZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZXMuIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGVzcGVjaWFsbHkgaWYgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgZGV2aWNlIGNyZWF0aW9uLgoKTXkgdGhvdWdodHMgdGhlbiBzaGlmdCB0byBgaXA2X3RubF9jaGFuZ2VgLiBUaGlzLCBJIGFzc3VtZSwgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgdHVubmVsIGRldmljZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBiZWNhdXNlIGFueSBjaGFuZ2UgdG8gdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGNvdWxkIHRyaWdnZXIgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgdG8gdGhlIHR1bm5lbCYjMzk7cyBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzLCBNVFUsIG9yIGVuY2Fwc3VsYXRpb24gbWV0aG9kLiBXaGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBhIHNlYW1sZXNzIHRyYW5zaXRpb24gd2l0aG91dCBkaXNydXB0aW5nIG9uZ29pbmcgdHJhZmZpYz8gQXJlIHRoZXJlIHByb3BlciBsb2NraW5nIHByaW1pdGl2ZXMgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIHN0YXRlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2VsbCBpdCBoYW5kbGVzIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLiBBbHNvLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhbmQgdGhlIGZsb3cgY29udHJvbC4gV2hhdCBraW5kIG9mIHZhbGlkYXRpb24gaGFwcGVucyB0byBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgdmFsaWQsIGFuZCBkbyB0aGV5IGFsaWduIHdpdGggZXN0YWJsaXNoZWQgbmV0d29yayBwb2xpY2llcyBvciBzZWN1cml0eSBydWxlcz8gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHN0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCBzZWN1cml0eS4gSXQmIzM5O3MgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2Ygb3VyIHdvcms7IEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2Rldl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz03ND1zdGF0aWMgdTMyIEhBU0goY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODAtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6ODE6c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgyLXN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4Nzk6XHQubmRvX2luaXRcdD0gaXA2X3RubF9kZXZfaW5pdCxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODgwLVx0Lm5kb191bmluaXRcdD0gaXA2X3RubF9kZXZfdW5pbml0LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTAzPXN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5MjYtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTkyNzogKiBpcDZfdG5sX2Rldl9pbml0X2dlbiAtIGdlbmVyYWwgaW5pdGlhbGl6ZXIgZm9yIGFsbCB0dW5uZWwgZGV2aWNlc1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5MjgtICogICBAZGV2OiB2aXJ0dWFsIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdHVubmVsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5MzE9c3RhdGljIGlubGluZSBpbnRcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTMyOmlwNl90bmxfZGV2X2luaXRfZ2VuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTkzMy17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5NjktLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk3MDogKiBpcDZfdG5sX2Rldl9pbml0IC0gaW5pdGlhbGl6ZXIgZm9yIGFsbCBub24gZmFsbGJhY2sgdHVubmVsIGRldmljZXNcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTcxLSAqICAgQGRldjogdmlydHVhbCBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHR1bm5lbFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTczLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5NzQ6c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3NS17XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3Ni1cdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTc3Olx0aW50IGVyciA9IGlwNl90bmxfZGV2X2luaXRfZ2VuKGRldik7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVHVubmVsIERldmljZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBpcDZfdG5sX2Rldl9pbml0YCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBOZXR3b3JrIERldmljZSBPcGVyYXRvciAoTkRPKSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgYG5kb19pbml0YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXTigJlzIHRoZSBzdGFuZGFyZCB3YXkgd2UmIzM5O3JlIHNldHRpbmcgdXAgdGhlIGZvdW5kYXRpb24gZm9yIElQdjYgdHVubmVsIGRldmljZXMuIEJ1dCwgdGhhdCBjb25uZWN0aW9uIG1ha2VzIG1lIHRoaW5rLi4uIHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgY29udGV4dD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoaWNoIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFmZmVjdGVkIHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIG15IGFyZWEgb2YgZXhwZXJ0aXNlLgoKTXkgY29uY2VybiBpcyB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgc2l0LmNgLiBJcyB0aGUgaW1wbGVtZW50YXRpb24gZm9sbG93aW5nIHRoZSBSRkMgc3RhbmRhcmRzPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBJUHY2LWluLUlQdjQgdHVubmVsIGNvZGUgd2l0aCB0aGUgYnJvYWRlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY2xhc2hlcyBvciByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBnaXZlbiB0aGF0IGBzaXQuY2AgaGFuZGxlcyBhIGRpZmZlcmVudCBzcGVjaWZpYyB0eXBlIG9mIHR1bm5lbCB0aGFuIHRoZSBtb3JlIGdlbmVyYWwgc2V0dXA/IEkgbmVlZCB0byBjaGVjayBob3cgdGhleSBmaXQgdG9nZXRoZXIgdG8gZW5zdXJlIG5vIHVuZXhwZWN0ZWQgcHJvYmxlbXMgYXJpc2UuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmM9MTA2ND1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2l0X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTA5NC1cbm5ldC9pcHY2L3NpdC5jOjEwOTU6c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9zaXQuYy0xMDk2LXtcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xMTM3PXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xMTU2LVx0XHR0LVx1MDAzZWZ3bWFyayA9IGZ3bWFyaztcbm5ldC9pcHY2L3NpdC5jOjExNTc6XHRcdGlwaXA2X3R1bm5lbF9iaW5kX2Rldih0LVx1MDAzZWRldik7XG5uZXQvaXB2Ni9zaXQuYy0xMTU4LVx0fVxuLS1cbm5ldC9pcHY2L3NpdC5jPTE0NDM9c3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L3NpdC5jLTE0NTAtXG5uZXQvaXB2Ni9zaXQuYzoxNDUxOlx0aXBpcDZfdHVubmVsX2JpbmRfZGV2KGRldik7XG5uZXQvaXB2Ni9zaXQuYy0xNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVAgVHVubmVsIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYGlwaXA2X3R1bm5lbF9pbml0YCBpcyBnb2luZyB0byBiZSBhbmFsb2dvdXMgdG8gYG5kb19pbml0YC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoYXQgbGluayBpbiBteSBoZWFkLiBOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBhbmQgZmluZCB0aGUgYG5ld2xpbmtgIGZ1bmN0aW9ucyBmb3IgYWxsIHRoZXNlIHR1bm5lbHMuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgbWVudGFsIG1hcCBvZiB0aGlzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgam90dGluZyB0aGVtIGRvd24gZm9yIGVhY2ggZmlsZS4KCkZvciB0aGUgSVB2NCB0dW5uZWxzIGluIGBpcF90dW5uZWwuY2AsIGl0JiMzOTtzIGRlZmluaXRlbHkgYGlwX3R1bm5lbF9uZXdsaW5rYC4gVGhlbiwgZGlnZ2luZyBpbnRvIElQdjYgdHVubmVscywgaW4gYGlwNl9ncmUuY2AsIEkmIzM5O20gc2VlaW5nIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZlcnNwYW5fbmV3bGlua2AuIE92ZXIgaW4gYGlwNl90dW5uZWwuY2AsIHRoZSBmdW5jdGlvbiBpcyBgaXA2X3RubF9uZXdsaW5rYC4gQW5kIGZvciBgc2l0LmNgPyBBaCwgeWVzLCBpdCYjMzk7cyBgaXBpcDZfbmV3bGlua2AuCgpSaWdodCwgbGV0JiMzOTtzIG5vdyBkcmlsbCBkb3duIGFuZCBleGFtaW5lIGBpcF90dW5uZWxfbmV3bGlua2Agd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHVubmVscyBhcmUgdHJ1bHkgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTM9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2RlbGV0ZV9uZXQpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTYtXHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfdHVubmVsX25ld2xpbmtgIEV4cG9ydCoqCgpBbHJpZ2h0LCBzbyBgaXBfdHVubmVsX25ld2xpbmtgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc291cmNlIGNvZGUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBhcyBpcyBhbHdheXMgdGhlIGNhc2Ugd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsLWxldmVsIGZ1bmN0aW9ucy4gVGhlIGZpcnN0LCBhbmQgbW9zdCBjcml0aWNhbCwgcXVlc3Rpb24gaXM6ICoqd2hvJiMzOTtzIGFjdHVhbGx5ICp1c2luZyogdGhpcyBmdW5jdGlvbj8qKiBLbm93aW5nIHRoZSBjYWxsZXJzIGlzIHBhcmFtb3VudCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBwb3RlbnRpYWwgaW1wYWN0LCBhbmQgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBhIGtleSBmaXJzdCBzdGVwIGluIGFzc2Vzc2luZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGF0JiMzOTtzIHJlbHlpbmcgb24gYGlwX3R1bm5lbF9uZXdsaW5rYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgdGhpcyBmdW5jdGlvbiBjcml0aWNhbCwgaXMgaXQgcmFyZWx5IHVzZWQsIG9yIGlzIGl0IGEgZm91bmRhdGlvbj8gVGhpcyByZXF1aXJlcyBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBicm9hZGVyIGNvZGUgYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTQwOT1zdGF0aWMgaW50IGlwZ3JlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI1LVx0XHRyZXR1cm4gZXJyO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQyNjpcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXHUwMDI2cCxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MjctXHRcdFx0XHQgZndtYXJrKTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDMwPXN0YXRpYyBpbnQgZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ2LVx0XHRyZXR1cm4gZXJyO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQ0NzpcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXHUwMDI2cCxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NDgtXHRcdFx0XHQgZndtYXJrKTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTQtXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTk1OmludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ2LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyNDc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cbi0tXG5uZXQvaXB2NC9pcF92dGkuYz01Nzc9c3RhdGljIGludCB2dGlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jLTU4Ni1cdHZ0aV9uZXRsaW5rX3Bhcm1zKGRhdGEsIFx1MDAyNnBhcm1zLCBcdTAwMjZmd21hcmspO1xubmV0L2lwdjQvaXBfdnRpLmM6NTg3Olx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLFxubmV0L2lwdjQvaXBfdnRpLmMtNTg4LVx0XHRcdFx0IFx1MDAyNnBhcm1zLCBmd21hcmspO1xuLS1cbm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDgyLVx0aXBpcF9uZXRsaW5rX3Bhcm1zKGRhdGEsIFx1MDAyNnAsIFx1MDAyNnQtXHUwMDNlY29sbGVjdF9tZCwgXHUwMDI2ZndtYXJrKTtcbm5ldC9pcHY0L2lwaXAuYzo0ODM6XHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcGlwLmMtNDg0LVx0XHRcdFx0IGZ3bWFyayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHdoZXJlIHRvIGdvIG5leHQsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gVHVubmVsIEludGVyZmFjZSBDcmVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgY2hlY2tsaXN0IG5vdyBzYXlzIHRvIGZvY3VzIG9uIHRoZSBpbnRlcmZhY2UgY3JlYXRpb24gZW50cnkgcG9pbnRzLiBJJiMzOTttIHRoaW5raW5nLCBgaXBncmVfbmV3bGlua2AsIGBlcnNwYW5fbmV3bGlua2AsIGB2dGlfbmV3bGlua2AsIGFuZCBgaXBpcF9uZXdsaW5rYCBhcmUgdGhlIGluaXRpYWwgc3VzcGVjdHMgZm9yIEdSRSwgRVJTUEFOLCBWVEkgYW5kIElQSVAgdHVubmVsIGludGVyZmFjZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHNvbWV0aGluZyBzaW1pbGFyOyBuYW1lbHksIHNpbmNlIElQdjYgdHVubmVsaW5nIGlzIG9mdGVuIGJ1aWx0IG9uIHNpbWlsYXIgcHJpbmNpcGxlcywgSSYjMzk7bGwgaG9uZSBpbiBvbiBgaXA2X3RubF9uZXdsaW5rYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgZmlsZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgc2ltaWxhcml0aWVzLCBhbmQgdXN1YWxseSBwcm92aWRlcyBhIGNsZWFuIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBuZXcgbGluayB0eXBlcyBhcmUgc2V0IHVwIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3RubF9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0yMDI0PXN0YXRpYyB2b2lkIGlwNl90bmxfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwNjItXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjA2MzpzdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwNjQtXHRcdFx0ICAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjctXHQudmFsaWRhdGVcdD0gaXA2X3RubF92YWxpZGF0ZSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY4Olx0Lm5ld2xpbmtcdD0gaXA2X3RubF9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjktXHQuY2hhbmdlbGlua1x0PSBpcDZfdG5sX2NoYW5nZWxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSVB2NiBUdW5uZWwgSW50ZXJmYWNlIENyZWF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcsIGFuZCBteSBtaW5kIGhhcyB6b25lZCBpbiBvbiBgaXBpcDZfbmV3bGlua2Agd2l0aGluIGBuZXQvaXB2Ni9zaXQuY2AuIFRoYXQgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIG5ldyBJUHY2LWluLUlQdjQgdHVubmVsIGludGVyZmFjZXMsIHRoZSBTSVQgKFNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uKSB0dW5uZWxzLiBJ4oCZbSB6ZXJvaW5nIGluIG9uIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGJlY2F1c2XigKYgd2VsbCwgSSYjMzk7bSBwcm9iYWJseSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHVubmVsIGludGVyZmFjZSBicmluZy11cCwgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBJUHY2IG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTWF5YmUgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBpc3N1ZSBtYW5pZmVzdGluZywgbGlrZSBhIGZhaWx1cmUgdG8gYXNzaWduIGFkZHJlc3Nlcywgcm91dGluZyBwcm9ibGVtcyBzcGVjaWZpYyB0byB0aGVzZSB0dW5uZWxzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGRpYWdub3NlIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIEtub3dpbmcgdGhlIGNvZGViYXNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OgoKKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZSBlcnJvciBwYXRocyB3ZWxsLWRlZmluZWQ/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgaW50ZXJmYWNlcywgb3IgbWlzY29uZmlndXJlZCBwYXJhbWV0ZXJzPwoqICAgKipQYXJhbWV0ZXIgVmFsaWRhdGlvbjoqKiBIb3cgcm9idXN0IGlzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSB0dW5uZWwmIzM5O3MgcGFyYW1ldGVycz8gSXMgdGhlcmUgYSByaXNrIG9mIGNyZWF0aW5nIGluY29uc2lzdGVudCB0dW5uZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbnRyb2R1Y2Ugcm91dGluZyBsb29wcyBvciBvdGhlciBvZGQgYmVoYXZpb3JzPyBJcyB0aGVyZSBhIHJpc2sgb2YgbGVha2luZyByZXNvdXJjZXM/CiogICAqKkNvbmN1cnJlbmN5OioqIEdpdmVuIHRoZSBtdWx0aS10aHJlYWRlZCBuYXR1cmUgb2YgdGhlIGtlcm5lbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGludGVyZmFjZSBjcmVhdGlvbiBvciBjb25maWd1cmF0aW9uIHN0ZXBzLiBBcmUgcHJvcGVyIGxvY2tzIGhlbGQgd2hlbiBuZWNlc3Nhcnk/CiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zOioqIEhvdyBkb2VzIGBpcGlwNl9uZXdsaW5rYCBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHRhYmxlPyBEb2VzIGl0IHJlZ2lzdGVyIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gcm91dGUgY29uZmxpY3RzIG9yIGJsYWNraG9saW5nPwoqICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaGVyZT8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciBtaXN1c2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGltcG9zZWQ/CgpUaGlzIHBvaW50cyBtZSBpbiB0aGUgZGlyZWN0aW9uIG9mIGV4YW1pbmluZyB0aGUgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUsIGluY2x1ZGluZyBob3cgdGhlIHR1bm5lbCYjMzk7cyBlbmRwb2ludHMgYXJlIHNldCB1cCwgaG93IHRoZSBNVFUgaXMgbmVnb3RpYXRlZCwgYW5kIGhvdyBJUHY2IGFkZHJlc3NpbmcgaXMgYXNzaWduZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYz0xNTE0PXN0YXRpYyBib29sIGlwaXA2X25ldGxpbmtfNnJkX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNTQ4LVxubmV0L2lwdjYvc2l0LmM6MTU0OTpzdGF0aWMgaW50IGlwaXA2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L3NpdC5jLTE1NTAtXHRcdFx0IHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4tLVxubmV0L2lwdjYvc2l0LmM9MTc3MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgc2l0X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvc2l0LmMtMTc3Ny1cdC52YWxpZGF0ZVx0PSBpcGlwNl92YWxpZGF0ZSxcbm5ldC9pcHY2L3NpdC5jOjE3Nzg6XHQubmV3bGlua1x0PSBpcGlwNl9uZXdsaW5rLFxubmV0L2lwdjYvc2l0LmMtMTc3OS1cdC5jaGFuZ2VsaW5rXHQ9IGlwaXA2X2NoYW5nZWxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqVHVubmVsIEhlYWRyb29tIEFkanVzdG1lbnRzIC0gU2NvcGUgYW5kIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgY29kZSBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBoYW5kbGUgdGhlIGNoYW5nZXMgdG8gdHVubmVsIGhlYWRyb29tLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB3aGVyZSBuZXcgdHVubmVsIGxpbmtzIGFyZSBjcmVhdGVkIOKAkyBhbmQgdGhlc2UgYXJlOiBgaXBncmVfbmV3bGlua2AsIGBlcnNwYW5fbmV3bGlua2AsIGB2dGlfbmV3bGlua2AsIGBpcGlwX25ld2xpbmtgLCBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYW5kIGBpcGlwNl9uZXdsaW5rYC4gVGhlc2Ugc2VlbSB0byBjb3ZlciB0aGUgc3RhbmRhcmQgdHVubmVsIHR5cGVzLCBhbmQgdGhleSYjMzk7bGwgbGlrZWx5IGJlIHRoZSBmb2N1cyBvZiB0aGUgaW5pdGlhbCBhZGp1c3RtZW50cy4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGhhdmUgSSBjYXB0dXJlZCBhbGwgdGhlIHJlbGV2YW50IGxpbmsgY3JlYXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgaWYgdGhlcmUgYXJlIG90aGVyIHBsYWNlcyB3aGVyZSB0dW5uZWxzIGFyZSBjb25maWd1cmVkIChyYXRoZXIgdGhhbiBjcmVhdGVkKSwgd2hpY2ggbWlnaHQgYWxzbyBiZSBhZmZlY3RlZC4KCk5vdywgcmVnYXJkaW5nIGBuZXRraXQuY2AsIEkmIzM5O20gZ3Vlc3NpbmcgdGhlcmUmIzM5O3MgYSBzaW1pbGFyIGBuZXRraXRfbmV3X2xpbmtgIGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50IHRoYXQgd291bGQgYWxzbyBuZWVkIHRvIGJlIG1vZGlmaWVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGNvbW1vbiBpbnRlcmZhY2Ugd291bGQgYmUgdXNlZCB0aGVyZSB0byBhYnN0cmFjdCB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSBjb25zaXN0ZW5jeS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lIGluIHRoYXQgbW9kdWxlIGFuZCBtYWtlIHN1cmUgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIG1vZGlmaWNhdGlvbnMuIEkgbXVzdCBlbnN1cmUgdGhpcyBhbmQgb3RoZXIgcG90ZW50aWFsIGNhbGxzIGFyZSBpZGVudGlmaWVkLCBvciB0aGUgY2hhbmdlcyB3b24mIzM5O3QgYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0a2l0X25ld19saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmM9NTExPXN0YXRpYyBpbnQgbmV0a2l0X3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy01MjQtXG5kcml2ZXJzL25ldC9uZXRraXQuYzo1MjU6c3RhdGljIGludCBuZXRraXRfbmV3X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTUyNi1cdFx0XHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTEyNTk9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG5ldGtpdF9saW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy0xMjYzLVx0LnNldHVwXHRcdD0gbmV0a2l0X3NldHVwLFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MTI2NDpcdC5uZXdsaW5rXHQ9IG5ldGtpdF9uZXdfbGluayxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTEyNjUtXHQuZGVsbGlua1x0PSBuZXRraXRfZGVsX2xpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBUdW5uZWxpbmcgQ29kZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBjaGFuZ2UgcmVmZXJlbmNlcyBgbmV0a2l0X25ld19saW5rYCwgc28gdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjb2RlIHRvdWNoZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGxvY2F0ZSB0aGF0IGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaGAuIEFoYSwgaXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lLCBnb3QgaXQuCgpOb3csIG15IGZvY3VzIG5lZWRzIHRvIGV4cGFuZCBiZXlvbmQganVzdCBgbmV0a2l0X25ld19saW5rYC4gR2l2ZW4gdGhpcyBhbmQgdGhlIGlubGluZSBuYXR1cmUgb2YgdGhhdCBmdW5jdGlvbiwgSSBuZWVkIHRvIGlkZW50aWZ5ICphbGwqIHRoZSBuZXdsaW5rLXJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSBhZmZlY3RlZC4gVGhhdCB3b3VsZCBiZSBgaXBncmVfbmV3bGlua2AsIGBlcnNwYW5fbmV3bGlua2AsIGB2dGlfbmV3bGlua2AsIGBpcGlwX25ld2xpbmtgLCBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYW5kIGBpcGlwNl9uZXdsaW5rYC4gT2YgY291cnNlLCBsZXQmIzM5O3MgaW5jbHVkZSBgbmV0a2l0X25ld19saW5rYCBpbiB0aGlzIGxpc3QuCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBgaXBfdHVubmVsX2JpbmRfZGV2YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwX3R1bm5lbF9uZXdsaW5rYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBhbmQgYGlwX3R1bm5lbF9pbml0X25ldGAuIGBpcF90dW5uZWxfdXBkYXRlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBpcF90dW5uZWxfY2hhbmdlbGlua2AuIFRoYXQgc2lnbmlmaWNhbnRseSBicm9hZGVucyB0aGUgc2NvcGUhIFNvIEkgbmVlZCB0byBjb25zaWRlciBgaXBncmVfY2hhbmdlbGlua2AsIGBlcnNwYW5fY2hhbmdlbGlua2AsIGB2dGlfY2hhbmdlbGlua2AsIGBpcGlwX2NoYW5nZWxpbmtgLCBgaXA2Z3JlX2NoYW5nZWxpbmtgLCBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXA2X3RubF9jaGFuZ2VsaW5rYCwgYGlwaXA2X2NoYW5nZWxpbmtgLCBhbmQgZmluYWxseSwgdGhlIHBvdGVudGlhbCBgbmV0a2l0X2NoYW5nZV9saW5rYCBpZiBpdCBleGlzdHMuIFRpbWUgdG8gdmVyaWZ5IGlmIHRoYXQgZXhpc3RzLCBvZiBjb3Vyc2UuIFRoaXMgYnJvYWRlciBpbnZlc3RpZ2F0aW9uIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0a2l0X2NoYW5nZV9saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmM9MTA2OD1zdGF0aWMgdm9pZCBuZXRraXRfZGVsX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy0xMDg5LVxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MTA5MDpzdGF0aWMgaW50IG5ldGtpdF9jaGFuZ2VfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTA5MS1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxuZHJpdmVycy9uZXQvbmV0a2l0LmM9MTI1OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbmV0a2l0X2xpbmtfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTEyNjUtXHQuZGVsbGlua1x0PSBuZXRraXRfZGVsX2xpbmssXG5kcml2ZXJzL25ldC9uZXRraXQuYzoxMjY2Olx0LmNoYW5nZWxpbmtcdD0gbmV0a2l0X2NoYW5nZV9saW5rLFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTI2Ny1cdC5nZXRfbGlua19uZXRcdD0gbmV0a2l0X2dldF9saW5rX25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgSW50ZXJmYWNlIENoYW5nZSoqCgpSaWdodCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHdlIHNob3VsZCB6ZXJvIGluIG9uIGhvdyB0aGUgdHVubmVsaW5nIGFzcGVjdHMgb2YgYSBsaW5rIGNoYW5nZSBhcmUgaGFuZGxlZC4gU28sIHRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIGBpcF90dW5uZWxfY2hhbmdlbGlua2AgYW5kIGl0IGxpdmVzIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIEdvdHRhIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHVuZGVyIHRoZSBob29kIHdoZW4gYSB0dW5uZWwgbGluayYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MgYXJlIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTEyNDc9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyNDk6aW50IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjUwLVx0XHRcdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwgX191MzIgZndtYXJrKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyODQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI4NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfY2hhbmdlbGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBHUkUgdHVubmVscyBhcmUgaGFuZGxlZCBpbiB0aGUgSVB2NCBzdGFjay4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGlwZ3JlX2NoYW5nZWxpbmtgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIHdoZW4gdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhIEdSRSBsaW5rIGNoYW5nZS4gSXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSByZWFjdHMgdG8gbW9kaWZpY2F0aW9ucyBvZiBhIEdSRSBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZXZlbnRzIHRyaWdnZXIgdGhpcyBmdW5jdGlvbiwgYW5kIHdoYXQgb3BlcmF0aW9ucyBpdCBpcyBwZXJmb3JtaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ1MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTE6c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDUyLVx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTY3ND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjgxLVx0Lm5ld2xpbmtcdD0gaXBncmVfbmV3bGluayxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2ODI6XHQuY2hhbmdlbGlua1x0PSBpcGdyZV9jaGFuZ2VsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY4My1cdC5kZWxsaW5rXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE2ODk9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk2LVx0Lm5ld2xpbmtcdD0gaXBncmVfbmV3bGluayxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2OTc6XHQuY2hhbmdlbGlua1x0PSBpcGdyZV9jaGFuZ2VsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5OC1cdC5kZWxsaW5rXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBlcnNwYW5fY2hhbmdlbGlua2AgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBFUlNQQU4gKEVuY2Fwc3VsYXRlZCBSZW1vdGUgU1BBTikgYXJjaGl0ZWN0dXJlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdHMgY29yZSBwdXJwb3NlIGlzIHdpdGhpbiB0aGUgZGF0YSBwbGFuZSBtYW5hZ2VtZW50LiBJcyBpdCBwcmltYXJpbHkgZm9jdXNlZCBvbiBjb25maWd1cmF0aW9uIHVwZGF0ZXMsIGhhbmRsaW5nIGxpbmsgc3RhdGUgY2hhbmdlcywgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gTXkgaW5pdGlhbCBzdXNwaWNpb24gaXMgdGhhdCBpdOKAmXMgaW52b2x2ZWQgaW4gZHluYW1pY2FsbHkgYWRqdXN0aW5nIHRoZSBFUlNQQU4gY29uZmlndXJhdGlvbiBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgdG9wb2xvZ3kgb3IgbGluayBzdGF0dXMuCgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcy4gRG9lcyBpdCBoYW5kbGUgbGluayB1cC9kb3duIGV2ZW50cz8gIEhvdyBkb2VzIGl0IGludGVyZmFjZSB3aXRoIHRoZSBjb250cm9sIHBsYW5lLCBpZiBhdCBhbGw/ICBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBzdGFuZGFsb25lIG1vZHVsZSwgb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbXBvbmVudHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0IHJlbGllcyBvbiBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG9yIHN0YXRlIHZhcmlhYmxlcyB0byBtYW5hZ2UgRVJTUEFOIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCB0aGVzZSBhcmUuIEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gc2hhcmVkIHJlc291cmNlcywgY29uc2lkZXJpbmcgdGhlIGluaGVyZW50IGR5bmFtaWMgbmF0dXJlIG9mIG5ldHdvcmsgbGlua3M/CgpXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgbG9nZ2luZyBvciBlcnJvciByZXBvcnRpbmcgd2hlbiBpdCBlbmNvdW50ZXJzIHByb2JsZW1zPyAgU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgcm9idXN0IG1lY2hhbmlzbXMgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmVzIGR1cmluZyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgb3IgbGluayBzdGF0ZSB0cmFuc2l0aW9ucz8gVGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgdW5pbnRlcnJ1cHRlZCBuZXR3b3JrIHZpc2liaWxpdHkuIEkmIzM5O20gYWxzbyBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnM7IGlzIHRoZXJlIGFueSByaXNrIG9mIHVuYXV0aG9yaXplZCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIGRvZXMgdGhlIGZ1bmN0aW9uIHByb3Blcmx5IHZhbGlkYXRlIGlucHV0IGFuZCBwZXJtaXNzaW9ucz8KCkZpbmFsbHksIGFuZCB0aGlzIGlzIGNydWNpYWwsIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QuICBEb2VzIGl0IGludHJvZHVjZSBhbnkgc2lnbmlmaWNhbnQgbGF0ZW5jeSBvciByZXNvdXJjZSBvdmVyaGVhZCwgYW5kIGlmIHNvLCBob3cgY2FuIGl0IGJlIG9wdGltaXplZD8gIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgcGFydGljdWxhcmx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGZyZXF1ZW50bHkgZHVlIHRvIGxpbmsgZmxhcHBpbmcgb3IgcmFwaWQgY2hhbmdlcyBpbiB0aGUgbmV0d29yay4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZnVsbHkgYXBwcmVjaWF0ZSBpdHMgZWZmaWNpZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz0xNDUxPXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODItXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDgzOnN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODQtXHRcdFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTcxMS1cdC5uZXdsaW5rXHQ9IGVyc3Bhbl9uZXdsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTcxMjpcdC5jaGFuZ2VsaW5rXHQ9IGVyc3Bhbl9jaGFuZ2VsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTcxMy1cdC5kZWxsaW5rXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzoKCioqVlRJIENoYW5nZWxpbmsgQ29uY2VybnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFZpcnR1YWwgVHVubmVsIEludGVyZmFjZSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQvaXB2NC9pcF92dGkuY2AgZmlsZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdGhlIGB2dGlfY2hhbmdlbGlua2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaGFzIGxpa2VseSBiZWVuIHRoZSBmb2N1cyBvZiBteSBhdHRlbnRpb24gZHVlIHRvIGNlcnRhaW4gaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIG9uIHdoYXQgaXRzIHB1cnBvc2UgaXMuIFdoYXQgZGF0YSBkb2VzIGl0IG5lZWQgdG8gYWx0ZXI/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yIHdoZW4gbGlua2luZyBhIFZUSSB0byBvdGhlciBpbnRlcmZhY2VzLiBUaGlzIG5lZWRzIGEgZGVlcGVyIGRpdmUsIEkgY2FuJiMzOTt0IGxlYXZlIHRoaXMgYWxvbmUgdW50aWwgSSYjMzk7bSBzdXJlIEkgaGF2ZSBpdCBhbGwgc29ydGVkIGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z0aV9jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdnRpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdnRpLmM9NTc3PXN0YXRpYyBpbnQgdnRpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy01OTAtXG5uZXQvaXB2NC9pcF92dGkuYzo1OTE6c3RhdGljIGludCB2dGlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxubmV0L2lwdjQvaXBfdnRpLmMtNTkyLVx0XHRcdCAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jPTY0OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdnRpX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfdnRpLmMtNjU2LVx0Lm5ld2xpbmtcdD0gdnRpX25ld2xpbmssXG5uZXQvaXB2NC9pcF92dGkuYzo2NTc6XHQuY2hhbmdlbGlua1x0PSB2dGlfY2hhbmdlbGluayxcbm5ldC9pcHY0L2lwX3Z0aS5jLTY1OC1cdC5kZWxsaW5rICAgICAgICA9IGlwX3R1bm5lbF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIG5ldHdvcmsgY29kZSwgc3BlY2lmaWNhbGx5IElQdjQgdHVubmVscy4gTXkgbWluZCBoYXMganVzdCBqdW1wZWQgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbjogYGlwaXBfY2hhbmdlbGlua2Agd2l0aGluIGBuZXQvaXB2NC9pcGlwLmNgLiBUaGlzIHN1Z2dlc3RzIEkmIzM5O20gZWl0aGVyIGRlYnVnZ2luZywgcmV2aWV3aW5nLCBvciBwZXJoYXBzIGV4dGVuZGluZyB0aGUgSVB2NC1pbi1JUHY0IChJUElQKSB0dW5uZWwgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgdHVubmVscyBhcmUgY29uZmlndXJlZCBvciBtb2RpZmllZCBhdCBhIGxpbmsgbGV2ZWwuIEkgbWlnaHQgYmUgbG9va2luZyBhdCBob3cgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBpbXBhY3QgdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLCBvciBjb252ZXJzZWx5LCBob3cgYWRqdXN0bWVudHMgdG8gdGhlIElQSVAgdHVubmVsIGl0c2VsZiBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBleGFtaW5pbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgcmVhY3RzIHRvIGxpbmsgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9uIHVwZGF0ZXMgZm9yIHRoZSB0dW5uZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayB0dW5uZWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTQ2ND1zdGF0aWMgaW50IGlwaXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwaXAuYy00ODYtXG5uZXQvaXB2NC9pcGlwLmM6NDg3OnN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcGlwLmMtNDg4LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2NC9pcGlwLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGlwX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTYwOC1cdC5uZXdsaW5rXHQ9IGlwaXBfbmV3bGluayxcbm5ldC9pcHY0L2lwaXAuYzo2MDk6XHQuY2hhbmdlbGlua1x0PSBpcGlwX2NoYW5nZWxpbmssXG5uZXQvaXB2NC9pcGlwLmMtNjEwLVx0LmRlbGxpbmtcdD0gaXBfdHVubmVsX2RlbGxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJUHY2IEdSRSBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIElQdjYgR1JFIHNldHVwLi4uIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgYWJvdXQgd2hlcmUgdGhlIGxpbmsgY2hhbmdlcyBoYXBwZW4uIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYGlwNmdyZV9jaGFuZ2VsaW5rYCBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRob3NlIGV2ZW50cywgYW5kIGl0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIHRvIHVwZGF0ZSBvciBhZGp1c3QgYW55dGhpbmcgcmVsYXRlZCB0byBJUHY2IEdSRSB0dW5uZWxzIHdoZW4gdGhlIHVuZGVybHlpbmcgbGluayBzdGF0ZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlzaXQgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MjAxMD1zdGF0aWMgc3RydWN0IGlwNl90bmwgKlxubmV0L2lwdjYvaXA2X2dyZS5jOjIwMTE6aXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAxMi1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnBfcCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA0My1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDQ0OnN0YXRpYyBpbnQgaXA2Z3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDQ1LVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDU0LVxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNTU6XHR0ID0gaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgdGIsIGRhdGEsIFx1MDAyNnAsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1Ni1cdGlmIChJU19FUlIodCkpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjY9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjc3LVx0aWduID0gbmV0X2dlbmVyaWModC1cdTAwM2VuZXQsIGlwNmdyZV9uZXRfaWQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjIyNzg6XHR0ID0gaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgdGIsIGRhdGEsIFx1MDAyNnAsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3OS1cdGlmIChJU19FUlIodCkpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjk4LVx0Lm5ld2xpbmtcdD0gaXA2Z3JlX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5OTpcdC5jaGFuZ2VsaW5rXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMDAtXHQuZGVsbGlua1x0PSBpcDZncmVfZGVsbGluayxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjMwNj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxMy1cdC5uZXdsaW5rXHQ9IGlwNmdyZV9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMTQ6XHQuY2hhbmdlbGlua1x0PSBpcDZncmVfY2hhbmdlbGluayxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzE1LVx0LmdldF9zaXplXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYGlwNmVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb246IHdoYXQgc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgSVAgdHVubmVsIGFyZSBiZWluZyBtb2RpZmllZD8gSXMgaXQgdGhlIE1UVSwgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBlbmNhcHN1bGF0aW9uIHR5cGUsIHRoZSBmbG93IGxhYmVscywgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlICYjMzQ7Y2hhbmdlJiMzNDsgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dW5uZWwgdHlwZSDigJMgbGlrZWx5IGBzdHJ1Y3QgZXJzcGFuX2RldmAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFuZCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhvc2Ugc3RydWN0dXJlcyB0byBhbnRpY2lwYXRlIHdoYXQgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC4KClRoZSAmIzM0O2NoYW5nZWxpbmsmIzM0OyBhc3BlY3QgaW1wbGllcyBhIHJlY29uZmlndXJhdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBkeW5hbWljIGNoYW5nZXMgYmFzZWQgb24gbmV0d29yayBldmVudHMsIHVzZXItaW5pdGlhdGVkIGFkanVzdG1lbnRzLCBvciBwZXJoYXBzIGEgY29uc2VxdWVuY2Ugb2Ygcm91dGluZyBwcm90b2NvbCB1cGRhdGVzPyBUaGUgY29udGV4dCBpcyBjcml0aWNhbCBoZXJlLiBJcyB0aGlzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2sgZGlyZWN0bHksIG9yIGlzIGl0IGludm9rZWQgYnkgYSB1c2VyLXNwYWNlIHV0aWxpdHkgbGlrZSBgaXBgPyBUaGUgc291cmNlIG9mIHRoZSBjYWxsIGlzIHJlbGV2YW50IGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O20gaW5zdGFudGx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlcnJvciBwYXRocy4gV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgY2hhbmdlIGlzIGludmFsaWQsIG9yIGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24/IEFyZSB0aGVyZSByZXNvdXJjZSBhbGxvY2F0aW9uIGlzc3VlcyBpbnZvbHZlZCwgbGlrZSBpbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgZmxvdyBsYWJlbHMgb3IgTVRVIGNoYW5nZXMgdGhhdCB3b3VsZCBicmVhayBleGlzdGluZyBjb25uZWN0aW9ucz8gRXJyb3IgaGFuZGxpbmcgbmVlZHMgdG8gYmUgcm9idXN0LCBhbmQgSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGNvZGUgZm9yIHByb3BlciBjaGVja3MgYW5kIGVycm9yIHJlcG9ydGluZy4gQWxzbywgd2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCBhcm91bmQgdGhpcyBmdW5jdGlvbiwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIG9uZSBrZXJuZWwgY29udGV4dD8KCkkgYWxzbyB3b25kZXIgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGJsb2NraW5nIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGludHJvZHVjZSBsYXRlbmN5LCBvciBkb2VzIGl0IGF0dGVtcHQgdG8gbWluaW1pemUgZGlzcnVwdGlvbiB3aXRoIGF0b21pYyB1cGRhdGVzIG9yIGRlZmVycmVkIGNoYW5nZXM/IElmIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmUtZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwsIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBvdmVyaGVhZCBvZiB0aGUgdHVubmVsIHNldHVwLCBpbmNsdWRpbmcgdGhlIGV4Y2hhbmdlIG9mIGNvbnRyb2wgcGFja2V0cyBhbmQgcmUtZXN0YWJsaXNobWVudCBvZiBhbnkgYXNzb2NpYXRlZCBzZWN1cml0eSBhc3NvY2lhdGlvbnMgb3IgdHVubmVscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jPTIyNTg9c3RhdGljIGludCBpcDZlcnNwYW5fdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI2NS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjY2OnN0YXRpYyBpbnQgaXA2ZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjY3LVx0XHRcdFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMzIwPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZlcnNwYW5fdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzI3LVx0Lm5ld2xpbmtcdD0gaXA2ZXJzcGFuX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMyODpcdC5jaGFuZ2VsaW5rXHQ9IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMjktXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzoKCioqV29ya2luZyB3aXRoIElQdjYgVHVubmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGRpdmluZyBpbnRvIHRoZSBgaXA2X3RubF9jaGFuZ2VsaW5rYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoYXQgZnVuY3Rpb24gaXMga2V5IGZvciBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhbiBJUHY2IHR1bm5lbCBpbnRlcmZhY2UsIGFuZCBhcyBhIHJlc3VsdCBJIHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggbGluayBjaGFuZ2VzLiBJJiMzOTttIGxpa2VseSBjb25jZXJuZWQgd2l0aCBob3cgaXQgaGFuZGxlcyBjaGFuZ2VzIGluIE1UVSwgYWRkcmVzcyBhc3NpZ25tZW50LCBvciBvdGhlciByZWxldmFudCBwYXJhbWV0ZXJzIGZvciB0dW5uZWwgaW50ZXJmYWNlcy4gSSBhbHNvIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHN1Y2ggYXMgdGhlIHJvdXRpbmcgdGFibGUgdXBkYXRlcyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5IHByb3RvY29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0yMDYzPXN0YXRpYyBpbnQgaXA2X3RubF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwNDpzdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDUtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yMjYxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjI2OC1cdC5uZXdsaW5rXHQ9IGlwNl90bmxfbmV3bGluayxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY5Olx0LmNoYW5nZWxpbmtcdD0gaXA2X3RubF9jaGFuZ2VsaW5rLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXHQuZGVsbGlua1x0PSBpcDZfdG5sX2RlbGxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOgoKKipEaWdnaW5nIGludG8gSVB2NiBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBJUHY2IHR1bm5lbGluZywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBsaW5rIGNoYW5nZXMsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBpcGlwNl9jaGFuZ2VsaW5rYCB3aXRoaW4gYG5ldC9pcHY2L3NpdC5jYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgc2F5LCBhIHR1bm5lbCBpbnRlcmZhY2Ugb3ZlciBhIHBoeXNpY2FsIGludGVyZmFjZSB0aGF0JiMzOTtzIGdvbmUgZG93biBhbmQgY29tZSBiYWNrIHVwLCBvciB3aG9zZSBjb25maWd1cmF0aW9uIGhhcyBvdGhlcndpc2UgYWx0ZXJlZCwgbGlrZSBhIE1UVSBjaGFuZ2UuIEkga25vdyBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZSBgaXBpcDZfY2hhbmdlbGlua2AgZnVuY3Rpb24gYWZmZWN0cyB0aGUgdHVubmVsJiMzOTtzIHN0YXRlLCB0aGUgcm91dGluZyBzZXR1cCwgdGhlIG5laWdoYm9yIGRpc2NvdmVyeSwgYW5kIG90aGVyIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGFyZWFzIHdoZW4gYW4gdW5kZXJseWluZyBsaW5rIGlzIHJlY29uZmlndXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBhY2Nlc3NlcyBhbmQgbW9kaWZpZXMgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBJJiMzOTttIHdvbmRlcmluZywgY291bGQgdGhlcmUgYmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgbWlzc2VkIHVwZGF0ZXM/IFRoaXMgaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYSB3aGVuIGludGVyZmFjZXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBzaXQgZHJpdmVyIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jPTE1NDk9c3RhdGljIGludCBpcGlwNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTYwMC1cbm5ldC9pcHY2L3NpdC5jOjE2MDE6c3RhdGljIGludCBpcGlwNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2Ni9zaXQuYy0xNjAyLVx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjYvc2l0LmM9MTc3MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgc2l0X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvc2l0LmMtMTc3OC1cdC5uZXdsaW5rXHQ9IGlwaXA2X25ld2xpbmssXG5uZXQvaXB2Ni9zaXQuYzoxNzc5Olx0LmNoYW5nZWxpbmtcdD0gaXBpcDZfY2hhbmdlbGluayxcbm5ldC9pcHY2L3NpdC5jLTE3ODAtXHQuZ2V0X3NpemVcdD0gaXBpcDZfZ2V0X3NpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBhbmQgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdHVubmVsIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgZ290IGEgcHJldHR5IGdvb2QgZ3Jhc3Agb24gdGhpcyBhbHJlYWR5LCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIG1ldGhvZGljYWwuIFRoZSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgKl9uZXdsaW5rYCBhbmQgYCpfY2hhbmdlbGlua2Agc3ltYm9scyBmb3IgdmFyaW91cyB0dW5uZWwgdHlwZXM6IGBuZXRraXRgLCBgaXBncmVgLCBgZXJzcGFuYCwgYHZ0aWAsIGBpcGlwYCwgYGlwNmdyZWAsIGBpcDZlcnNwYW5gLCBgaXA2X3RubGAsIGFuZCBgaXBpcDZgLiBUaGVzZSBsaWtlbHkgcmVwcmVzZW50IHRoZSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIGFuZCBtb2RpZnlpbmcgdGhlc2UgdHVubmVsIGludGVyZmFjZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgY2FsbCByZWxhdGlvbnNoaXBzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBpcF90dW5uZWxfYmluZF9kZXZgIGZ1bmN0aW9uIHRvIHNlZSBpdHMgdXNhZ2UsIHNpbmNlIGl0IGhhcyBzdWNoIGNsZWFyIGxpbmtzIHRvIGEgbnVtYmVyIG9mIGltcG9ydGFudCBmdW5jdGlvbnM6IGBpcF90dW5uZWxfY3JlYXRlYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBgaXBfdHVubmVsX2luaXRfbmV0YCwgYW5kIGBpcF90dW5uZWxfbmV3bGlua2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgdXNlIHdpdGhpbiBgaXBfdHVubmVsX2luaXRfbmV0YCBtZWFucyBpdCYjMzk7cyBhbHNvIGNhbGxlZCB3aGVuIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIHdoaWNoIGlzIGNyaXRpY2FsLgoKTW92aW5nIG9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlYCBhbmQgb3RoZXIgZnVuY3Rpb25zLiBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAgZ2V0cyBjYWxsZWQgZnJvbSBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgYW5kIGBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnYC4gYGlwNmdyZV90bmxfbGlua19jb25maWdgIGlzIGNhbGxlZCBmcm9tIGBpcDZncmVfdHVubmVsX2xvY2F0ZWAsIGBpcDZncmVfdG5sX2NoYW5nZWAgKHdoaWNoIGlzLCBpbiB0dXJuLCBsaW5rZWQgdG8gYGlwNmdyZV9jaGFuZ2VsaW5rYCksIGFuZCBkaXJlY3RseSBmcm9tIGBpcDZncmVfbmV3bGlua2AuICBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AgaXMgY2FsbGVkIGZyb20gYGlwNmVyc3Bhbl90bmxfY2hhbmdlYCBhbmQgYGlwNmVyc3Bhbl9uZXdsaW5rYC4gVGhpcyBoZWxwcyBtZSBtYXAgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBvZiB0aGUgNi1vdmVyLTYgdHVubmVscy4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGV2ZW4gZnVydGhlci4gYGlwNl90bmxfbGlua19jb25maWdgIGlzIGNvbm5lY3RlZCB0byAgYGlwNl90bmxfY2hhbmdlYCAod2hpY2ggaXMgY2FsbGVkIHZpYSB0aGUgaW9jdGwgYW5kIGNoYW5nZSBsaW5rIHBhdGgpIGFuZCBgaXA2X3RubF9kZXZfaW5pdGAuIFRoZSBkZXYgaW5pdCBwYXRoIGlzIGZyb20gdGhlIG5ldyBsaW5rIHZpYSBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCwgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgaXMgY2FsbGVkIGZyb20gYGlwaXA2X3R1bm5lbF91cGRhdGVgIGFuZCBgaXBpcDZfdHVubmVsX2luaXRgLiAgYGlwaXA2X3R1bm5lbF91cGRhdGVgIGNvbm5lY3RzIHRvIHRoZSBpb2N0bCBjYWxsLCB3aGljaCBpcyB2ZXJ5IGNvbW1vbi4KClNpbmNlIHRoZSBpb2N0bHMgYXJlIGNyaXRpY2FsIGZvciBjb250cm9sbGluZyB0aGVzZSB0dW5uZWxzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIEkvTyBjb250cm9sIGNhbGxzLiAgSSBuZWVkIHRvIGFkZCBgaXA2Z3JlX3R1bm5lbF9pb2N0bGAsIGBpcDZfdG5sX2lvY3RsYCwgYGlwaXA2X3R1bm5lbF9pb2N0bGAsIGFuZCBgaXBfdHVubmVsX2lvY3RsYCB0byB0aGUgcmV2aWV3IGxpc3QuCgpUaW1lIHRvIGhlYWQgaW50byBgbmV0L2lwdjQvaXBfdHVubmVsLmNgIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3R1bm5lbF9pb2N0bGAuIFRoaXMgc2hvdWxkIGdpdmUgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdHVubmVsIGNvbnRyb2wgaW50ZXJmYWNlcyBhY3R1YWxseSBvcGVyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIElPQ1RMKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYGlwX3R1bm5lbF9pb2N0bGAgaXNuJiMzOTt0IHNob3dpbmcgdXA/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSB1bmV4cGVjdGVkLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHVzZWQgdGhhdCBiZWZvcmUsIG9yIGF0IGxlYXN0IHNvbWV0aGluZyBzaW1pbGFyIGluIHRoYXQgc3BhY2UuIExldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nOyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgaXMgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gVGhhdCBmaWxlJiMzOTtzIHRoZSBoZWFydCBvZiBJUCB0dW5uZWwgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLCBzbyBpZiB0aGlzIElPQ1RMIGlzIGRvY3VtZW50ZWQgYW55d2hlcmUsIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqaW1wbGVtZW50ZWQqIGFueXdoZXJlLCBpdCYjMzk7bGwgYmUgdGhlcmUuIEkgbmVlZCB0byBkaXZlIGluIGFuZCBjb25maXJtIGl0cyBwcmVzZW5jZSBhbmQgYmVoYXZpb3VyLiBJIHdpbGwgbG9vayBmb3IgYW55IHNpZ24gb2YgdGhpcyBmdW5jdGlvbiwgaXRzIHVzYWdlLCBvciBhbnkgcG90ZW50aWFsIHJlcGxhY2VtZW50cywgdG8gZGV0ZXJtaW5lIGlmIEkgYW0gaGF2aW5nIGEgbW9tZW50LCBvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0uIExldCYjMzk7cyBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBUdW5uZWwgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgSVAgdHVubmVsaW5nIHNpdHVhdGlvbiBhbmQgcXVpY2tseSByZWFsaXplIHRoZSBgaXBfdHVubmVsLmNgIG1vZHVsZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdXNpbmcgYGlvY3RsYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyIHdoYXQgdGhlIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb24gbG9va3MgbGlrZS4gSXQmIzM5O3MgbGlrZWx5IHVzaW5nIGEgZGlmZmVyZW50IG1ldGhvZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGl2b3Qgb3ZlciB0byBgaXBfZ3JlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBjb250cm9sIHBhdGggb3IgdGhlIGFic3RyYWN0aW9uIHRoYXQgKmRvZXMqIGxldmVyYWdlIGEgbWV0aG9kIGZvciBzZXR0aW5nIHVwIGFuZCBtYW5hZ2luZyB0aGUgR1JFIHR1bm5lbHMgYXQgdGhlIG5ldHdvcmsgbGF5ZXIsIGxpa2VseSBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgc2ltaWxhciBtZWNoYW5pc20uIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGtleSBtYW5hZ2VtZW50LCBUVEwgb3ZlcnJpZGVzLCBhbmQgcHJvdG9jb2wgdHlwZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW5pdGlhbCBSZWFjdGlvbiB0byBgaXBpcC5jYCoqCgpPa2F5LCBgaXBpcC5jYC4uLiB3aGF0JiMzOTtzIHRoaXMgYWJvdXQ/IE15IGludGVybmFsIHJhZGFyIGlzIGltbWVkaWF0ZWx5IHBpbmdpbmcuIEkgc2VlIHRoYXQgZmlsZW5hbWUgYW5kIEkmIzM5O20gaW5zdGFudGx5IHRoaW5raW5nIHR1bm5lbHMsIGVuY2Fwc3VsYXRpb24sIHByb2JhYmx5IHNvbWV0aGluZyB0byBkbyB3aXRoIElQLWluLUlQIG9yIGEgc2ltaWxhciBwcm90b2NvbC4gVGhlICYjMzk7YyYjMzk7IGV4dGVuc2lvbiBzdHJvbmdseSBzdWdnZXN0cyBhIEMgaW1wbGVtZW50YXRpb24sIGxpa2VseSBmb3IgYSBuZXR3b3JrIHN0YWNrIG9yIGEgdXRpbGl0eS4gSXMgdGhpcyBhIGtlcm5lbCBtb2R1bGUsIGEgdXNlci1zcGFjZSBkYWVtb24sIG9yIGEgbGlicmFyeT8gVGhlIGltbWVkaWF0ZSBjb250ZXh0IGlzIG1pc3NpbmcgYnV0IHRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBzdGFydC4gTXkgbWluZCBqdW1wcyB0byBwb3NzaWJpbGl0aWVzOiBpcyB0aGlzIHBhcnQgb2YgYSBWUE4gaW1wbGVtZW50YXRpb24sIHNvbWUgZm9ybSBvZiBuZXR3b3JrIHZpcnR1YWxpemF0aW9uLCBvciBwZXJoYXBzIGEgY29tcG9uZW50IG9mIGFuIG92ZXJsYXkgbmV0d29yayBzb2x1dGlvbj8gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgSSYjMzk7bSBtb3JlIGN1cmlvdXMgYWJvdXQgaG93IHRoaW5ncyBhcmUgaGFuZGxlZDogSVAgZnJhZ21lbnRhdGlvbiwgaGVhZGVyIG1hbmlwdWxhdGlvbiwgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy4gSSYjMzk7bSBlYWdlciB0byBnZXQgdGhlIGZ1bGxlciBwaWN0dXJlIHRvIGFzc2VzcyBpdHMgcXVhbGl0eSBhbmQgYXBwbGljYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTI4Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zMjUtXG5uZXQvaXB2NC9pcGlwLmM6MzI2OnN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxubmV0L2lwdjQvaXBpcC5jLTMyNy17XG4tLVxubmV0L2lwdjQvaXBpcC5jPTM0MT1pcGlwX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsIGludCBjbWQpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTM0NC1cdFx0aWYgKHAtXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fFxubmV0L2lwdjQvaXBpcC5jOjM0NTpcdFx0ICAgICFpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wocC1cdTAwM2VpcGgucHJvdG9jb2wpIHx8XG5uZXQvaXB2NC9pcGlwLmMtMzQ2LVx0XHQgICAgcC1cdTAwM2VpcGguaWhsICE9IDUgfHwgKHAtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyh+SVBfREYpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvbnRyb2wgRmxvdzogYGlwaXBfdHVubmVsX2N0bGAgYW5kIGBuZG9fc2lvY2RldnByaXZhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlcyBhbmQgdGhlIHdheSB0aGluZ3MgdHlwaWNhbGx5IHdvcmsgaW4gbmV0d29ya2luZyBrZXJuZWwgbW9kdWxlcywgaXMgdGhhdCB0aGUgZnVuY3Rpb24gYGlwaXBfdHVubmVsX2N0bGAgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBgbmRvX3Npb2NkZXZwcml2YXRlYCBuZXRkZXYgb3BlcmF0aW9uIGhhbmRsZXIuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBlbnRyeSBwb2ludCwgcmlnaHQ/IGBuZG9fc2lvY2RldnByaXZhdGVgIGlzIHRoZSBTd2lzcyBBcm15IGtuaWZlIGZvciBkZWFsaW5nIHdpdGggZGV2aWNlLXNwZWNpZmljIGlvY3RscyBhbmQgY29udHJvbCBvcGVyYXRpb25zLiBJZiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0dW5uZWxpbmcsIHNldHRpbmcgdXAsIHRlYXJpbmcgZG93biwgYW5kIGNvbmZpZ3VyaW5nIHRoZSB0dW5uZWwgaXRzZWxmIHdvdWxkIGJlIHRoZSBraW5kIG9mICYjMzQ7cHJpdmF0ZSYjMzQ7IG9wZXJhdGlvbiB0aGF0IG5lYXRseSBmaXRzIHdpdGhpbiB0aGUgc2NvcGUgb2Ygd2hhdCBgbmRvX3Npb2NkZXZwcml2YXRlYCBoYW5kbGVzLiBTbywgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIHN0YXJ0IGxvb2tpbmcg4oCTIHRyYWNpbmcgYmFjayBjYWxscyBmcm9tIGBpcGlwX3R1bm5lbF9jdGxgIHRvIGNvbmZpcm0gdGhhdCBkaXJlY3QgbGluay4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBhdGgsIGFuZCBhbnkgZGV2aWF0aW9uIGZyb20gdGhhdCB3b3VsZCBiZSwgYXQgbGVhc3QgaW5pdGlhbGx5LCBhIHN1cnByaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX3R1bm5lbF9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTM0MD1zdGF0aWMgaW50XG5uZXQvaXB2NC9pcGlwLmM6MzQxOmlwaXBfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwgaW50IGNtZClcbm5ldC9pcHY0L2lwaXAuYy0zNDIte1xuLS1cbm5ldC9pcHY0L2lwaXAuYz0zODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTM4Ny1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBpcC5jOjM4ODpcdC5uZG9fdHVubmVsX2N0bFx0PSBpcGlwX3R1bm5lbF9jdGwsXG5uZXQvaXB2NC9pcGlwLmMtMzg5LVx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBHUkUgSVB2NiBUdW5uZWwgQ29udHJvbCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBHUkUgSVB2NiB0dW5uZWxzIGFyZSBjb250cm9sbGVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoYXQgYG5kb190dW5uZWxfY3RsYCBpcyBpbnZvbHZlZCBzb21laG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgYW5kIHRoZSB0dW5uZWwgbWFuYWdlbWVudC4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSBgaXA2Z3JlX3R1bm5lbF9pb2N0bGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpb2N0bCBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb250cm9sIHBsYW5lIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBwbGFuZSBmb3IgdGhlc2UgdHVubmVscywgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgZGlyZWN0IHdheSB0byBkbyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNmdyZV90dW5uZWxfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IEdSRSBUdW5uZWwgQ29udHJvbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZG9fdHVubmVsX2N0bGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGNvbnRyb2xsaW5nIHRoZSBHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbiAoR1JFKSB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb3BlcmF0aW5nIHdpdGggSVB2NiBlbmNhcHN1bGF0aW9uLCByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9ucyBmb3IgdGhlc2UgdHVubmVscy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBuZXRkZXZpY2Ugb3BlcmF0aW9ucy4gTXkgZ29hbCBpcyB0byBncmFzcCBob3cgdHJhZmZpYyBpcyBzaGFwZWQsIGhvdyB0dW5uZWwgZW5kcG9pbnRzIGFyZSBjb25maWd1cmVkLCBhbmQgdWx0aW1hdGVseSwgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBmbG93IGNvbnRyb2wgZm9yIElQdjYgdHJhZmZpYyB0aHJvdWdoIEdSRSB0dW5uZWxzIGluIHRoZSBMaW51eCBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgTkRPIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBhbmQgaWYgYW55IHF1aXJrcyBhcmUgdG8gYmUgY29uc2lkZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fdHVubmVsX2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mjg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYGlwNl9ncmUuY2AgZm9yIGBpb2N0bGAgSW5zcGVjdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgaW9jdGxgIHVzYWdlIHdpdGhpbiB0aGUgSVB2NiBHUkUgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgR1JFIG92ZXIgSVB2NiBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlcmVmb3JlLCB3aGVyZSBhbnkgcG90ZW50aWFsIGBpb2N0bGAgaW50ZXJhY3Rpb25zIHdvdWxkIGJlIGRlZmluZWQgb3IgdXNlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTAxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgdGFrZSBvbiB3aGF0IEkmIzM5O3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0LgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgSVB2NiBHUkUgQ29kZSoqCgpBbHJpZ2h0LCBzbyBJIHdhcyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUsIHNwZWNpZmljYWxseSBgaXA2X2dyZS5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaW9jdGwgY2FsbHMgaW4gdGhlcmUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCBvbiB0aGlzIGZyb250LiBJIHdhcyBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgY2FsbHMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuCgpOb3csIHRob3VnaCwgbXkgYXR0ZW50aW9uIGhhcyBzaGlmdGVkLiBTaW5jZSBJIGNvdWxkbiYjMzk7dCBmaW5kIGFueSBpb2N0bCYjMzk7cyBpbiB0aGF0IGZpcnN0IGZpbGUsIG15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgaXA2X3RubF9pb2N0bGAgd2hpY2ggcmVzaWRlcyBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBpb2N0bCBjYWxscyBhcmUgaW1wbGVtZW50ZWQsIG9yIGlmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE2MTE9aXA2X3RubF9wYXJtX3RvX3VzZXIoc3RydWN0IGlwNl90bmxfcGFybSAqdSwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMxLSAqIERlc2NyaXB0aW9uOlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE2MzI6ICogICBpcDZfdG5sX2lvY3RsKCkgaXMgdXNlZCBmb3IgbWFuYWdpbmcgSVB2NiB0dW5uZWxzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTYzMy0gKiAgIGZyb20gdXNlcnNwYWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0JiMzOTtzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZToKCioqSW52ZXN0aWdhdGluZyBVc2FnZSBDb250ZXh0KioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBnb3QgdGhpc+KApiB3aGF0ZXZlciBpdCBpc+KApiBpbiBmcm9udCBvZiBtZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7V2hlcmUgZG9lcyB0aGlzIGFjdHVhbGx5ICpzaG93IHVwKj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGFwcGxpY2F0aW9ucywgdGhlIGVudmlyb25tZW50cyBpdCYjMzk7cyBkZXBsb3llZCBpbiwgdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMgaXQgaW50ZXJhY3RzIHdpdGguIEFyZSB3ZSB0YWxraW5nIHRoZW9yZXRpY2FsIG1vZGVscywgcHJvZHVjdGlvbiBzeXN0ZW1zLCByZXNlYXJjaCBwcm90b3R5cGVzPyBFYWNoIGNvbnRleHQgZGljdGF0ZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGFzc3VtcHRpb25zLCBsaW1pdGF0aW9ucywgYW5kLCBmcmFua2x5LCB3aGF0JiMzOTtzICppbXBvcnRhbnQqLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBhbmQgdGhlIHVzYWdlIGlzIHdoZXJlIHRob3NlIGRldGFpbHMgYmVjb21lIHRhbmdpYmxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIGVkZ2UgY2FzZXMsIHNjYWxhYmlsaXR5IGNvbmNlcm5zLi4uIFRoaXMgJiMzNDt3aGVyZSBpdCYjMzk7cyB1c2VkJiMzNDsgcXVlc3Rpb24gaXMgdGhlIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBkaXZlIGludG8gaXRzIHV0aWxpdHkgYW5kIHNpZ25pZmljYW5jZS4gRnJvbSBoZXJlLCBJIGNhbiBzdGFydCB0byBkaXNzZWN0IGl0cyBlZmZlY3RpdmVuZXNzIGFuZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kb190dW5uZWxfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFN1c3BlY3RlZCBLZXJuZWwgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcDZfdG5sX2lvY3RsYCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBwaW5naW5nIGluIHRoZSBiYWNrIG9mIG15IGhlYWQuIEkmIzM5O20gd29uZGVyaW5nLi4uIGNvdWxkIGl0IGJlIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUsIHRoZSB3YXkgaXQmIzM5O3MgaGFuZGxpbmcgdGhpcywgaXMgYWN0dWFsbHkgcmVseWluZyBvbiB0aGUgYG5kb19zaW9jZGV2cHJpdmF0ZWAgbWVjaGFuaXNtIHVuZGVyIHRoZSBob29kPyBJdCBmZWVscyBsaWtlIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIG92ZXJsYXAgb3IsIHBlcmhhcHMgbW9yZSBhY2N1cmF0ZWx5LCBhIGhpZGRlbiBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBoZXJlIGFuZCB0cmFjZSB0aGUgY29kZSBwYXRoIHRvIGJlIHN1cmUuIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIGRvY3VtZW50YXRpb24gYXJvdW5kIHRoaXMgd2FzIGNsZWFyZXIuIFRoaXMgY291bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvb2sgZm9yIGEgcG90ZW50aWFsIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3RubF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTYxMT1pcDZfdG5sX3Bhcm1fdG9fdXNlcihzdHJ1Y3QgaXA2X3RubF9wYXJtICp1LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE2MzEtICogRGVzY3JpcHRpb246XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTYzMjogKiAgIGlwNl90bmxfaW9jdGwoKSBpcyB1c2VkIGZvciBtYW5hZ2luZyBJUHY2IHR1bm5lbHNcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMzLSAqICAgZnJvbSB1c2Vyc3BhY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTU4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IFR1bm5lbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBJUHY2IHR1bm5lbGluZyBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgc29tZXRoaW5nIG1pZ2h0IGJlIGdvaW5nIHNpZGV3YXlzIHdpdGggdGhlIGVuY2Fwc3VsYXRpb24gb3IgZGVjYXBzdWxhdGlvbiBsb2dpYy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBsaW5lIDE2MzIgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gc2hvdWxkIGJlIGRlYWxpbmcgd2l0aCBbaW5zZXJ0IG15IHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QsIGVnLiBHUkUgdHVubmVscywgc2l0IHR1bm5lbHMsIG9yIGlwaXAgdHVubmVsc10uIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgW3NwZWNpZmljIGFzcGVjdCBvZiB0dW5uZWxpbmddLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluY29ycmVjdCBoZWFkZXIgbWFuaXB1bGF0aW9ucywgb3IgcGVyaGFwcyBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBJUHY2IHN0YWNrIGFuZCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZS4gTWF5YmUgYSBtaXNzZWQgZXJyb3IgY2hlY2sgb3Igc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGhlYXZ5IGxvYWQuIEkgd2FudCB0byBzZWUgaG93IHBhY2tldHMgYXJlIGNyZWF0ZWQvbWFuaXB1bGF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgUkZDcyBhbmQgcG90ZW50aWFsbHkgc29tZSBuZXR3b3JrIGNhcHR1cmVzIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYzMDpcdCAqXG4xNjMxOlx0ICogRGVzY3JpcHRpb246XG4xNjMyOlx0ICogICBpcDZfdG5sX2lvY3RsKCkgaXMgdXNlZCBmb3IgbWFuYWdpbmcgSVB2NiB0dW5uZWxzXG4xNjMzOlx0ICogICBmcm9tIHVzZXJzcGFjZS5cbjE2MzQ6XHQgKlxuMTYzNTpcdCAqICAgVGhlIHBvc3NpYmxlIGNvbW1hbmRzIGFyZSB0aGUgZm9sbG93aW5nOlxuMTYzNjpcdCAqICAgICAlU0lPQ0dFVFRVTk5FTDogZ2V0IHR1bm5lbCBwYXJhbWV0ZXJzIGZvciBkZXZpY2VcbjE2Mzc6XHQgKiAgICAgJVNJT0NBRERUVU5ORUw6IGFkZCB0dW5uZWwgbWF0Y2hpbmcgZ2l2ZW4gdHVubmVsIHBhcmFtZXRlcnNcbjE2Mzg6XHQgKiAgICAgJVNJT0NDSEdUVU5ORUw6IGNoYW5nZSB0dW5uZWwgcGFyYW1ldGVycyB0byB0aG9zZSBnaXZlblxuMTYzOTpcdCAqICAgICAlU0lPQ0RFTFRVTk5FTDogZGVsZXRlIHR1bm5lbFxuMTY0MDpcdCAqXG4xNjQxOlx0ICogICBUaGUgZmFsbGJhY2sgZGV2aWNlIFwmIzM0O2lwNnRubDBcJiMzNDssIGNyZWF0ZWQgZHVyaW5nIG1vZHVsZVxuMTY0MjpcdCAqICAgaW5pdGlhbGl6YXRpb24sIGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBvdGhlciB0dW5uZWwgZGV2aWNlcy5cbjE2NDM6XHQgKlxuMTY0NDpcdCAqIFJldHVybjpcbjE2NDU6XHQgKiAgIDAgb24gc3VjY2VzcyxcbjE2NDY6XHQgKiAgICUtRUZBVUxUIGlmIHVuYWJsZSB0byBjb3B5IGRhdGEgdG8gb3IgZnJvbSB1c2Vyc3BhY2UsXG4xNjQ3Olx0ICogICAlLUVQRVJNIGlmIGN1cnJlbnQgcHJvY2VzcyBoYXNuJiMzOTt0ICVDQVBfTkVUX0FETUlOIHNldFxuMTY0ODpcdCAqICAgJS1FSU5WQUwgaWYgcGFzc2VkIHR1bm5lbCBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLFxuMTY0OTpcdCAqICAgJS1FRVhJU1QgaWYgY2hhbmdpbmcgYSB0dW5uZWwmIzM5O3MgcGFyYW1ldGVycyB3b3VsZCBjYXVzZSBhIGNvbmZsaWN0XG4xNjUwOlx0ICogICAlLUVOT0RFViBpZiBhdHRlbXB0aW5nIHRvIGNoYW5nZSBvciBkZWxldGUgYSBub25leGlzdGluZyBkZXZpY2VcbjE2NTE6XHQgKiovXG4xNjUyOlx0XG4xNjUzOlx0c3RhdGljIGludFxuMTY1NDpcdGlwNl90bmxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4xNjU1Olx0XHRcdCAgICAgICB2b2lkIF9fdXNlciAqZGF0YSwgaW50IGNtZClcbjE2NTY6XHR7XG4xNjU3Olx0XHRpbnQgZXJyID0gMDtcbjE2NTg6XHRcdHN0cnVjdCBpcDZfdG5sX3Bhcm0gcDtcbjE2NTk6XHRcdHN0cnVjdCBfX2lwNl90bmxfcGFybSBwMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gcmVmbGVjdGluZyBvbiB0aGUgaW5pdGlhbCBwcm9tcHQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYGlwNl90bmxfc2lvY2RldnByaXZhdGVgKioKCkFscmlnaHQsIHRoYXQgYGlwNl90bmxfc2lvY2RldnByaXZhdGVgLi4uIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZXRoaW5nIGluIG15IG1lbnRhbCBsaWJyYXJ5LiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgcHJpdmF0ZSBpb2N0bCBvcGVyYXRpb24gd2l0aGluIHRoZSBJUHY2IHR1bm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkuIEdpdmVuIHRoZSBuYW1lLCBpdCBzY3JlYW1zICYjMzQ7dHVubmVsJiMzNDsgYW5kIHRoZSAmIzM0O3Npb2MmIzM0OyBzdWdnZXN0cyBzb2NrZXQgaW50ZXJmYWNlIGNvbnRyb2wuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV0YWlscy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGhhbmRsaW5nIHNvbWUgdmVuZG9yLXNwZWNpZmljIG9yIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGVzZSB0dW5uZWxzLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gbXkgdGhvdWdodHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSB0aGUgYHNpdC5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgU0lUIChTaW1wbGUgSW50ZXJuZXQgVHJhbnNpdGlvbikgZHJpdmVyIGxpdmVzLCBhbmQgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHBsYWNlIGZvciB0aGluZ3MgbGlrZSBpb2N0bCBjYWxscyByZWxhdGVkIHRvIElQdjYgdHVubmVscy4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgcGxhY2UgdG8gcHV0IHRoZSBpb2N0bCBkZWZpbml0aW9ucyBhbmQgaGFuZGxlcnMgZm9yIGFueXRoaW5nIHRvIGRvIHdpdGggSVB2NiB0dW5uZWxsaW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSB1c2Ugb2YgdGhlIHJlbGF0ZWQgaWRlbnRpZmllciB3aXRoaW4gdGhhdCBzb3VyY2UgZmlsZS4gSXQgd291bGQgYmUgbXkgcHJpbWUgcGxhY2UgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Npb2NkZXZwcml2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmM9MTM2OD1zdGF0aWMgaW50XG5uZXQvaXB2Ni9zaXQuYzoxMzY5OmlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcbm5ldC9pcHY2L3NpdC5jLTEzNzAtXHRcdFx0ICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY2L3NpdC5jLTEzNzYtXHRjYXNlIFNJT0NERUxUVU5ORUw6XG5uZXQvaXB2Ni9zaXQuYzoxMzc3Olx0XHRyZXR1cm4gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKGRldiwgaWZyLCBkYXRhLCBjbWQpO1xubmV0L2lwdjYvc2l0LmMtMTM3OC1cdGNhc2UgU0lPQ0dFVFBSTDpcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xMzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcDZfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNDAwLVx0Lm5kb19zdGFydF94bWl0XHQ9IHNpdF90dW5uZWxfeG1pdCxcbm5ldC9pcHY2L3NpdC5jOjE0MDE6XHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjYvc2l0LmMtMTQwMi1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDAwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElQdjYgVHVubmVsIERyaXZlciBJc3N1ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O3ZlIGdvdCBgaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlYCBhbmQgYGlwNl90bmxfc2lvY2RldnByaXZhdGVgIGZsYWdnZWQgaW4gbXkgbWluZC4gU291bmRzIGxpa2UgcG90ZW50aWFsIGludGVyYWN0aW9uIHByb2JsZW1zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBwcml2YXRlIGRldmljZSBjb250cm9sIGlvY3RscyB3aXRoaW4gSVB2NiB0dW5uZWwgZHJpdmVycy4gSXQmIzM5O3MgYSBiaXQgb2YgYSBodW5jaCwgYnV0IHRoZXNlIHNwZWNpZmljIHN5bWJvbHMganVtcCBvdXQgYXMgYSBzdGFydGluZyBwb2ludC4KCkdpdmVuIHRoZSBjb250ZXh0LCBteSBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYGlwX3R1bm5lbC5jYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgdHVubmVsIGRyaXZlciBmdW5jdGlvbmFsaXR5IGlzIGhvdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgc2lvY2RldnByaXZhdGVgIGhhbmRsaW5nIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBhbnkgdW51c3VhbCBhY2Nlc3MgcGF0dGVybnMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYWxsb3cgZm9yIGltcHJvcGVyIGludGVyYWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IHR1bm5lbCBpbnN0YW5jZXMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgZHVyaW5nIGlvY3RsIGNhbGxzLiBUaGF0IGZpbGUgaXMgcHJvYmFibHkgbXkgYmVzdCBsZWFkIHRvIGludmVzdGlnYXRlIHRoZXNlIGZsYWdnZWQgc3ltYm9scy4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZXNlIHByaXZhdGUgaW9jdGwmIzM5O3MgaGFuZGxpbmcgd2l0aGluIGFuIElQdjYgdHVubmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDA9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQxLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA0MjppbnQgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0My1cdFx0XHQgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNTQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2lvY2RldnByaXZhdGUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYCBFeHBvcnQqKgoKQWxyaWdodCwgc28gYGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgaXMgZXhwb3J0ZWQsIGh1aD8gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBmbGFnIGluIG15IG1pbmQuIEV4cG9ydGVkIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB3aXRoICYjMzQ7cHJpdmF0ZSYjMzQ7IGluIHRoZSBuYW1lLCBhbHdheXMgd2FycmFudCBhIGNsb3NlciBsb29rLiBUaGV5JiMzOTtyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMsIG9yIG1heWJlIGp1c3QgYXJlYXMgd2hlcmUgZnV0dXJlIGNoYW5nZXMgY291bGQgcmlwcGxlIG91dCB1bmV4cGVjdGVkbHkuCgpNeSBuZXh0IHN0ZXAsIG9idmlvdXNseSwgaXMgdG8gcGluIGRvd24gd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIHB1cnBvc2UsIGl0cyBpbXBhY3QsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGFkaGVyaW5nIHRvIGVzdGFibGlzaGVkIGludGVyZmFjZXMuIEkmIzM5O2xsIGJlIHNpZnRpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzLCBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhbmQgd2h5IGl0JiMzOTtzIGJlZW4gZXhwb3NlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRha2UgZnVydGhlciBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTk4Ny1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlwZ3JlX3htaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODg6XHQubmRvX3Npb2NkZXZwcml2YXRlXHQ9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4OS1cdC5uZG9fY2hhbmdlX210dVx0XHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDA9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQxLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA0MjppbnQgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0My1cdFx0XHQgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNTQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2lvY2RldnByaXZhdGUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cbi0tXG5uZXQvaXB2NC9pcF92dGkuYz00MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2dGlfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy00MjAtXHQubmRvX3N0YXJ0X3htaXRcdD0gdnRpX3R1bm5lbF94bWl0LFxubmV0L2lwdjQvaXBfdnRpLmM6NDIxOlx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY0L2lwX3Z0aS5jLTQyMi1cdC5uZG9fY2hhbmdlX210dVx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcF9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0zODMtXHQubmRvX3N0YXJ0X3htaXRcdD0gaXBpcF90dW5uZWxfeG1pdCxcbm5ldC9pcHY0L2lwaXAuYzozODQ6XHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjQvaXBpcC5jLTM4NS1cdC5uZG9fY2hhbmdlX210dSA9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSVAgVHVubmVsIERldmljZSBDb250cm9sIC0gQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYC4uLiByaWdodCwgdGhhdCYjMzk7cyB0aGUgY29udHJvbCBpbnRlcmZhY2UsIHRoZSBzeXN0ZW0gY2FsbCwgZm9yIHNldHRpbmcgdXAgYW5kIG1hbmFnaW5nIHRoZXNlIElQIHR1bm5lbHMuIFNvLCBpdCYjMzk7cyB1c2VkIGJ5IHRoZSBtYWpvciBwbGF5ZXJzOiBgaXBncmVgIChHUkUgdHVubmVscyksIGB2dGlgIChWaXJ0dWFsIFR1bm5lbCBJbnRlcmZhY2UgLSBhIGtleSBjb21wb25lbnQgZm9yIFZQTnMsIGVzcGVjaWFsbHkgaW4gb2xkZXIgc2V0dXBzLCBJIHRoaW5rKSwgYW5kIG9mIGNvdXJzZSwgYGlwaXBgICh0aGUgYmFzaWMgSVAtaW4tSVAgZW5jYXBzdWxhdGlvbikuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhleSBhbGwgbmVlZCBhIHdheSB0byBwYXNzIHByaXZhdGUsIGRldmljZS1zcGVjaWZpYyBkYXRhIHRvIHRoZSBrZXJuZWwgZm9yIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoYXQgbWVjaGFuaXNtLgoKQnV0LCBhIHRob3VnaHQgZW1lcmdlczsgd2hhdCBhYm91dCBgaXA2Z3JlYD8gSSBjYW4mIzM5O3QgcXVpdGUgcmVjYWxsIGlmIGl0IHVzZXMgdGhlIHNhbWUgaW50ZXJmYWNlOyBJIGFzc3VtZSBzbywgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgY2FzZS4gVGhlIHVuZGVybHlpbmcgdHVubmVsIGltcGxlbWVudGF0aW9ucywgd2hpbGUgZGlmZmVyZW50IGJlY2F1c2Ugb2YgSVB2NiBoZWFkZXJzLCBwcm9iYWJseSBzdGlsbCBsZXZlcmFnZSBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYCBmb3IgdGhlIGNvcmUgc2V0dXAgYW5kIGNvbnRyb2wgb3BlcmF0aW9ucy4gSSYjMzk7ZCBoYXRlIHRvIGJlIHdyb25nIGhlcmUgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgSSBkaWQgYSBzaW1pbGFyIGluc3BlY3Rpb24gb24gdGhhdCBhIGZldyB5ZWFycyBhZ28uIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2lvY2RldnByaXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jPTEyMzg9c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9wYXJtX3RvX3VzZXIoc3RydWN0IGlwNl90bmxfcGFybTIgKnUsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTUtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI1NjpzdGF0aWMgaW50IGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjU3LVx0XHRcdFx0XHRzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTE0MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZncmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTQxNy1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlwNmdyZV90dW5uZWxfeG1pdCxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxNDE4Olx0Lm5kb19zaW9jZGV2cHJpdmF0ZVx0PSBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTktXHQubmRvX2NoYW5nZV9tdHVcdFx0PSBpcDZfdG5sX2NoYW5nZV9tdHUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDYyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgR1JFIFR1bm5lbCBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlYCwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSByZWxhdGVkIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpc3N1ZS4gSSBzaG91bGQgbWFwIG91dCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBhbmQgaW50ZXJhY3Qgd2l0aCB0dW5uZWxzIHRvIGdldCB0aGUgZnVsbCB2aWV3LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICBgaXBncmVfbmV3bGlua2AsIGBpcGdyZV9jaGFuZ2VsaW5rYAoqICAgYGVyc3Bhbl9uZXdsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYAoqICAgYHZ0aV9uZXdsaW5rYCwgYHZ0aV9jaGFuZ2VsaW5rYAoqICAgYGlwaXBfbmV3bGlua2AsIGBpcGlwX2NoYW5nZWxpbmtgCiogICBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2Z3JlX2NoYW5nZWxpbmtgCiogICBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgCiogICBgaXA2X3RubF9uZXdsaW5rYCwgYGlwNl90bmxfY2hhbmdlbGlua2AKKiAgIGBpcGlwNl9uZXdsaW5rYCwgYGlwaXA2X2NoYW5nZWxpbmtgCiogICBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AKKiAgIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgCiogICBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAKKiAgIGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYAoqICAgYGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAKKiAgIGBpcGlwX3R1bm5lbF9jdGxgCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBpcGlwX3R1bm5lbF9jdGxgLi4uIGlzbiYjMzk7dCB0aGF0IGp1c3QgYSB3cmFwcGVyIGZvciBgbmRvX3R1bm5lbF9jdGxgIGZvciB0aGUgYGlwaXBgIHR1bm5lbCB0eXBlPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGVyZSYjMzk7cyBhIGNvbW1vbiBjb250cm9sIHBhdGgsIGBuZG9fdHVubmVsX2N0bGAsIGFuZCB0aGUgdHVubmVsLXNwZWNpZmljIHJvdXRpbmVzIHdvdWxkIGhvb2sgaW50byBpdC4KCk5vdywgdGhlIG5hdHVyYWwgcXVlc3Rpb24gaXM6IEFyZSB0aGVyZSBvdGhlciB0dW5uZWwgdHlwZXMgdXNpbmcgdGhlIGBuZG9fdHVubmVsX2N0bGAgbWVjaGFuaXNtPyBLbm93aW5nIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fdHVubmVsX2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTk5MS1cdC5uZG9fZ2V0X2lmbGlua1x0XHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmM6OTkyOlx0Lm5kb190dW5uZWxfY3RsXHRcdD0gaXBncmVfdHVubmVsX2N0bCxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5My19O1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDI9aW50IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQ5LVx0XHRyZXR1cm4gLUVGQVVMVDtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNTA6XHRlcnIgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fdHVubmVsX2N0bChkZXYsIFx1MDAyNnAsIGNtZCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDUxLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2ICFpcF90dW5uZWxfcGFybV90b191c2VyKGRhdGEsIFx1MDAyNnApKVxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jPTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZ0aV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jLTQyNC1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBfdnRpLmM6NDI1Olx0Lm5kb190dW5uZWxfY3RsXHQ9IHZ0aV90dW5uZWxfY3RsLFxubmV0L2lwdjQvaXBfdnRpLmMtNDI2LX07XG4tLVxubmV0L2lwdjQvaXBpcC5jPTM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMzg3LVx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXG5uZXQvaXB2NC9pcGlwLmM6Mzg4Olx0Lm5kb190dW5uZWxfY3RsXHQ9IGlwaXBfdHVubmVsX2N0bCxcbm5ldC9pcHY0L2lwaXAuYy0zODktXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcF9maWxsX2ZvcndhcmRfcGF0aCxcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NDc4PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNDk0LVxubmV0L2lwdjQvaXBtci5jOjQ5NTpcdGlmICghdHVubmVsX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb190dW5uZWxfY3RsKVxubmV0L2lwdjQvaXBtci5jLTQ5Ni1cdFx0Z290byBvdXQ7XG5uZXQvaXB2NC9pcG1yLmM6NDk3Olx0ZXJyID0gdHVubmVsX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb190dW5uZWxfY3RsKHR1bm5lbF9kZXYsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcG1yLmMtNDk4LVx0XHRcdFNJT0NBRERUVU5ORUwpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYy01MTQtXHRcdGRldl9jbG9zZShuZXdfZGV2KTtcbm5ldC9pcHY0L2lwbXIuYzo1MTU6XHRcdHR1bm5lbF9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fdHVubmVsX2N0bCh0dW5uZWxfZGV2LCBcdTAwMjZwLFxubmV0L2lwdjQvaXBtci5jLTUxNi1cdFx0XHRcdFNJT0NERUxUVU5ORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgVHVubmVsIENvbnRyb2wgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGlzIGRvd24sIGFuZCBpdCBsb29rcyBsaWtlIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIHVsdGltYXRlbHkgZnVubmVscyBpdHMgd2F5IHRvIGBuZG9fdHVubmVsX2N0bGAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHRoZSBjb21tb24gaW50ZXJmYWNlLiBOb3csIHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcsIHRoZSBhY3R1YWwgZGV2aWNlLXNwZWNpZmljIGhhbmRsaW5nLCB0aGF0JiMzOTtzIGJlaW5nIGRvbmUgYnkgYGlwZ3JlX3R1bm5lbF9jdGxgLCBgdnRpX3R1bm5lbF9jdGxgLCBhbmQgYGlwaXBfdHVubmVsX2N0bGAuIEl0IG1ha2VzIG1vcmUgc2Vuc2UsIGZyb20gYSBjbGFyaXR5IGFuZCBmb2N1cyBwZXJzcGVjdGl2ZSwgdG8gcHV0IHRob3NlIGRldmljZS1zcGVjaWZpYyBoYW5kbGVycyBhcyB0aGUgZm9jYWwgcG9pbnRzLiBMZXQmIzM5O3MgbWFrZSB0aGF0IGFkanVzdG1lbnQgYW5kIHVwZGF0ZSB0aGUgc3ltYm9sIGxpc3QgYWNjb3JkaW5nbHkuIEFuZCBhcyBhIHF1aWNrIHNhbml0eSBjaGVjaywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBJUHY2IHNpZGUgb2YgdGhpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AgaXMgYmVoYXZpbmcgc2ltaWxhcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz0xMjM4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjU1LVxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNTY6c3RhdGljIGludCBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTI1Ny1cdFx0XHRcdFx0c3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xNDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2Z3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTctXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpcDZncmVfdHVubmVsX3htaXQsXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTQxODpcdC5uZG9fc2lvY2RldnByaXZhdGVcdD0gaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xNDE5LVx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gaXA2X3RubF9jaGFuZ2VfbXR1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI1NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbmsgSGFuZGxlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaXJlY3QgaGFuZGxlciBvZiBzb21lIHNvcnQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gbmV0d29yayBsaW5rcy4gVGhlIGtleSBoZXJlLCB0aGUgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgYXMgdGhleSYjMzk7cmUgY2FsbGVkLCBhcmUgYWxsIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIGBuZXdsaW5rYCBhbmQgYGNoYW5nZWxpbmtgIGF0IHRoZSBlbmQsIGFsb25nIHdpdGggYSBmZXcgY29udHJvbCBhbmQgcHJpdmF0ZSBpbnRlcmZhY2UgY2FsbHMuICBXZSYjMzk7dmUgZ290IGEgbG90IG9mIHRoZW0sIGNvdmVyaW5nIGEgdmFyaWV0eSBvZiB0dW5uZWxpbmcgcHJvdG9jb2xzOiBuZXRraXQsIGdyZSwgZXJzcGFuLCB2dGksIGlwaXAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy4gVGhhdCYjMzk7cyBhIHByZXR0eSBjb21wcmVoZW5zaXZlIHNldC4KCk5leHQsIHdlIHNob3VsZCBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zIHdpbGwgY29tcGlsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFdlIGhhdmUgYSBzZXQgb2YgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRvIGxvb2sgYXQgLSBgTkVUS0lUYCwgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9WVElgIGFuZCBgTkVUX0lQVlRJYC4gU2luY2UgYE5FVF9JUFZUSWAgaXMgcHJlc2VudCwgaXQgbG9va3MgbGlrZSB0aGF0IGlzIHRoZSBjb3JyZWN0IG9uZSB0byBmaW5kIHRoZSB2dGkgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKR2l2ZW4gdGhhdCBgTkVUX0lQVlRJYCBjb25maWcgaXMgdXNlZCBmb3IgdnRpLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBzZXR0aW5ncyBvZiB0aGUgdHVubmVsLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSAtIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGUgdG8gdGhlIGNvZGUgYW5kIHdoYXQgdGhleSBhY3R1YWxseSBlbmFibGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgdGhpbmcgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUFZUSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yNjg9Y29uZmlnIFNZTl9DT09LSUVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDMtXG5uZXQvaXB2NC9LY29uZmlnOjMwNDpjb25maWcgTkVUX0lQVlRJXG5uZXQvaXB2NC9LY29uZmlnLTMwNS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVA6IHR1bm5lbGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAxNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBUdW5uZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHllcywgZGVmaW5pdGVseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTkVUX0lQVlRJYCBoZXJlLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxheS4KClJpZ2h0LCBzbyBgaXBfdHVubmVsLmNgIGdldHMgYnVpbHQgd2hlbiBgTkVUX0lQX1RVTk5FTGAgaXMgZW5hYmxlZC4gQW5kIGBORVRfSVBfVFVOTkVMYCBpcywgaW4gdHVybiwgc2VsZWN0ZWQgYnkgYSBudW1iZXIgb2Ygb3RoZXIgY29uZmlncyBsaWtlIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBhbmQgb2YgY291cnNlLCBgTkVUX0lQVlRJYCDigJMgdGhlIG9uZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gVGhlbiB3ZSBoYXZlIGBpcDZfdHVubmVsLmNgIGJ1aWx0IGJ5IGBJUFY2X1RVTk5FTGAuIGBpcDZfZ3JlLmNgIHdoZW4gYElQVjZfR1JFYCBpcyBlbmFibGVkLiBBbmQgYHNpdC5jYCB3aXRoIGBJUFY2X1NJVGAgZW5hYmxlZC4gRmluYWxseSwgYG5ldGtpdC5jYCBpcyBjb21waWxlZCB3aGVuIGBORVRLSVRgIGlzIGVuYWJsZWQuCgpTbywgc3VtbWluZyBpdCB1cCwgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSB0byBtaW5kIGFyZTogYE5FVEtJVGAsIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQVlRJYCwgYElQVjZfR1JFYCwgYElQVjZfVFVOTkVMYCwgYElQVjZfU0lUYCwgYW5kLCB3aGlsZSBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBpbiB0aGUgb3JpZ2luYWwgdGV4dCwgSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNpbmNlIFZUSSBpcyBtZW50aW9uZWQsIGBJUFY2X1ZUSWAuCgpIb2xkIG9uLCBJIHN1c3BlY3QgYGlwNl90dW5uZWwuY2AgbWlnaHQgYmUgY29tcGlsZWQgZm9yIG90aGVyIHJlYXNvbnMgYXMgd2VsbCwgYnV0IGBJUFY2X1RVTk5FTGAgaXMgaXRzIG1haW4gdHJpZ2dlci4gSXQmIzM5O3MgYmVzdCB0byBjb25maXJtIHRoaXMgYW5kIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdHVubmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9NDE9b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJUHY0IE1ha2VmaWxlKioKClllcy4gKlRoYXQmIzM5O3MgdGhlIGRpcmVjdGlvbiBJIG5lZWQgdG8gZ28gaW4gdG8gZmlndXJlIG91dCB0aGlzIGlzc3VlLiogTGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBndXQgdGVsbHMgbWUgdGhlIGtleSBpcyBsaWtlbHkgaW4gYG5ldC9pcHY0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3J1Y2lhbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NCBzdGFjayBhcmUgZGVmaW5lZC4gKlRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZSouIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgcmVsYXRlZCBtb2R1bGVzIHRvIHNlZSB3aGVyZSB0aGluZ3MgbWlnaHQgYmUgZmFsbGluZyBhcGFydCwgcGVyaGFwcyBpbiB0ZXJtcyBvZiBsaW5raW5nLCBjb25maWd1cmF0aW9uLCBvciBkZXBlbmRlbmN5IHJlc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTE1LVx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTY6XHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNy1cdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICYjNDM7PSBpcF90dW5uZWwub1xubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfaXB2NC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjEzMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOZXR3b3JrIFR1bm5lbCBDb25maWd1cmF0aW9ucyoqCgpSaWdodCwgZ290IGl0LiBUaGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhcmU6IGBORVRLSVRgLCBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgYE5FVF9JUFZUSWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9WVElgLiBTZWVtcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIHNldCBvZiB0dW5uZWwgdHlwZXMsIGNvdmVyaW5nIElQdjQgYW5kIElQdjYgdmFyaWF0aW9ucy4KCk5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgd2UgYXJlbiYjMzk7dCB1c2luZyB0aGUgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdmFyaWFibGUgaW4gYW4gdW5leHBlY3RlZCBwbGFjZS4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB1bmludGVuZGVkIGludGVyYWN0aW9ucyBpbiB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfbGltaXRfaGVhZHJvb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTYyOT1pbnQgc2tiX3R1bm5lbF9jaGVja19wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmVuY2FwX2RzdCxcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNjMxLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjYzMjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTYzMy17XG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTY0NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDcte1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjY0ODpcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDktXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE5LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzIwOlx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMjEtXHRtdHUgLT0gdF9obGVuICYjNDM7IChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTExMjI9c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTExNDEtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE0MjpcdFx0XHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE0My1cdFx0XHRcdFx0XHRcdCAgIHRfaGxlbik7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE0NzQ9c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTUyNC1cdFx0aWYgKHRkZXYpIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTI1Olx0XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0Mztcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTI2LVx0XHRcdFx0XHRcdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7XG4tLVxubmV0L2lwdjYvc2l0LmM9MTA5NT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xMTMzLVx0fVxubmV0L2lwdjYvc2l0LmM6MTEzNDpcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pO1xubmV0L2lwdjYvc2l0LmMtMTEzNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzE2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFR1bm5lbCBIZWFkcm9vbSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgaGVhZHJvb20gbGltaXRhdGlvbnMgZm9yIGEgZmV3IHR1bm5lbCB0eXBlczogbmV0a2l0LCBpcCB0dW5uZWxzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gYWRkcmVzcy4gVGhlIGNoYW5nZSBzZWVtcyBzb3VuZCwgc28gSSYjMzk7bGwgYmUgbWFya2luZyB0aGlzIGFzIFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgdG91Y2hlZDogYE5FVEtJVGAsIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQVlRJYCwgYElQVjZfR1JFYCwgYElQVjZfVFVOTkVMYCwgYElQVjZfU0lUYCwgYW5kIGBJUFY2X1ZUSWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBhcmVhcyB0byBmb2N1cyBvbi4KCk15IGF0dGVudGlvbiBpcyBiZWluZyBkcmF3biB0byBhIHByZXR0eSBsb25nIGxpc3Qgb2Ygc3ltYm9scyByZWxhdGVkIHRvIHRoZSBuZXcgYW5kIGNoYW5nZSBsaW5rcywgYW5kIHR1bm5lbCBjb250cm9sOiBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AsIGFuZCBvbiB0aHJvdWdoIHNldmVyYWwgbW9yZSBmb3IgR1JFLCBFUlNQQU4sIFZUSSwgSVBJUCwgYW5kIHRoZWlyIElQdjYgY291bnRlcnBhcnRzLCBhbG9uZyB3aXRoIHRoZSB2YXJpb3VzIHR1bm5lbCBjb250cm9sIG9wZXJhdGlvbnMuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgc2VlIHRoYXQgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gIGlzIGFsc28gbW9kaWZpZWQgdG8gdXNlIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBkaWcgaW50byB0aG9zZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX2Fkal9oZWFkcm9vbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NjMyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTY0NC1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo2NDU6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDYtXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3MT12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjUzLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjU0Olx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIGhlYWRyb29tKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTY1NS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz02Njk9dm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg0NS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg0NjpcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtODQ3LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMDk3PWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMjcyLVx0XHRcdCYjNDM7IGRzdC1cdTAwM2VoZWFkZXJfbGVuICYjNDM7IHQtXHUwMDNlaGxlbjtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxMjczOlx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzQ3CgkJCQkJCQlvdXRwdXQ6IDM3NgoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIZWFkcm9vbSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYCBpcyB1c2VkIGluIHNldmVyYWwgdHJhbnNtaXQgKGB4bWl0YCkgZnVuY3Rpb25zOiBgaXBfbWRfdHVubmVsX3htaXRgLCBgaXBfdHVubmVsX3htaXRgLCBhbmQgYGlwNl90bmxfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSB0aG9zZSBgeG1pdGAgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGhlYWRyb29tIGxpbWl0YXRpb25zIGR1cmluZyAqYm90aCogY29uZmlndXJhdGlvbiAobmV3bGluaywgY2hhbmdlbGluaywgaW9jdGwpICphbmQqIHRyYW5zbWlzc2lvbiAoeG1pdCkuCgpGdXp6aW5nIHRoZSBgeG1pdGAgZnVuY3Rpb25zIGRpcmVjdGx5ICpjb3VsZCogYmUgZnJ1aXRmdWwsIGJ1dCBhcyBob3QtcGF0aCBmdW5jdGlvbnMsIHRoZXkgbWlnaHQgbm90IGJlIHRoZSBiZXN0IHRhcmdldCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdOKAmXMgZ3VpZGFuY2UuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvICYjMzQ7QXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuJiMzNDsgVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBkaXJlY3QgZnV6emluZyBvZiBob3QgcGF0aHMgaXMgcHJvbmUgdG8gaW1iYWxhbmNlcyBhbmQgaW5lZmZpY2llbnQgdGVzdCBjb3ZlcmFnZS4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHByb21wdCBhZHZpc2VzIGFnYWluc3QgZGlyZWN0bHkgZnV6emluZyBob3QtcGF0aCBmdW5jdGlvbnMsIGFuZCB0aGUgYHhtaXRgIGZ1bmN0aW9ucyBhcmUgaG90LXBhdGgsIEnigJlsbCBhdm9pZCBpbmNsdWRpbmcgdGhlbS4gVGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIOKAkyBgbmV3bGlua2AsIGBjaGFuZ2VsaW5rYCwgYW5kIGBpb2N0bGAg4oCTIGFyZSBpZGVhbCB0YXJnZXRzLCBhcyB0aGV5IGFyZSBub3QgaG90LXBhdGggYW5kIHJlcHJlc2VudCB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoZSBlcXVhdGlvbi4KCkxldOKAmXMgcmV2aWV3IHRoZSBwcm92aWRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGFyZSB0aGVyZToKCmBuZXRraXRfbmV3X2xpbmtgCmBuZXRraXRfY2hhbmdlX2xpbmtgCmBpcGdyZV9uZXdsaW5rYApgaXBncmVfY2hhbmdlbGlua2AKYGVyc3Bhbl9uZXdsaW5rYApgZXJzcGFuX2NoYW5nZWxpbmtgCmB2dGlfbmV3bGlua2AKYHZ0aV9jaGFuZ2VsaW5rYApgaXBpcF9uZXdsaW5rYApgaXBpcF9jaGFuZ2VsaW5rYApgaXA2Z3JlX25ld2xpbmtgCmBpcDZncmVfY2hhbmdlbGlua2AKYGlwNmVyc3Bhbl9uZXdsaW5rYApgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgCmBpcDZfdG5sX25ld2xpbmtgCmBpcDZfdG5sX2NoYW5nZWxpbmtgCmBpcGlwNl9uZXdsaW5rYApgaXBpcDZfY2hhbmdlbGlua2AKYGlwZ3JlX3R1bm5lbF9jdGxgCmB2dGlfdHVubmVsX2N0bGAKYGlwaXBfdHVubmVsX2N0bGAKYGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGVgCmBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYApgaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlYAoKVGhpcyBsb29rcyBsaWtlIGEgcm9idXN0IGxpc3QgY292ZXJpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBtYWtpbmcgaXQgYSBzb3VuZCBiYXNpcyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSeKAmWxsIHF1aWNrbHkgY2hlY2sgaWYgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gIGlzIHVzZWQgYW55d2hlcmUgKmVsc2UqLiBObywgaXQmIzM5O3Mgb25seSBpbiB0aG9zZSB0aHJlZSB0cmFuc21pdCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6CgpgTkVUS0lUYApgTkVUX0lQSVBgCmBORVRfSVBHUkVgCmBORVRfSVBWVElgCmBJUFY2X0dSRWAKYElQVjZfVFVOTkVMYApgSVBWNl9TSVRgCmBJUFY2X1ZUSWAKCkFuZCB0aGUgZGVwZW5kZW5jaWVzPyBgTkVUX0lQX1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIGFuZCBgTkVUX0lQVlRJYC4gYElQVjZgIGlzIHJlcXVpcmVkIGZvciBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBgSVBWNl9TSVRgLCBhbmQgYElQVjZfVlRJYC4gR29vZCwgdGhpcyBjb25maXJtcyB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLgoKVGhlcmVmb3JlLCBnaXZlbiBteSBhbmFseXNpcyBhbmQgY29uc2lkZXJhdGlvbnMgb2YgdGhlIHByb21wdCYjMzk7cyBzdWdnZXN0aW9ucywgSSYjMzk7bGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBhbmFseXNpcyB3YXJyYW50cyBmdXp6aW5nIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEtJVCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQVlRJJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVlRJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0a2l0X25ld19saW5rJiMzNDssCiAgICAmIzM0O25ldGtpdF9jaGFuZ2VfbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX25ld2xpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7dnRpX25ld2xpbmsmIzM0OywKICAgICYjMzQ7dnRpX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXBfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O3Z0aV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwaXBfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDssCiAgICAmIzM0O2lwNl90bmxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYXhpbXVtIGhlYWRyb29tIGxpbWl0IGZvciBuZXRraXQgYW5kIElQIHR1bm5lbHMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0dW5uZWwgZGV2aWNlcyB2aWEgbmV0bGluayAobmV3bGluay9jaGFuZ2VsaW5rKSBhbmQgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUS0lUJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBWVEkmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRraXRfbmV3X2xpbmsmIzM0OywKICAgICYjMzQ7bmV0a2l0X2NoYW5nZV9saW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDt2dGlfbmV3bGluayYjMzQ7LAogICAgJiMzNDt2dGlfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7dnRpX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7aXBpcF90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXA2X3RubF9zaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1heGltdW0gaGVhZHJvb20gbGltaXQgZm9yIG5ldGtpdCBhbmQgSVAgdHVubmVscyB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHR1bm5lbCBkZXZpY2VzIHZpYSBuZXRsaW5rIChuZXdsaW5rL2NoYW5nZWxpbmspIGFuZCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb24gZW50cnkgcG9pbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTY6NTkuODEwNjUxNTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI5MjQwMzk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUS0lUXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBWVElcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVlRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0a2l0X25ld19saW5rXCIsXG4gICAgXCJuZXRraXRfY2hhbmdlX2xpbmtcIixcbiAgICBcImlwZ3JlX25ld2xpbmtcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwidnRpX25ld2xpbmtcIixcbiAgICBcInZ0aV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwX25ld2xpbmtcIixcbiAgICBcImlwaXBfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fbmV3bGlua1wiLFxuICAgIFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNl90bmxfbmV3bGlua1wiLFxuICAgIFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwNl9uZXdsaW5rXCIsXG4gICAgXCJpcGlwNl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJ2dGlfdHVubmVsX2N0bFwiLFxuICAgIFwiaXBpcF90dW5uZWxfY3RsXCIsXG4gICAgXCJpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcDZfdG5sX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWF4aW11bSBoZWFkcm9vbSBsaW1pdCBmb3IgbmV0a2l0IGFuZCBJUCB0dW5uZWxzIHRvIHByZXZlbnQgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdHVubmVsIGRldmljZXMgdmlhIG5ldGxpbmsgKG5ld2xpbmsvY2hhbmdlbGluaykgYW5kIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29uZmlndXJhdGlvbiBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU2OjU5LjgxMDY1ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjA2MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVhMjczMTQ4YmNlNDUxZmY2NzJmMWI1M2Y1MDY2MDQzNTUxNmE2YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzo1Njo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRraXQuYyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXFxuaW5kZXggYTM5MzFjZDgyMTMyMS4uZDhlOWNlMWM2NTlkMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXFxuQEAgLTI1LDYgKzI1LDggQEBcXG4gI2RlZmluZSBORVRLSVRfTlVNX1JYX1FVRVVFU19SRUFMIDFcXG4gI2RlZmluZSBORVRLSVRfTlVNX1RYX1FVRVVFU19SRUFMIDFcXG4gXFxuKyNkZWZpbmUgTkVUS0lUX0hFQURST09NX01BWCA1MTJcXG4rXFxuIHN0cnVjdCBuZXRraXQge1xcbiBcXHRfX2NhY2hlbGluZV9ncm91cF9iZWdpbihuZXRraXRfZmFzdHBhdGgpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqcGVlcjtcXG5AQCAtMTI0NCw3ICsxMjQ2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGtpdF9wb2xpY3lbSUZMQV9ORVRLSVRfTUFYICsgMV0gPSB7XFxuIFxcdFtJRkxBX05FVEtJVF9NT0RFXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX0wzKSxcXG4gXFx0W0lGTEFfTkVUS0lUX1BPTElDWV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtJRkxBX05FVEtJVF9QRUVSX1BPTElDWV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLVxcdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuK1xcdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMTYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBORVRLSVRfSEVBRFJPT01fTUFYKSxcXG4gXFx0W0lGTEFfTkVUS0lUX1RBSUxST09NXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4gXFx0W0lGTEFfTkVUS0lUX1NDUlVCXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX1NDUlVCX0RFRkFVTFQpLFxcbiBcXHRbSUZMQV9ORVRLSVRfUEVFUl9TQ1JVQl1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuaW5kZXggZDcwOGI2NmU1NWNkYS4uODVlMzQ1NWNlYTI1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcXG5AQCAtNjI5LDggKzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxcbiBpbnQgc2tiX3R1bm5lbF9jaGVja19wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmVuY2FwX2RzdCxcXG4gXFx0XFx0XFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuIHtcXG4gXFx0Lyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWRcXG4gXFx0ICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuXFxuQEAgLTY0MCw2ICs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGhlYWRyb29tIFxcdTAwM2UgbWF4X2FsbG93ZWQpXFxuIFxcdFxcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XFxuIFxcbitcXHRyZXR1cm4gaGVhZHJvb207XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbit7XFxuK1xcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcXG4rXFxuIFxcdGlmIChoZWFkcm9vbSBcXHUwMDNlIFJFQURfT05DRShkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXFxuIFxcdFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXFxuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXFxuQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRtdHUgPSBtaW4odGRldi1cXHUwMDNlbXR1LCBJUF9NQVhfTVRVKTtcXG4gXFx0fVxcbiBcXG4tXFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gKyBobGVuO1xcbitcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gKyBobGVuKTtcXG4gXFx0bXR1IC09IHRfaGxlbiArIChkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwKTtcXG4gXFxuIFxcdGlmIChtdHUgXFx1MDAzYyBJUFY0X01JTl9NVFUpXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9ncmUuYyBiL25ldC9pcHY2L2lwNl9ncmUuY1xcbmluZGV4IGI4NDMxMTZlOWI3MDMuLjA0YWMwMDdlYmNjODcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X2dyZS5jXFxuQEAgLTExMzcsOCArMTEzNywxMCBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZGV2KSB7XFxuLVxcdFxcdFxcdHVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHRfaGxlbjtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IGRzdF9sZW47XFxuK1xcbitcXHRcXHRcXHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB0X2hsZW4pO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHQtXFx1MDAzZWRldi1cXHUwMDNlaGVhZGVyX29wcylcXG4gXFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkc3RfbGVuO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBiZjhlNDBhZjYwYjA4Li40MDM5OTUyNzNjYmFlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0xNTIyLDggKzE1MjIsOSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbiBcXHRcXHRcXHR0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHQtXFx1MDAzZW5ldCwgcC1cXHUwMDNlbGluayk7XFxuIFxcbiBcXHRcXHRpZiAodGRldikge1xcbi1cXHRcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxuLVxcdFxcdFxcdFxcdHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSArIHRfaGxlbjtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dF9obGVuKTtcXG4gXFx0XFx0XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVxcdTAwM2VtdHUsIElQNl9NQVhfTVRVKTtcXG4gXFxuIFxcdFxcdFxcdG10dSA9IG10dSAtIHRfaGxlbjtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xcbmluZGV4IGEzOGIyNGZiODM4NDIuLjE5YjdmYThkMWEyYTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcXG4rKysgYi9uZXQvaXB2Ni9zaXQuY1xcbkBAIC0xMTMxLDcgKzExMzEsNyBAQCBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZW10dSwgbXR1KTtcXG4gXFx0XFx0aGxlbiA9IHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcXG4gXFx0fVxcbi1cXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XFxuK1xcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWwgKnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjAwLjI0NzU0MTEwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMjQ4NzE0MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRLSVRcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUFZUSVwiLFxuICAgIFwiSVBWNl9HUkVcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NJVFwiLFxuICAgIFwiSVBWNl9WVElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRraXRfbmV3X2xpbmtcIixcbiAgICBcIm5ldGtpdF9jaGFuZ2VfbGlua1wiLFxuICAgIFwiaXBncmVfbmV3bGlua1wiLFxuICAgIFwiaXBncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZXJzcGFuX25ld2xpbmtcIixcbiAgICBcImVyc3Bhbl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJ2dGlfbmV3bGlua1wiLFxuICAgIFwidnRpX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXBfbmV3bGlua1wiLFxuICAgIFwiaXBpcF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZncmVfbmV3bGlua1wiLFxuICAgIFwiaXA2Z3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNmVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gICAgXCJpcDZfdG5sX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXA2X25ld2xpbmtcIixcbiAgICBcImlwaXA2X2NoYW5nZWxpbmtcIixcbiAgICBcImlwZ3JlX3R1bm5lbF9jdGxcIixcbiAgICBcInZ0aV90dW5uZWxfY3RsXCIsXG4gICAgXCJpcGlwX3R1bm5lbF9jdGxcIixcbiAgICBcImlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGVcIixcbiAgICBcImlwNl90bmxfc2lvY2RldnByaXZhdGVcIixcbiAgICBcImlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYXhpbXVtIGhlYWRyb29tIGxpbWl0IGZvciBuZXRraXQgYW5kIElQIHR1bm5lbHMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0dW5uZWwgZGV2aWNlcyB2aWEgbmV0bGluayAobmV3bGluay9jaGFuZ2VsaW5rKSBhbmQgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWEyNzMxNDhiY2U0NTFmZjY3MmYxYjUzZjUwNjYwNDM1NTE2YTZhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NTY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRraXQuYyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXG5pbmRleCBhMzkzMWNkODIxMzIxLi5kOGU5Y2UxYzY1OWQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0a2l0LmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXG5AQCAtMjUsNiArMjUsOCBAQFxuICNkZWZpbmUgTkVUS0lUX05VTV9SWF9RVUVVRVNfUkVBTCAxXG4gI2RlZmluZSBORVRLSVRfTlVNX1RYX1FVRVVFU19SRUFMIDFcbiBcbisjZGVmaW5lIE5FVEtJVF9IRUFEUk9PTV9NQVggNTEyXG4rXG4gc3RydWN0IG5ldGtpdCB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9iZWdpbihuZXRraXRfZmFzdHBhdGgpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKnBlZXI7XG5AQCAtMTI0NCw3ICsxMjQ2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGtpdF9wb2xpY3lbSUZMQV9ORVRLSVRfTUFYICsgMV0gPSB7XG4gXHRbSUZMQV9ORVRLSVRfTU9ERV1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBORVRLSVRfTDMpLFxuIFx0W0lGTEFfTkVUS0lUX1BPTElDWV1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0lGTEFfTkVUS0lUX1BFRVJfUE9MSUNZXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLVx0W0lGTEFfTkVUS0lUX0hFQURST09NXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG4rXHRbSUZMQV9ORVRLSVRfSEVBRFJPT01dXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UxNixcbitcdFx0XHRcdFx0XHRcdCBORVRLSVRfSEVBRFJPT01fTUFYKSxcbiBcdFtJRkxBX05FVEtJVF9UQUlMUk9PTV1cdFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxuIFx0W0lGTEFfTkVUS0lUX1NDUlVCXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSxcbiBcdFtJRkxBX05FVEtJVF9QRUVSX1NDUlVCXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBORVRLSVRfU0NSVUJfREVGQVVMVCksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5pbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbkBAIC02MjksOCArNjI5LDcgQEAgc3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXG4gXHRcdFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4ge1xuIFx0Lyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWRcbiBcdCAqIHdpbGwgb3ZlcmZsb3cgaGVhZGVyIG9mZnNldHMgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLlxuQEAgLTY0MCw2ICs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgbWF4X2FsbG93ZWQpXG4gXHRcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XG4gXG4rXHRyZXR1cm4gaGVhZHJvb207XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3tcbitcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbitcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgUkVBRF9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xuIFx0fVxuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xuIFx0bXR1IC09IHRfaGxlbiArIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4gXG4gXHRpZiAobXR1IFx1MDAzYyBJUFY0X01JTl9NVFUpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4wNGFjMDA3ZWJjYzg3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC0xMTM3LDggKzExMzcsMTAgQEAgc3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldikge1xuLVx0XHRcdHVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbitcdFx0XHR1bnNpZ25lZCBpbnQgZHN0X2xlbjtcbitcbitcdFx0XHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcbitcdFx0XHRcdFx0XHRcdCAgIHRfaGxlbik7XG4gXG4gXHRcdFx0aWYgKHQtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMpXG4gXHRcdFx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZHN0X2xlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGJmOGU0MGFmNjBiMDguLjQwMzk5NTI3M2NiYWUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE1MjIsOCArMTUyMiw5IEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xuLVx0XHRcdFx0dGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKyB0X2hsZW47XG4rXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXG4rXHRcdFx0XHRcdFx0XHRcdFx0dGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gK1xuK1x0XHRcdFx0XHRcdFx0XHRcdHRfaGxlbik7XG4gXHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xuIFxuIFx0XHRcdG10dSA9IG10dSAtIHRfaGxlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcbisrKyBiL25ldC9pcHY2L3NpdC5jXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbXR1KTtcbiBcdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4gXHR9XG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjAwLjI0NzU0MjE5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDkzMDM1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIZWFkcm9vbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGhlYWRyb29tIGxpbWl0cyB3aXRoaW4gYSBmZXcgdHVubmVsaW5nIHByb3RvY29scy4gSXQgc2VlbXMgbGlrZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGBORVRLSVRfSEVBRFJPT01fTUFYYCBhbmQgYXJlIGNhcHBpbmcgYElGTEFfTkVUS0lUX0hFQURST09NYCB0byBpdCwgYW5kIHRoZSBuZXcgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSgpYCBmdW5jdGlvbiBpcyBiZWluZyBhcHBsaWVkIGluIHNldmVyYWwgcGxhY2VzOiBgaXBfdHVubmVsYCwgYGlwNl9ncmVgLCBgaXA2X3R1bm5lbGAsIGFuZCBgc2l0YC4gVGhpcyBtYWtlcyBzZW5zZTsgZXhjZXNzIGhlYWRyb29tIGNhbiBiZSBhIG5hc3R5IHNvdXJjZSBvZiBwcm9ibGVtcywgYW5kIGNhcHBpbmcgaXQgaXMgYSBnb29kIHByZXZlbnRhdGl2ZSBtZWFzdXJlLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZm9jdXMgb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIExldCdzIHNlZS4uLlxuXG4qICAgRm9yIGBuZXRraXRgLCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBmaWxlIGlzIGBkcml2ZXJzL25ldC9uZXRraXQuY2AgYW5kIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfTkVUS0lUYC4gU2ltcGxlIGVub3VnaC5cbiogICBgaXBfdHVubmVsYCdzIGNvZGUgcmVzaWRlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsLmNgLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09ORklHX05FVF9JUElQYCwgYENPTkZJR19ORVRfSVBHUkVgLCBhbmQgc28gb24uIFJpZ2h0LCBzbyBpdCBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyB0dW5uZWwgdHlwZS5cbiogICBgaXA2X2dyZWAgaXMgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfSVBWNl9HUkVgLlxuKiAgIGBpcDZfdHVubmVsYCwgc2ltaWxhcmx5LCBpcyBmb3VuZCBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBhbmQgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfVFVOTkVMYC5cbiogICBBbmQgZmluYWxseSwgYHNpdGAgaXMgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2l0LmNgLCBjb250cm9sbGVkIGJ5IGBDT05GSUdfSVBWNl9TSVRgLlxuXG5Pa2F5LCBJJ2xsIG5lZWQgdG8gZ28gYW5kIGV4YW1pbmUgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZXNlIG9wdGlvbnMgbm93IHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGZ1bGx5LiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0IGZvciBkaWdnaW5nIGludG8gdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzUwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MDYuNDU2ODQ4Mzk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTAzMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRLSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTQ1Mz1jb25maWcgTkxNT05cXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDYyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDYzOmNvbmZpZyBORVRLSVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cXHRib29sIFxcXCJCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzowNi41MDI5NTc1NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc5Njk1ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGJlc2lkZXMgdGhlIG9uZXMgSSd2ZSBhbHJlYWR5IGV4YW1pbmVkLiBUaGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCB3b3VsZCBiZSB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIElQdjQgYW5kIElQdjYuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsLiBTbywgSSdsbCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIGlzIGluIHRoZXJlLiBJIGJldCB0aGV5J2xsIGhhdmUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzowOS43ODI2NTU3NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMzM2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MDkuODI5ODk0NTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2ODc3MzEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNvbnNpZGVyaW5nIElQdjYgVHVubmVsaW5nIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi5JJ20gbXVsbGluZyBvdmVyIElQdjYgdHVubmVsaW5nIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG1lbnRhbCBnZWFycyBhcmUgdHVybmluZyBhcm91bmQgYElQVjZfU0lUYCBhbmQgYElQVjZfVFVOTkVMYC4gT2YgY291cnNlLCB0aGlzIGlzIGp1c3QgYSBxdWljayByZXZpZXcgb2YgdGhlIG9idmlvdXMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uY2VwdCBJIG5lZWQgdG8gYWRkcmVzcyBpcyB0aGUgbWVjaGFuaXNtIGZvciBlbmNhcHN1bGF0aW5nIElQdjYgcGFja2V0cyB3aXRoaW4gSVB2NCBwYWNrZXRzLCBvciBwb3RlbnRpYWxseSB3aXRoaW4gYW5vdGhlciB0cmFuc3BvcnQgcHJvdG9jb2wgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgcmlnaHQ/IEknbSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBudWFuY2UgYmV0d2VlbiB0aGUgdHdvLiBgSVBWNl9TSVRgIGlzIHRoZSBcIlNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uXCIgcHJvdG9jb2wuIEl0J3MgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCwgb2Z0ZW4gdGhvdWdodCBvZiBhcyBhIHN0YXRpYyB0dW5uZWwuIE5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnksIGRvZXMgaXQgcmVxdWlyZSBleHBsaWNpdCBjb25maWd1cmF0aW9uIGF0IGJvdGggdHVubmVsIGVuZHBvaW50cz8gVGhhdCB3b3VsZCBpbXBseSBhIGZpeGVkIHR1bm5lbCBkZXN0aW5hdGlvbiwgeWVhaD8gQW5kIHdoYXQgYWJvdXQgdGhlIG92ZXJoZWFkPyBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBtYWtpbmcgYSBzZWxlY3Rpb24gZm9yIGEgY3VycmVudCBwcm9qZWN0LiBJcyB0aGVyZSBhIGJldHRlciBhcHByb2FjaD8gTWF5YmUgdGhlcmUncyBhIHJlYXNvbiB0byB1c2UgYElQVjZfVFVOTkVMYCBvdmVyIGl0LiBgSVBWNl9UVU5ORUxgIHByb2JhYmx5IGVuY29tcGFzc2VzIGEgYnJvYWRlciByYW5nZSBvZiBvcHRpb25zLCBhbGxvd2luZyBmb3IgZHluYW1pYyB0dW5uZWwgZXN0YWJsaXNobWVudCBvciBkaWZmZXJlbnQgZW5jYXBzdWxhdGlvbiBtZXRob2RzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGRldGFpbHMsIGJ1dCBteSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRoYXQgYElQVjZfVFVOTkVMYCBpcyBwcm9iYWJseSBtb3JlIGZsZXhpYmxlLiBPa2F5LCBJJ2xsIHJldmlldyBteSBub3RlcyBvbiB0aGlzIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMga2V5IHRvIHNlbGVjdGluZyB0aGUgbW9zdCBlZmZpY2llbnQgdHJhbnNpdGlvbiBtZXRob2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoxMy40OTg2NzA2MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5Mzk1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfU0lUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoxMy41NDM2MTg0MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5MTQ2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6XG5cbioqRXhhbWluaW5nIElQdjQgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIGFnYWluLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NCB0dW5uZWxpbmcuIEknbSBub3RpbmcgdGhlIHByZXNlbmNlIG9mIGBORVRfSVBJUGAgYW5kIGBORVRfSVBHUkVgLiBUaGVzZSBhcmUsIG9mIGNvdXJzZSwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5bWJvbHMgdGhhdCBjb250cm9sIHdoZXRoZXIgc3VwcG9ydCBmb3IgSVBJUCAoSVAtaW4tSVApIGFuZCBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSB0dW5uZWxzLCByZXNwZWN0aXZlbHksIGFyZSBjb21waWxlZCBpbnRvIHRoZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2suIFNvLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggdG8gZW5hYmxlLCBhcyB0aGVzZSB3aWxsIGFmZmVjdCBrZXJuZWwgc2l6ZSBhbmQgcmVzb3VyY2UgdXNhZ2UuIEkga25vdyB0aGUgbnVhbmNlcyBvZiB1c2luZyB0aGVzZSwgaW5jbHVkaW5nIHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYXNzZXNzaW5nIHRoZSBJUHY0IHR1bm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDMxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MTYuNTMyNzY3MzkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc5MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQSVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTYxLVxcbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxcbm5ldC9pcHY0L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUDogdHVubmVsaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoxNi41Nzc1Njc0MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4OTQzMzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIElQR1JFKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIGBORVRfSVBHUkVgLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIHR1bm5lbHMsIHJpZ2h0PyBUaGUgY2xhc3NpYywgUkZDIDI3ODQgYW5kIGFsbCB0aGF0LiBJdCdzIGFuIElQIHByb3RvY29sLCBzbyB0aGUgaW1wbGljYXRpb24gaXMgTGF5ZXIgMyBlbmNhcHN1bGF0aW9uLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSB3YXkgdG8gdHJhbnNwb3J0IHBhY2tldHMgdGhhdCBtaWdodCBiZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV0d29yaydzIG5hdGl2ZSBwcm90b2NvbHMgb3IgdG9wb2xvZ2llcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYXJvdW5kIHNjZW5hcmlvcyB3aGVyZSB5b3UgbmVlZCB0byBnZXQgYXJvdW5kIG5ldHdvcmsgcmVzdHJpY3Rpb25zLCBtYXliZSB0dW5uZWxpbmcgSVB2NiBvdmVyIGFuIElQdjQgbmV0d29yaywgb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MgdGhhdCB3b3VsZG4ndCBub3JtYWxseSB0YWxrIHRvIGVhY2ggb3RoZXIgZGlyZWN0bHkuXG5cbkknbSBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgLSB0aGUgYWRkaXRpb25hbCBJUCBoZWFkZXIgZm9yIGVuY2Fwc3VsYXRpb24gaXRzZWxmLiBUaGF0IGFkZHMgdG8gdGhlIHBhY2tldCBzaXplLCBpbXBhY3RpbmcgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS4gVGhpcyBhbHNvIG1lYW5zIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCBwbGFuZSDigJMgd2hhdCByb3V0aW5nIHByb3RvY29sIGlzIGJlaW5nIHVzZWQgb3ZlciB0aGlzIHR1bm5lbD8gU3RhdGljIHJvdXRlcz8gRHluYW1pYywgbGlrZSBPU1BGIG9yIEJHUD8gQW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGZyb250IGFuZCBjZW50ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGluaGVyZW50IGluIGFueSB0dW5uZWwgLSBub3Qgb25seSBzaG91bGQgaXQgYmUgZW5jcnlwdGVkLCBidXQgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGFjY2VzcyBjb250cm9scyBhbmQgcG90ZW50aWFsIERvUyBhdHRhY2tzLiBUaGUgZmFjdCB0aGF0IHRoZSBHUkUgdHVubmVsIGl0c2VsZiBkb2Vzbid0IG9mZmVyIGVuY3J5cHRpb24gcmlnaHQgb3V0IG9mIHRoZSBib3ggbWVhbnMgSSdtIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhhdCBleHRyYSBsYXllciBpcyBiZWluZyBpbXBsZW1lbnRlZC4gSXMgaXQgSVBTZWMgb24gdG9wLCBvciBzb21lIG90aGVyIHNvbHV0aW9uP1xuXG5GdW5jdGlvbmFsbHksIEkgc3RhcnQgdG8gYW5hbHl6ZSBteSBvcHRpb25zLiBXaGF0IGFyZSB0aGUgYWR2YW50YWdlcyBvZiB1c2luZyBHUkU/IFRoZSBkaXNhZHZhbnRhZ2VzPyBXaGF0IGFyZSB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIHNwZWNpZmljIG5ldHdvcmsgZW52aXJvbm1lbnQ/IElzIGl0IGEgcG9pbnQtdG8tcG9pbnQgc2l0dWF0aW9uLCBvciBhIG11bHRpLXBvaW50IHRvcG9sb2d5PyBUaGUgY2hvaWNlIGlzIG1hZGUgYmFzZWQgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgdGhlIG5lY2Vzc2l0eSBmb3IgdHVubmVsaW5nIGluIGdlbmVyYWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wYWN0IG9uIG5ldHdvcmsgZGlhZ25vc3RpY3MuIFBhY2tldCBjYXB0dXJlcyBhcmUgYWx3YXlzIGdvaW5nIHRvIGJlIHBhcnQgb2YgbXkgdG9vbHNldC5cblxuSSdtIGFzc2Vzc2luZyBpdHMgc3VpdGFiaWxpdHkgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIGFuZCBpdHMgaW5oZXJlbnQgbGltaXRhdGlvbnMuIEkgY29uc2lkZXIgaWYgb3RoZXIgdHVubmVsaW5nIG1lY2hhbmlzbXMgbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0ZS4gVWx0aW1hdGVseSwgSSdtIGFscmVhZHkgbWVudGFsbHkgd29ya2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHN0ZXBzLCBjaGVja2luZyBmb3IgcG90ZW50aWFsIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzLCBhbmQgZm9ybWluZyBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Qgb2YgdGhpbmdzIHRvIHZlcmlmeSBpbiBhIGxpdmUgZGVwbG95bWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MjEuMzY3MDAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg1MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE3OS1cXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXFxubmV0L2lwdjQvS2NvbmZpZy0xODEtXFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgZGVtdWx0aXBsZXhlclxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0xOTMtXFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgdHVubmVscyBvdmVyIElQXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXFxubmV0L2lwdjQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoyMS40MTY4NjQyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMjM1MDUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhlc2UgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgaW5kaWNhdGVzIHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHRvdWNoZWQ6IGBuZXRraXQuY2AsIGBpcF90dW5uZWwuY2AsIGBpcDZfZ3JlLmNgLCBgaXA2X3R1bm5lbC5jYCwgYW5kIGBzaXQuY2AuIFJpZ2h0LCBzbyBub3RoaW5nIGRpcmVjdGx5IGNoYW5nZWQgaW4gdGhlIGBuZXRraXRgIGZ1bmN0aW9ucy4gVGhlIGBuZXRraXRfcG9saWN5YCBhcnJheSBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoaXMgY2hhbmdlIGlzIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIGJ1dCBpbmRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIG5ldGxpbmsgcGFyc2VyIHdvcmtzLiBOb3RlZC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIG90aGVyIGZpbGVzLiBTcGVjaWZpY2FsbHksIGBpcF90dW5uZWxfYmluZF9kZXZgLCBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAsIGBpcDZfdG5sX2xpbmtfY29uZmlnYCwgYW5kIGBpcGlwNl90dW5uZWxfYmluZF9kZXZgIC0gYWxsIGtleSBmdW5jdGlvbnMgZm9yIHR1bm5lbCBhbmQgaW50ZXJmYWNlIG1hbmFnZW1lbnQuIEkgc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIG9yIG5vdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIHN0YXRpY2FsbHkgLSBgaXBfdHVubmVsX2JpbmRfZGV2YCBoYXMgYmVlbiBsaXN0ZWQgYXMgYSBmdW5jdGlvbiBtb2RpZmllZCwgc28gSSdsbCBjaGVjayBgbmV0L2lwdjQvaXBfdHVubmVsLmNgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MjUuNDI5MjE3NDk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA1MjM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfYmluZF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmM9MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqX19pcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI3OS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoyODA6c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yODEte1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0Mi1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6XFx0bXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGRldik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzQ0LVxcdGVyciA9IGRldl9zZXRfbXR1KGRldiwgbXR1KTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTg2Mj1zdGF0aWMgdm9pZCBpcF90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04ODgtXFx0XFx0dC1cXHUwMDNlZndtYXJrID0gZndtYXJrO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg4OTpcXHRcXHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04OTAtXFx0XFx0aWYgKHNldF9tdHUpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTI1PWludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaXBfdG5sX25ldF9pZCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTUtXFx0XFx0aXRuLVxcdTAwM2VmYl90dW5uZWxfZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExNTY6XFx0XFx0aXRuLVxcdTAwM2VmYl90dW5uZWxfZGV2LVxcdTAwM2VtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoaXRuLVxcdTAwM2VmYl90dW5uZWxfZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTU3LVxcdFxcdGlwX3R1bm5lbF9hZGQoaXRuLCBuZXRkZXZfcHJpdihpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYpKTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTU9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMjQtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIyNTpcXHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjI2LVxcdGlmICh0YltJRkxBX01UVV0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MjUuNDczMjc1OTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzM2OTE0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUCBUdW5uZWwgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcF90dW5uZWxfYmluZF9kZXZgLiBUaGF0IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHN0YXRpY2FsbHkgZGVmaW5lZCwgYW5kIEknbSBzZWVpbmcgaXQncyBpbnZva2VkIGJ5IGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zOiBgaXBfdHVubmVsX2NyZWF0ZWAsIGBpcF90dW5uZWxfdXBkYXRlYCwgYGlwX3R1bm5lbF9pbml0X25ldGAsIGFuZCBgaXBfdHVubmVsX25ld2xpbmtgLiBUaGF0J3MgdGhlIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyB0byBjb25zaWRlci5cblxuTm93LCBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGBpcF90dW5uZWxfbmV3bGlua2AuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUgbWlnaHQgYmUgZXhwb3J0ZWQgZm9yIGV4dGVybmFsIHVzZS4gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhhdCwgc28gbGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gZG91YmxlLWNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzAuOTA2OTY5OTY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3OTEwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzAuOTUxOTUzOTUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjIyOTgxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkxpbmsgQ29uZmlndXJhdGlvbiBhbmQgUm91dGluZyBmb3IgSVAgVHVubmVscyoqXG5cblJpZ2h0LCBzbyBgaXBfdHVubmVsX25ld2xpbmtgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZS4gSXQncyB0aGUgY29yZSBwcmltaXRpdmUgZm9yIGNyZWF0aW5nIG5ldyBJUCB0dW5uZWwgaW50ZXJmYWNlcywgc28gSSBuZWVkIHRvIGtlZXAgaXQgaW4gbWluZCBhcyBJIHdvcmsuIEJ1dCBub3cgSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGJyb2FkZXI6IHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZT8gSSdtIGN1cmlvdXMgYWJvdXQgaG93IHJvdXRlcyBhcmUgaGFuZGxlZCBhcyB0aGVzZSB0dW5uZWxzIGFyZSBzZXQgdXAuIExldCBtZSBkaWcgaW50byB0aGUgcmVsYXRlZCBjb2RlYmFzZSBhbmQgY29uc2lkZXIgYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgLiBJcyB0aGlzIGFsc28gZXhwb3J0ZWQ/IEl04oCZcyBwcm9iYWJseSBhIGZ1bmN0aW9uIGludm9sdmVkIHdpdGggY29uZmlndXJpbmcgdGhlIHJvdXRpbmcgZm9yIEdSRSB0dW5uZWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdOKAmXMgYSBuZWNlc3NhcnkgZnVuY3Rpb24gYXMgd2VsbC4gQXJlIHRoZXJlIG90aGVyIGFuYWxvZ291cyByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQ/IEFuZCB3aGF0IGFyZSB0aGUgYnJvYWRlciByb3V0aW5nIGltcGxpY2F0aW9ucyBvZiBjcmVhdGluZyBhbmQgbWFuYWdpbmcgdGhlc2UgdHVubmVscyBpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIG9mIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIHJvdXRpbmcgY29uZmlnLCBhcyB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiB0aGUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzozNC40MTQyNTU1NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjQwNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xMDg4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjEtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjExMjI6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXFx0XFx0XFx0XFx0XFx0IGludCB0X2hsZW4pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTE4ND1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTg2LVxcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTg3OlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODgtfVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNTI9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1NC1cXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NTpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmVyc3Bhbl9jYWxjX2hsZW4odCkpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjU2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzQuNDU4NTAxMTcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzI1NTg0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlN0YXRpYyBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgdGhlIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnYCBhbmQgYGlwNmVyc3Bhbl90bmxfbGlua19jb25maWdgIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIHN0YXRpY2FsbHkuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byAqd2h5KiB0aGV5J3JlIHN0YXRpYyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuIFRoaXMgaXNuJ3QgbmVjZXNzYXJpbHkgYSBiYWQgdGhpbmcsIGJ1dCBpdCBkb2VzIG1lYW4gdGhlcmUncyBhIHNwZWNpZmljLCBwb3RlbnRpYWxseSBwcmUtZGV0ZXJtaW5lZCBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIGJlaGluZCB0aGF0IHN0YXRpYyBpbXBsZW1lbnRhdGlvbiDigJMgaXMgaXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIHJlcXVpcmVtZW50IG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIHByb3RvY29sLCBhIHNpbXBsaWNpdHkgdHJhZGUtb2ZmLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhY2UsIGxpa2VseSBsb29raW5nIGF0IHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGRhdGEgc3RydWN0dXJlcywgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBiZWhhdmlvciByZWxhdGVkIHRvIHRob3NlIHN0YXRpYyBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBob3cgdGhlc2Ugc3RhdGljIHZhbHVlcyBhcmUgdXNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjM4LjEzMTA2MjY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA2NDA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZncmVfdG5sX2xpbmtfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9Nzk9c3RhdGljIHZvaWQgaXA2Z3JlX3R1bm5lbF9saW5rKHN0cnVjdCBpcDZncmVfbmV0ICppZ24sIHN0cnVjdCBpcDZfdG5sICp0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6ODA6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy04MS1zdGF0aWMgdm9pZCBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MzE1PXN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2Z3JlX3R1bm5lbF9sb2NhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTM1Mi1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MzUzOlxcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsIDEpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0zNTQtXFx0aXA2Z3JlX3R1bm5lbF9saW5rKGlnbiwgbnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTkxNz1zdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTA4Ny1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTA4ODpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTA4OS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTEyMjpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMy1cXHRcXHRcXHRcXHRcXHQgaW50IHRfaGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTY3PXN0YXRpYyBpbnQgaXA2Z3JlX2NhbGNfaGxlbihzdHJ1Y3QgaXA2X3RubCAqdHVubmVsKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODMtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjExODQ6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODUte1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTg2OlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTg3OlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODgtfVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTEyMTM9c3RhdGljIGludCBpcDZncmVfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyMTYtXFx0aXA2Z3JlX3RubF9jb3B5X3RubF9wYXJtKHQsIHApO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMjE3OlxcdGlwNmdyZV90bmxfbGlua19jb25maWcodCwgc2V0X210dSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyMTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTk3OT1zdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAwMi1cXHRpZiAoIWVycikge1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDAzOlxcdFxcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsICF0YltJRkxBX01UVV0pO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDA0LVxcdFxcdGlwNmdyZV90dW5uZWxfbGlua19tZChpZ24sIG50KTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjUyPXN0YXRpYyB2b2lkIGlwNmVyc3Bhbl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjUzLXtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NDpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NTpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmVyc3Bhbl9jYWxjX2hsZW4odCkpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjU2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzguMTgyMTMyNTg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk5NjQyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgSVA2R1JFIEludGVyZmFjZSBDcmVhdGlvbiBQcm9jZXNzKipcblxuUmlnaHQsIHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgYGlwNmdyZV9uZXdsaW5rYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMsIGlzbid0IGl0PyBUaGUgZW50cnkgcG9pbnQuIEl0J3MgdGhlIHN0YXJ0aW5nIGd1biBmb3IgYnJpbmdpbmcgdXAgYSBuZXcgR1JFIHR1bm5lbCB3aXRoIElQdjYgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBrZXJuZWwncyBkYXRhIHN0cnVjdHVyZXMgYW5kIGZsb3cuIEkga25vdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yLCBhdCBhIGhpZ2ggbGV2ZWwsIGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgbmV0bGluayBtZXNzYWdlLCBpbml0aWFsaXppbmcgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGFzc29jaWF0ZWQgcHJvdG9jb2wgaGFuZGxlciwgYW5kIGJpbmRpbmcgaXQgYWxsIHRvZ2V0aGVyLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHRoZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwcm9wYWdhdGVzLCB3aGF0IGhvb2tzIGFuZCBjYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQsIGFuZCB3aGF0IGVycm9yIGNoZWNraW5nIGlzIGRvbmUgYXQgdGhpcyBpbml0aWFsIHN0YWdlLiBVbHRpbWF0ZWx5LCB0aGlzIHBvaW50IGlzIGNyaXRpY2FsLiBHZXQgdGhpcyB3cm9uZywgYW5kIHRoZSBlbnRpcmUgR1JFIElQdjYgdHVubmVsIGltcGxlbWVudGF0aW9uIHdpbGwgZmFsbCBhcGFydCBhdCB0aGUgc2VhbXMuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscy4gSSBjYW4gZ3Vlc3MgSSB3aWxsIGJlIG5lZWRpbmcgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBhcmd1bWVudCBoYW5kbGluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBjb21lIGludG8gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo0MS40NDIwOTk1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MDc4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xOTEyPXN0YXRpYyBib29sIGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTQ0LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTQ1OnN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmtfY29tbW9uKHN0cnVjdCBuZXQgKmxpbmtfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTQ2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk3OC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTk3OTpzdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5ODAtXFx0XFx0XFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwMDAtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwMDE6XFx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAwMi1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyMjA9c3RhdGljIGludCBpcDZlcnNwYW5fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDItXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNDM6XFx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI0NC1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTctXFx0LnZhbGlkYXRlXFx0PSBpcDZncmVfdHVubmVsX3ZhbGlkYXRlLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjk4OlxcdC5uZXdsaW5rXFx0PSBpcDZncmVfbmV3bGluayxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5OS1cXHQuY2hhbmdlbGlua1xcdD0gaXA2Z3JlX2NoYW5nZWxpbmssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjMwNj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzEyLVxcdC52YWxpZGF0ZVxcdD0gaXA2Z3JlX3RhcF92YWxpZGF0ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMxMzpcXHQubmV3bGlua1xcdD0gaXA2Z3JlX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTQtXFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo0MS40ODg3MTI2MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjYwMzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVB2NiBHUkUgTmV3bGluayBDYWxsYmFjayoqXG5cbkFscmlnaHQsIHNvIGBpcDZncmVfbmV3bGlua2AuLi4gdGhhdCdzIGEgKm5ld2xpbmsqIGNhbGxiYWNrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBzbyB3aGF0IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT9cIiBJdCdzIGRlZmluaXRlbHkgYSBwb2ludCB3aGVyZSBhIG5ldyBJUHY2IEdSRSB0dW5uZWwgaXMgYmVpbmcgc2V0IHVwLCBjcmVhdGVkLCBvciBjb25maWd1cmVkLiBUaGUga2V5IHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT9cblxuQW5kIHRoYXQgbGluZSBvZiB0aGlua2luZywgcXVpY2tseSBsZWFkcyBtZSB0byB0aGUgb2J2aW91cyBmaWxlOiBgaXA2X3R1bm5lbC5jYC4gVGhhdCdzIHdoZXJlIEkgKmV4cGVjdCogdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NiB0dW5uZWxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZXdsaW5rYCBjYWxsIGlzIHVzZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciB0dW5uZWwtcmVsYXRlZCBmdW5jdGlvbnMsIGFuZCB3aGF0IHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgbGlrZWx5IG1hbmlwdWxhdGluZy4gU28sIGxldCBtZSBnbyBoYXZlIGEgbG9vayBhdCBgaXA2X3R1bm5lbC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo0NC43NDEzMTg0MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjczODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfbGlua19jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDM2PWlwNl90bmxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE0NzQ6c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTQ3NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU1MT1pcDZfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjItXFx0ZHN0X2NhY2hlX3Jlc2V0KFxcdTAwMjZ0LVxcdTAwM2Vkc3RfY2FjaGUpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTYzOlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjQtfVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5NzQ9c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk4MC1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTgxOlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5ODItXFx0aWYgKHQtXFx1MDAzZXBhcm1zLmNvbGxlY3RfbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjQ0Ljc4Mjk5NzA0OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgzODg2MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBmb2N1c2luZyBvbiB0aG9zZSBrZXJuZWwgZnVuY3Rpb25zOlxuXG4qKktlcm5lbCBGdW5jdGlvbiBDb25zaWRlcmF0aW9uczogYGlwNl90bmxfZGV2X2luaXRgIGFuZCBgaXA2X3RubF9jaGFuZ2VgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgd29ya2luZ3Mgb2YgSVB2NiB0dW5uZWxpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgbXkgbWluZCBpcyBkcmF3biB0byB0d28gY3J1Y2lhbCBmdW5jdGlvbnM6IGBpcDZfdG5sX2Rldl9pbml0YCBhbmQgYGlwNl90bmxfY2hhbmdlYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYGlwNl90bmxfZGV2X2luaXRgIGFzIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBhIHR1bm5lbCBkZXZpY2UuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgaXMgZXN0YWJsaXNoZWQg4oCTIHNldHRpbmcgdXAgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW5nIHJlc291cmNlcywgYW5kIGdldHRpbmcgdGhlIHR1bm5lbCBpbnRlcmZhY2UgcmVhZHkgZm9yIHRyYWZmaWMuIEknbSBjb25zaWRlcmluZyB3aGF0IGFzcGVjdHMgb2YgdGhlIHR1bm5lbCBhcmUgc2V0IHVwIGF0IHRoaXMgcG9pbnQ6IHRoZSBsaW5rLWxheWVyIHBhcmFtZXRlcnMsIHJvdXRpbmcgdGFibGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VzLiBJJ20gd29uZGVyaW5nIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGVzcGVjaWFsbHkgaWYgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgZGV2aWNlIGNyZWF0aW9uLlxuXG5NeSB0aG91Z2h0cyB0aGVuIHNoaWZ0IHRvIGBpcDZfdG5sX2NoYW5nZWAuIFRoaXMsIEkgYXNzdW1lLCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyBhbiBleGlzdGluZyB0dW5uZWwgZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYW55IGNoYW5nZSB0byB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24gY291bGQgdHJpZ2dlciBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEknbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIHRvIHRoZSB0dW5uZWwncyBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzLCBNVFUsIG9yIGVuY2Fwc3VsYXRpb24gbWV0aG9kLiBXaGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBhIHNlYW1sZXNzIHRyYW5zaXRpb24gd2l0aG91dCBkaXNydXB0aW5nIG9uZ29pbmcgdHJhZmZpYz8gQXJlIHRoZXJlIHByb3BlciBsb2NraW5nIHByaW1pdGl2ZXMgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIHN0YXRlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2VsbCBpdCBoYW5kbGVzIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLiBBbHNvLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhbmQgdGhlIGZsb3cgY29udHJvbC4gV2hhdCBraW5kIG9mIHZhbGlkYXRpb24gaGFwcGVucyB0byBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgdmFsaWQsIGFuZCBkbyB0aGV5IGFsaWduIHdpdGggZXN0YWJsaXNoZWQgbmV0d29yayBwb2xpY2llcyBvciBzZWN1cml0eSBydWxlcz8gSSdtIGFzc2Vzc2luZyB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2Ygc3RhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIHNlY3VyaXR5LiBJdCdzIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIG91ciB3b3JrOyBJIG5lZWQgdG8gZW5zdXJlIHRoZXkncmUgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk0MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjUwLjA2Njg4NTMzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNzgzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9kZXZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jPTc0PXN0YXRpYyB1MzIgSEFTSChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIxLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIyKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgwLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo4MTpzdGF0aWMgaW50IGlwNl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgyLXN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4Nzk6XFx0Lm5kb19pbml0XFx0PSBpcDZfdG5sX2Rldl9pbml0LFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODgwLVxcdC5uZG9fdW5pbml0XFx0PSBpcDZfdG5sX2Rldl91bmluaXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTkwMz1zdGF0aWMgdm9pZCBpcDZfdG5sX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5MjYtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5Mjc6ICogaXA2X3RubF9kZXZfaW5pdF9nZW4gLSBnZW5lcmFsIGluaXRpYWxpemVyIGZvciBhbGwgdHVubmVsIGRldmljZXNcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTkyOC0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTMxPXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5MzI6aXA2X3RubF9kZXZfaW5pdF9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTkzMy17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk2OS0vKipcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk3MDogKiBpcDZfdG5sX2Rldl9pbml0IC0gaW5pdGlhbGl6ZXIgZm9yIGFsbCBub24gZmFsbGJhY2sgdHVubmVsIGRldmljZXNcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3MS0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTczLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTc0OnN0YXRpYyBpbnQgaXA2X3RubF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTc1LXtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3Ni1cXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5Nzc6XFx0aW50IGVyciA9IGlwNl90bmxfZGV2X2luaXRfZ2VuKGRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5NzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjUwLjEwOTk2ODg2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjU2MjA2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBUdW5uZWwgRGV2aWNlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGBpcDZfdG5sX2Rldl9pbml0YCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBOZXR3b3JrIERldmljZSBPcGVyYXRvciAoTkRPKSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgYG5kb19pbml0YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXTigJlzIHRoZSBzdGFuZGFyZCB3YXkgd2UncmUgc2V0dGluZyB1cCB0aGUgZm91bmRhdGlvbiBmb3IgSVB2NiB0dW5uZWwgZGV2aWNlcy4gQnV0LCB0aGF0IGNvbm5lY3Rpb24gbWFrZXMgbWUgdGhpbmsuLi4gd2hhdCdzIHRoZSBicm9hZGVyIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGljaCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhZmZlY3RlZCB0byBzZWUgaG93IHRoaXMgaW1wYWN0cyBteSBhcmVhIG9mIGV4cGVydGlzZS5cblxuTXkgY29uY2VybiBpcyB3aGF0J3MgaGFwcGVuaW5nIGluIGBzaXQuY2AuIElzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb2xsb3dpbmcgdGhlIFJGQyBzdGFuZGFyZHM/IFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgSVB2Ni1pbi1JUHY0IHR1bm5lbCBjb2RlIHdpdGggdGhlIGJyb2FkZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNsYXNoZXMgb3IgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvciwgZ2l2ZW4gdGhhdCBgc2l0LmNgIGhhbmRsZXMgYSBkaWZmZXJlbnQgc3BlY2lmaWMgdHlwZSBvZiB0dW5uZWwgdGhhbiB0aGUgbW9yZSBnZW5lcmFsIHNldHVwPyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgZml0IHRvZ2V0aGVyIHRvIGVuc3VyZSBubyB1bmV4cGVjdGVkIHByb2JsZW1zIGFyaXNlLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo1My43NjYxNzgxOThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODg5Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXA2X3R1bm5lbF9iaW5kX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zaXQuYz0xMDY0PXN0YXRpYyBuZXRkZXZfdHhfdCBzaXRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTEwOTQtXFxubmV0L2lwdjYvc2l0LmM6MTA5NTpzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9zaXQuYy0xMDk2LXtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTExMzc9c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsICp0LFxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTE1Ni1cXHRcXHR0LVxcdTAwM2Vmd21hcmsgPSBmd21hcms7XFxubmV0L2lwdjYvc2l0LmM6MTE1NzpcXHRcXHRpcGlwNl90dW5uZWxfYmluZF9kZXYodC1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9zaXQuYy0xMTU4LVxcdH1cXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTE0NDM9c3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTQ1MC1cXG5uZXQvaXB2Ni9zaXQuYzoxNDUxOlxcdGlwaXA2X3R1bm5lbF9iaW5kX2RldihkZXYpO1xcbm5ldC9pcHY2L3NpdC5jLTE0NTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjUzLjgwODA3Mzc0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAzNjEzODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUCBUdW5uZWwgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYGlwaXA2X3R1bm5lbF9pbml0YCBpcyBnb2luZyB0byBiZSBhbmFsb2dvdXMgdG8gYG5kb19pbml0YC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoYXQgbGluayBpbiBteSBoZWFkLiBOb3csIGxldCdzIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIGFuZCBmaW5kIHRoZSBgbmV3bGlua2AgZnVuY3Rpb25zIGZvciBhbGwgdGhlc2UgdHVubmVscy4gSSd2ZSBnb3QgYSBnb29kIG1lbnRhbCBtYXAgb2YgdGhpcywgc28gbGV0J3Mgc3RhcnQgam90dGluZyB0aGVtIGRvd24gZm9yIGVhY2ggZmlsZS5cblxuRm9yIHRoZSBJUHY0IHR1bm5lbHMgaW4gYGlwX3R1bm5lbC5jYCwgaXQncyBkZWZpbml0ZWx5IGBpcF90dW5uZWxfbmV3bGlua2AuIFRoZW4sIGRpZ2dpbmcgaW50byBJUHY2IHR1bm5lbHMsIGluIGBpcDZfZ3JlLmNgLCBJJ20gc2VlaW5nIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZlcnNwYW5fbmV3bGlua2AuIE92ZXIgaW4gYGlwNl90dW5uZWwuY2AsIHRoZSBmdW5jdGlvbiBpcyBgaXA2X3RubF9uZXdsaW5rYC4gQW5kIGZvciBgc2l0LmNgPyBBaCwgeWVzLCBpdCdzIGBpcGlwNl9uZXdsaW5rYC5cblxuUmlnaHQsIGxldCdzIG5vdyBkcmlsbCBkb3duIGFuZCBleGFtaW5lIGBpcF90dW5uZWxfbmV3bGlua2Agd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR1bm5lbHMgYXJlIHRydWx5IHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6NTcuOTExNjkwNTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc3OTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6NTcuOTU1NDc0ODE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk1Njc5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcF90dW5uZWxfbmV3bGlua2AgRXhwb3J0KipcblxuQWxyaWdodCwgc28gYGlwX3R1bm5lbF9uZXdsaW5rYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc291cmNlIGNvZGUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBhcyBpcyBhbHdheXMgdGhlIGNhc2Ugd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsLWxldmVsIGZ1bmN0aW9ucy4gVGhlIGZpcnN0LCBhbmQgbW9zdCBjcml0aWNhbCwgcXVlc3Rpb24gaXM6ICoqd2hvJ3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIGZ1bmN0aW9uPyoqIEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBpbXBhY3QsIGFuZCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgYSBrZXkgZmlyc3Qgc3RlcCBpbiBhc3Nlc3NpbmcgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgd2hhdCdzIHJlbHlpbmcgb24gYGlwX3R1bm5lbF9uZXdsaW5rYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBiZWluZyB1c2VkLiBJcyB0aGlzIGZ1bmN0aW9uIGNyaXRpY2FsLCBpcyBpdCByYXJlbHkgdXNlZCwgb3IgaXMgaXQgYSBmb3VuZGF0aW9uPyBUaGlzIHJlcXVpcmVzIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIGJyb2FkZXIgY29kZSBiYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjAxLjA5NTA0NTM2NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwOTExODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTE0MDk9c3RhdGljIGludCBpcGdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI1LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQyNjpcXHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVxcdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcXHUwMDI2cCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI3LVxcdFxcdFxcdFxcdCBmd21hcmspO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ2LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ0NzpcXHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVxcdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcXHUwMDI2cCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ4LVxcdFxcdFxcdFxcdCBmd21hcmspO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTk1OmludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5Ni1cXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyNDc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDgtXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz01Nzc9c3RhdGljIGludCB2dGlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNTg2LVxcdHZ0aV9uZXRsaW5rX3Bhcm1zKGRhdGEsIFxcdTAwMjZwYXJtcywgXFx1MDAyNmZ3bWFyayk7XFxubmV0L2lwdjQvaXBfdnRpLmM6NTg3OlxcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXFx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsXFxubmV0L2lwdjQvaXBfdnRpLmMtNTg4LVxcdFxcdFxcdFxcdCBcXHUwMDI2cGFybXMsIGZ3bWFyayk7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NDY0PXN0YXRpYyBpbnQgaXBpcF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDgyLVxcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcXHUwMDI2cCwgXFx1MDAyNnQtXFx1MDAzZWNvbGxlY3RfbWQsIFxcdTAwMjZmd21hcmspO1xcbm5ldC9pcHY0L2lwaXAuYzo0ODM6XFx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBpcC5jLTQ4NC1cXHRcXHRcXHRcXHQgZndtYXJrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MDEuMTM5MTQyMzYzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDI3MTAxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cyBhbmQgd2hlcmUgdG8gZ28gbmV4dCwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIFR1bm5lbCBJbnRlcmZhY2UgQ3JlYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIG15IG1lbnRhbCBjaGVja2xpc3Qgbm93IHNheXMgdG8gZm9jdXMgb24gdGhlIGludGVyZmFjZSBjcmVhdGlvbiBlbnRyeSBwb2ludHMuIEknbSB0aGlua2luZywgYGlwZ3JlX25ld2xpbmtgLCBgZXJzcGFuX25ld2xpbmtgLCBgdnRpX25ld2xpbmtgLCBhbmQgYGlwaXBfbmV3bGlua2AgYXJlIHRoZSBpbml0aWFsIHN1c3BlY3RzIGZvciBHUkUsIEVSU1BBTiwgVlRJIGFuZCBJUElQIHR1bm5lbCBpbnRlcmZhY2VzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHNvbWV0aGluZyBzaW1pbGFyOyBuYW1lbHksIHNpbmNlIElQdjYgdHVubmVsaW5nIGlzIG9mdGVuIGJ1aWx0IG9uIHNpbWlsYXIgcHJpbmNpcGxlcywgSSdsbCBob25lIGluIG9uIGBpcDZfdG5sX25ld2xpbmtgLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIGZpbGUuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgc2ltaWxhcml0aWVzLCBhbmQgdXN1YWxseSBwcm92aWRlcyBhIGNsZWFuIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBuZXcgbGluayB0eXBlcyBhcmUgc2V0IHVwIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjA0LjU4MTg1NTEyNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxNzk0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjAyND1zdGF0aWMgdm9pZCBpcDZfdG5sX25ldGxpbmtfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwNjItXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIwNjM6c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjA2NC1cXHRcXHRcXHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIyNjE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjctXFx0LnZhbGlkYXRlXFx0PSBpcDZfdG5sX3ZhbGlkYXRlLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY4OlxcdC5uZXdsaW5rXFx0PSBpcDZfdG5sX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjktXFx0LmNoYW5nZWxpbmtcXHQ9IGlwNl90bmxfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MDQuNjM1MDQyNDIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDAyNzU5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQdjYgVHVubmVsIEludGVyZmFjZSBDcmVhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZywgYW5kIG15IG1pbmQgaGFzIHpvbmVkIGluIG9uIGBpcGlwNl9uZXdsaW5rYCB3aXRoaW4gYG5ldC9pcHY2L3NpdC5jYC4gVGhhdCBmdW5jdGlvbi4gSXQncyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBuZXcgSVB2Ni1pbi1JUHY0IHR1bm5lbCBpbnRlcmZhY2VzLCB0aGUgU0lUIChTaW1wbGUgSW50ZXJuZXQgVHJhbnNpdGlvbikgdHVubmVscy4gSeKAmW0gemVyb2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBiZWNhdXNl4oCmIHdlbGwsIEknbSBwcm9iYWJseSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHVubmVsIGludGVyZmFjZSBicmluZy11cCwgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBJUHY2IG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTWF5YmUgdGhlcmUncyBhIHNwZWNpZmljIGlzc3VlIG1hbmlmZXN0aW5nLCBsaWtlIGEgZmFpbHVyZSB0byBhc3NpZ24gYWRkcmVzc2VzLCByb3V0aW5nIHByb2JsZW1zIHNwZWNpZmljIHRvIHRoZXNlIHR1bm5lbHMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgSSdtIHRyeWluZyB0byBkaWFnbm9zZSBhdCB0aGUga2VybmVsIGxldmVsLiBLbm93aW5nIHRoZSBjb2RlYmFzZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlIGVycm9yIHBhdGhzIHdlbGwtZGVmaW5lZD8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBjb25mbGljdHMgd2l0aCBleGlzdGluZyBpbnRlcmZhY2VzLCBvciBtaXNjb25maWd1cmVkIHBhcmFtZXRlcnM/XG4qICAgKipQYXJhbWV0ZXIgVmFsaWRhdGlvbjoqKiBIb3cgcm9idXN0IGlzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSB0dW5uZWwncyBwYXJhbWV0ZXJzPyBJcyB0aGVyZSBhIHJpc2sgb2YgY3JlYXRpbmcgaW5jb25zaXN0ZW50IHR1bm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGludHJvZHVjZSByb3V0aW5nIGxvb3BzIG9yIG90aGVyIG9kZCBiZWhhdmlvcnM/IElzIHRoZXJlIGEgcmlzayBvZiBsZWFraW5nIHJlc291cmNlcz9cbiogICAqKkNvbmN1cnJlbmN5OioqIEdpdmVuIHRoZSBtdWx0aS10aHJlYWRlZCBuYXR1cmUgb2YgdGhlIGtlcm5lbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGludGVyZmFjZSBjcmVhdGlvbiBvciBjb25maWd1cmF0aW9uIHN0ZXBzLiBBcmUgcHJvcGVyIGxvY2tzIGhlbGQgd2hlbiBuZWNlc3Nhcnk/XG4qICAgKipJbnRlcmFjdGlvbiB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtczoqKiBIb3cgZG9lcyBgaXBpcDZfbmV3bGlua2AgaW50ZXJhY3Qgd2l0aCB0aGUgcm91dGluZyB0YWJsZT8gRG9lcyBpdCByZWdpc3RlciBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHJvdXRlIGNvbmZsaWN0cyBvciBibGFja2hvbGluZz9cbiogICAqKlNlY3VyaXR5OioqIEFyZSB0aGVyZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBoZXJlPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIG1pc3VzZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgc2VjdXJpdHkgY29uc3RyYWludHMgaW1wb3NlZD9cblxuVGhpcyBwb2ludHMgbWUgaW4gdGhlIGRpcmVjdGlvbiBvZiBleGFtaW5pbmcgdGhlIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiBjb2RlLCBpbmNsdWRpbmcgaG93IHRoZSB0dW5uZWwncyBlbmRwb2ludHMgYXJlIHNldCB1cCwgaG93IHRoZSBNVFUgaXMgbmVnb3RpYXRlZCwgYW5kIGhvdyBJUHY2IGFkZHJlc3NpbmcgaXMgYXNzaWduZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MDkuNjc1MzIxMTA5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM1ODczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwNl9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NpdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NpdC5jPTE1MTQ9c3RhdGljIGJvb2wgaXBpcDZfbmV0bGlua182cmRfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTU0OC1cXG5uZXQvaXB2Ni9zaXQuYzoxNTQ5OnN0YXRpYyBpbnQgaXBpcDZfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L3NpdC5jLTE1NTAtXFx0XFx0XFx0IHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNzcxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBzaXRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE3NzctXFx0LnZhbGlkYXRlXFx0PSBpcGlwNl92YWxpZGF0ZSxcXG5uZXQvaXB2Ni9zaXQuYzoxNzc4OlxcdC5uZXdsaW5rXFx0PSBpcGlwNl9uZXdsaW5rLFxcbm5ldC9pcHY2L3NpdC5jLTE3NzktXFx0LmNoYW5nZWxpbmtcXHQ9IGlwaXA2X2NoYW5nZWxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjA5LjcxOTY4NDU5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA0OTEzNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipUdW5uZWwgSGVhZHJvb20gQWRqdXN0bWVudHMgLSBTY29wZSBhbmQgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgY29kZSBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBoYW5kbGUgdGhlIGNoYW5nZXMgdG8gdHVubmVsIGhlYWRyb29tLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGVkZ2UgY2FzZXMuIEkndmUgaWRlbnRpZmllZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMg4oCTIHRoZSBmdW5jdGlvbnMgd2hlcmUgbmV3IHR1bm5lbCBsaW5rcyBhcmUgY3JlYXRlZCDigJMgYW5kIHRoZXNlIGFyZTogYGlwZ3JlX25ld2xpbmtgLCBgZXJzcGFuX25ld2xpbmtgLCBgdnRpX25ld2xpbmtgLCBgaXBpcF9uZXdsaW5rYCwgYGlwNmdyZV9uZXdsaW5rYCwgYGlwNmVyc3Bhbl9uZXdsaW5rYCwgYGlwNl90bmxfbmV3bGlua2AsIGFuZCBgaXBpcDZfbmV3bGlua2AuIFRoZXNlIHNlZW0gdG8gY292ZXIgdGhlIHN0YW5kYXJkIHR1bm5lbCB0eXBlcywgYW5kIHRoZXknbGwgbGlrZWx5IGJlIHRoZSBmb2N1cyBvZiB0aGUgaW5pdGlhbCBhZGp1c3RtZW50cy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaGF2ZSBJIGNhcHR1cmVkIGFsbCB0aGUgcmVsZXZhbnQgbGluayBjcmVhdGlvbnM/IEkgbmVlZCB0byB0aGluayBpZiB0aGVyZSBhcmUgb3RoZXIgcGxhY2VzIHdoZXJlIHR1bm5lbHMgYXJlIGNvbmZpZ3VyZWQgKHJhdGhlciB0aGFuIGNyZWF0ZWQpLCB3aGljaCBtaWdodCBhbHNvIGJlIGFmZmVjdGVkLlxuXG5Ob3csIHJlZ2FyZGluZyBgbmV0a2l0LmNgLCBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBhIHNpbWlsYXIgYG5ldGtpdF9uZXdfbGlua2AgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVxdWl2YWxlbnQgdGhhdCB3b3VsZCBhbHNvIG5lZWQgdG8gYmUgbW9kaWZpZWQuIEl0J3MgbGlrZWx5IHRoYXQgYSBjb21tb24gaW50ZXJmYWNlIHdvdWxkIGJlIHVzZWQgdGhlcmUgdG8gYWJzdHJhY3QgdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGFuZCBlbnN1cmUgY29uc2lzdGVuY3kuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZSBpbiB0aGF0IG1vZHVsZSBhbmQgbWFrZSBzdXJlIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBtb2RpZmljYXRpb25zLiBJIG11c3QgZW5zdXJlIHRoaXMgYW5kIG90aGVyIHBvdGVudGlhbCBjYWxscyBhcmUgaWRlbnRpZmllZCwgb3IgdGhlIGNoYW5nZXMgd29uJ3QgYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoxMy45MjQ2MDI5MzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDU1ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGtpdF9uZXdfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz01MTE9c3RhdGljIGludCBuZXRraXRfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtNTI0LVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjUyNTpzdGF0aWMgaW50IG5ldGtpdF9uZXdfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTUyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM9MTI1OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbmV0a2l0X2xpbmtfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTI2My1cXHQuc2V0dXBcXHRcXHQ9IG5ldGtpdF9zZXR1cCxcXG5kcml2ZXJzL25ldC9uZXRraXQuYzoxMjY0OlxcdC5uZXdsaW5rXFx0PSBuZXRraXRfbmV3X2xpbmssXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTI2NS1cXHQuZGVsbGlua1xcdD0gbmV0a2l0X2RlbF9saW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoxMy45NzI2NzA1MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM5NzY5MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBUdW5uZWxpbmcgQ29kZSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhlIGNoYW5nZSByZWZlcmVuY2VzIGBuZXRraXRfbmV3X2xpbmtgLCBzbyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgY29kZSB0b3VjaGVzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gLCBzbyBJIHNob3VsZCBwcm9iYWJseSBsb2NhdGUgdGhhdCBkZWZpbml0aW9uIGluIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBBaGEsIGl0J3MgYSBzdGF0aWMgaW5saW5lLCBnb3QgaXQuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gZXhwYW5kIGJleW9uZCBqdXN0IGBuZXRraXRfbmV3X2xpbmtgLiBHaXZlbiB0aGlzIGFuZCB0aGUgaW5saW5lIG5hdHVyZSBvZiB0aGF0IGZ1bmN0aW9uLCBJIG5lZWQgdG8gaWRlbnRpZnkgKmFsbCogdGhlIG5ld2xpbmstcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGFmZmVjdGVkLiBUaGF0IHdvdWxkIGJlIGBpcGdyZV9uZXdsaW5rYCwgYGVyc3Bhbl9uZXdsaW5rYCwgYHZ0aV9uZXdsaW5rYCwgYGlwaXBfbmV3bGlua2AsIGBpcDZncmVfbmV3bGlua2AsIGBpcDZlcnNwYW5fbmV3bGlua2AsIGBpcDZfdG5sX25ld2xpbmtgLCBhbmQgYGlwaXA2X25ld2xpbmtgLiBPZiBjb3Vyc2UsIGxldCdzIGluY2x1ZGUgYG5ldGtpdF9uZXdfbGlua2AgaW4gdGhpcyBsaXN0LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBpcF90dW5uZWxfYmluZF9kZXZgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXBfdHVubmVsX25ld2xpbmtgLCBgaXBfdHVubmVsX3VwZGF0ZWAsIGFuZCBgaXBfdHVubmVsX2luaXRfbmV0YC4gYGlwX3R1bm5lbF91cGRhdGVgIGlzIGFsc28gY2FsbGVkIGZyb20gYGlwX3R1bm5lbF9jaGFuZ2VsaW5rYC4gVGhhdCBzaWduaWZpY2FudGx5IGJyb2FkZW5zIHRoZSBzY29wZSEgU28gSSBuZWVkIHRvIGNvbnNpZGVyIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYHZ0aV9jaGFuZ2VsaW5rYCwgYGlwaXBfY2hhbmdlbGlua2AsIGBpcDZncmVfY2hhbmdlbGlua2AsIGBpcDZlcnNwYW5fY2hhbmdlbGlua2AsIGBpcDZfdG5sX2NoYW5nZWxpbmtgLCBgaXBpcDZfY2hhbmdlbGlua2AsIGFuZCBmaW5hbGx5LCB0aGUgcG90ZW50aWFsIGBuZXRraXRfY2hhbmdlX2xpbmtgIGlmIGl0IGV4aXN0cy4gVGltZSB0byB2ZXJpZnkgaWYgdGhhdCBleGlzdHMsIG9mIGNvdXJzZS4gVGhpcyBicm9hZGVyIGludmVzdGlnYXRpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoxOS4yMTI0NDIwNTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg3Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGtpdF9jaGFuZ2VfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz0xMDY4PXN0YXRpYyB2b2lkIG5ldGtpdF9kZWxfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTA4OS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYzoxMDkwOnN0YXRpYyBpbnQgbmV0a2l0X2NoYW5nZV9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTA5MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz0xMjU5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBuZXRraXRfbGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy0xMjY1LVxcdC5kZWxsaW5rXFx0PSBuZXRraXRfZGVsX2xpbmssXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MTI2NjpcXHQuY2hhbmdlbGlua1xcdD0gbmV0a2l0X2NoYW5nZV9saW5rLFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTEyNjctXFx0LmdldF9saW5rX25ldFxcdD0gbmV0a2l0X2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MTkuMjU2NzM0ODkxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDkzMjI2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEludGVyZmFjZSBDaGFuZ2UqKlxuXG5SaWdodCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AuIFRoYXQncyB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyB3ZSBzaG91bGQgemVybyBpbiBvbiBob3cgdGhlIHR1bm5lbGluZyBhc3BlY3RzIG9mIGEgbGluayBjaGFuZ2UgYXJlIGhhbmRsZWQuIFNvLCB0aGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIGFuZCBpdCBsaXZlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsLmNgLiBMZXQncyBzZWUgaG93IHRoYXQncyBpbXBsZW1lbnRlZC4gR290dGEgdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIHR1bm5lbCBsaW5rJ3MgY2hhcmFjdGVyaXN0aWNzIGFyZSBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoyMi40NjYwNjAzMThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjI5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyNDc9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDgtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0OTppbnQgaXBfdHVubmVsX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjUwLVxcdFxcdFxcdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwgX191MzIgZndtYXJrKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI4NC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI4NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfY2hhbmdlbGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MjIuNTExMjk3MDA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MTAwNjg0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgR1JFIHR1bm5lbHMgYXJlIGhhbmRsZWQgaW4gdGhlIElQdjQgc3RhY2suIEknbSBmb2N1c2luZyBvbiB0aGUgYGlwZ3JlX2NoYW5nZWxpbmtgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIHdoZW4gdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhIEdSRSBsaW5rIGNoYW5nZS4gSXQncyB0aGUga2V5IGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyB0byBtb2RpZmljYXRpb25zIG9mIGEgR1JFIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBldmVudHMgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCBvcGVyYXRpb25zIGl0IGlzIHBlcmZvcm1pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MzEuMjIxMzY4NDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDI5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDUwLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTE6c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ1Mi1cXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTY3ND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2ODEtXFx0Lm5ld2xpbmtcXHQ9IGlwZ3JlX25ld2xpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY4MjpcXHQuY2hhbmdlbGlua1xcdD0gaXBncmVfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjgzLVxcdC5kZWxsaW5rXFx0PSBpcF90dW5uZWxfZGVsbGluayxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE2ODk9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2OTYtXFx0Lm5ld2xpbmtcXHQ9IGlwZ3JlX25ld2xpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY5NzpcXHQuY2hhbmdlbGlua1xcdD0gaXBncmVfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk4LVxcdC5kZWxsaW5rXFx0PSBpcF90dW5uZWxfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MzEuMjc1NDA5Nzk3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODc5ODg3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgZXJzcGFuX2NoYW5nZWxpbmtgIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXJzcGFuX2NoYW5nZWxpbmtgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIEVSU1BBTiAoRW5jYXBzdWxhdGVkIFJlbW90ZSBTUEFOKSBhcmNoaXRlY3R1cmUuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBjb3JlIHB1cnBvc2UgaXMgd2l0aGluIHRoZSBkYXRhIHBsYW5lIG1hbmFnZW1lbnQuIElzIGl0IHByaW1hcmlseSBmb2N1c2VkIG9uIGNvbmZpZ3VyYXRpb24gdXBkYXRlcywgaGFuZGxpbmcgbGluayBzdGF0ZSBjaGFuZ2VzLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBNeSBpbml0aWFsIHN1c3BpY2lvbiBpcyB0aGF0IGl04oCZcyBpbnZvbHZlZCBpbiBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIEVSU1BBTiBjb25maWd1cmF0aW9uIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgbmV0d29yayB0b3BvbG9neSBvciBsaW5rIHN0YXR1cy5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcy4gRG9lcyBpdCBoYW5kbGUgbGluayB1cC9kb3duIGV2ZW50cz8gIEhvdyBkb2VzIGl0IGludGVyZmFjZSB3aXRoIHRoZSBjb250cm9sIHBsYW5lLCBpZiBhdCBhbGw/ICBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBzdGFuZGFsb25lIG1vZHVsZSwgb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbXBvbmVudHMuIEknbSB3b25kZXJpbmcgaWYgaXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgb3Igc3RhdGUgdmFyaWFibGVzIHRvIG1hbmFnZSBFUlNQQU4gY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IHRoZXNlIGFyZS4gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVudCBhY2Nlc3NlcyB0byBzaGFyZWQgcmVzb3VyY2VzLCBjb25zaWRlcmluZyB0aGUgaW5oZXJlbnQgZHluYW1pYyBuYXR1cmUgb2YgbmV0d29yayBsaW5rcz9cblxuV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgbG9nZ2luZyBvciBlcnJvciByZXBvcnRpbmcgd2hlbiBpdCBlbmNvdW50ZXJzIHByb2JsZW1zPyAgU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgcm9idXN0IG1lY2hhbmlzbXMgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmVzIGR1cmluZyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgb3IgbGluayBzdGF0ZSB0cmFuc2l0aW9ucz8gVGhhdCdzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyB1bmludGVycnVwdGVkIG5ldHdvcmsgdmlzaWJpbGl0eS4gSSdtIGFsc28gY2hlY2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zOyBpcyB0aGVyZSBhbnkgcmlzayBvZiB1bmF1dGhvcml6ZWQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBvciBkb2VzIHRoZSBmdW5jdGlvbiBwcm9wZXJseSB2YWxpZGF0ZSBpbnB1dCBhbmQgcGVybWlzc2lvbnM/XG5cbkZpbmFsbHksIGFuZCB0aGlzIGlzIGNydWNpYWwsIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QuICBEb2VzIGl0IGludHJvZHVjZSBhbnkgc2lnbmlmaWNhbnQgbGF0ZW5jeSBvciByZXNvdXJjZSBvdmVyaGVhZCwgYW5kIGlmIHNvLCBob3cgY2FuIGl0IGJlIG9wdGltaXplZD8gIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBwYXJ0aWN1bGFybHkgaWYgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJlcXVlbnRseSBkdWUgdG8gbGluayBmbGFwcGluZyBvciByYXBpZCBjaGFuZ2VzIGluIHRoZSBuZXR3b3JrLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGZ1bGx5IGFwcHJlY2lhdGUgaXRzIGVmZmljaWVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODozNS42NjM0MDE5MDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjY5NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyc3Bhbl9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTE0NTE9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDgyLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0ODM6c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzA0PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBlcnNwYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MTEtXFx0Lm5ld2xpbmtcXHQ9IGVyc3Bhbl9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MTI6XFx0LmNoYW5nZWxpbmtcXHQ9IGVyc3Bhbl9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MTMtXFx0LmRlbGxpbmtcXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODozNS43MDkwNzc5N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkxMjMxMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOlxuXG4qKlZUSSBDaGFuZ2VsaW5rIENvbmNlcm5zKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVmlydHVhbCBUdW5uZWwgSW50ZXJmYWNlIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYG5ldC9pcHY0L2lwX3Z0aS5jYCBmaWxlLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGUgYHZ0aV9jaGFuZ2VsaW5rYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBoYXMgbGlrZWx5IGJlZW4gdGhlIGZvY3VzIG9mIG15IGF0dGVudGlvbiBkdWUgdG8gY2VydGFpbiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgb24gd2hhdCBpdHMgcHVycG9zZSBpcy4gV2hhdCBkYXRhIGRvZXMgaXQgbmVlZCB0byBhbHRlcj8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgdGhhdCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3Igd2hlbiBsaW5raW5nIGEgVlRJIHRvIG90aGVyIGludGVyZmFjZXMuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZSwgSSBjYW4ndCBsZWF2ZSB0aGlzIGFsb25lIHVudGlsIEknbSBzdXJlIEkgaGF2ZSBpdCBhbGwgc29ydGVkIGluIG15IGhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MzguOTAwMzExNzM3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMzMTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2dGlfY2hhbmdlbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF92dGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF92dGkuYz01Nzc9c3RhdGljIGludCB2dGlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNTkwLVxcbm5ldC9pcHY0L2lwX3Z0aS5jOjU5MTpzdGF0aWMgaW50IHZ0aV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfdnRpLmMtNTkyLVxcdFxcdFxcdCAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmM9NjQ5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB2dGlfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTY1Ni1cXHQubmV3bGlua1xcdD0gdnRpX25ld2xpbmssXFxubmV0L2lwdjQvaXBfdnRpLmM6NjU3OlxcdC5jaGFuZ2VsaW5rXFx0PSB2dGlfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcF92dGkuYy02NTgtXFx0LmRlbGxpbmsgICAgICAgID0gaXBfdHVubmVsX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjM4Ljk0MzY0OTgwNVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNDQ1MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gbmV0d29yayBjb2RlLCBzcGVjaWZpY2FsbHkgSVB2NCB0dW5uZWxzLiBNeSBtaW5kIGhhcyBqdXN0IGp1bXBlZCB0byBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgaXBpcF9jaGFuZ2VsaW5rYCB3aXRoaW4gYG5ldC9pcHY0L2lwaXAuY2AuIFRoaXMgc3VnZ2VzdHMgSSdtIGVpdGhlciBkZWJ1Z2dpbmcsIHJldmlld2luZywgb3IgcGVyaGFwcyBleHRlbmRpbmcgdGhlIElQdjQtaW4tSVB2NCAoSVBJUCkgdHVubmVsIGZ1bmN0aW9uYWxpdHkuIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgdHVubmVscyBhcmUgY29uZmlndXJlZCBvciBtb2RpZmllZCBhdCBhIGxpbmsgbGV2ZWwuIEkgbWlnaHQgYmUgbG9va2luZyBhdCBob3cgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBpbXBhY3QgdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLCBvciBjb252ZXJzZWx5LCBob3cgYWRqdXN0bWVudHMgdG8gdGhlIElQSVAgdHVubmVsIGl0c2VsZiBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBleGFtaW5pbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gbGluayBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlcyBmb3IgdGhlIHR1bm5lbC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIHR1bm5lbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NDIuMDI1MDk4MDE5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBpcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00ODYtXFxubmV0L2lwdjQvaXBpcC5jOjQ4NzpzdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwaXAuYy00ODgtXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTYwMT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBpcF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTYwOC1cXHQubmV3bGlua1xcdD0gaXBpcF9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwaXAuYzo2MDk6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwaXBfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcGlwLmMtNjEwLVxcdC5kZWxsaW5rXFx0PSBpcF90dW5uZWxfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NDIuMDY5MjY3ODI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzY2NTk2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSVB2NiBHUkUgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgSVB2NiBHUkUgc2V0dXAuLi4gc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBhYm91dCB3aGVyZSB0aGUgbGluayBjaGFuZ2VzIGhhcHBlbi4gSSBpbW1lZGlhdGVseSB0aGluayBvZiBgaXA2Z3JlX2NoYW5nZWxpbmtgIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aG9zZSBldmVudHMsIGFuZCBpdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgbG9naWMgdG8gdXBkYXRlIG9yIGFkanVzdCBhbnl0aGluZyByZWxhdGVkIHRvIElQdjYgR1JFIHR1bm5lbHMgd2hlbiB0aGUgdW5kZXJseWluZyBsaW5rIHN0YXRlIGNoYW5nZXMuIEknbGwgbmVlZCB0byByZXZpc2l0IHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODo0NC44MDU5MzEzODFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjAwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9MjAxMD1zdGF0aWMgc3RydWN0IGlwNl90bmwgKlxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDExOmlwNmdyZV9jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDEyLVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcF9wLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNDMtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNDQ6c3RhdGljIGludCBpcDZncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDQ1LVxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTQtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNTU6XFx0dCA9IGlwNmdyZV9jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIHRiLCBkYXRhLCBcXHUwMDI2cCwgZXh0YWNrKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1Ni1cXHRpZiAoSVNfRVJSKHQpKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjY9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNzctXFx0aWduID0gbmV0X2dlbmVyaWModC1cXHUwMDNlbmV0LCBpcDZncmVfbmV0X2lkKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI3ODpcXHR0ID0gaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgdGIsIGRhdGEsIFxcdTAwMjZwLCBleHRhY2spO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjc5LVxcdGlmIChJU19FUlIodCkpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI5MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5OC1cXHQubmV3bGlua1xcdD0gaXA2Z3JlX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyOTk6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzAwLVxcdC5kZWxsaW5rXFx0PSBpcDZncmVfZGVsbGluayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMzA2PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTMtXFx0Lm5ld2xpbmtcXHQ9IGlwNmdyZV9uZXdsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMzE0OlxcdC5jaGFuZ2VsaW5rXFx0PSBpcDZncmVfY2hhbmdlbGluayxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxNS1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NDQuODUwMTM3ODU5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjA4NTY4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBpcDZlcnNwYW5fY2hhbmdlbGlua2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYGlwNmVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb246IHdoYXQgc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgSVAgdHVubmVsIGFyZSBiZWluZyBtb2RpZmllZD8gSXMgaXQgdGhlIE1UVSwgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBlbmNhcHN1bGF0aW9uIHR5cGUsIHRoZSBmbG93IGxhYmVscywgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIFwiY2hhbmdlXCIgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dW5uZWwgdHlwZSDigJMgbGlrZWx5IGBzdHJ1Y3QgZXJzcGFuX2RldmAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFuZCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhvc2Ugc3RydWN0dXJlcyB0byBhbnRpY2lwYXRlIHdoYXQgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC5cblxuVGhlIFwiY2hhbmdlbGlua1wiIGFzcGVjdCBpbXBsaWVzIGEgcmVjb25maWd1cmF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIGR5bmFtaWMgY2hhbmdlcyBiYXNlZCBvbiBuZXR3b3JrIGV2ZW50cywgdXNlci1pbml0aWF0ZWQgYWRqdXN0bWVudHMsIG9yIHBlcmhhcHMgYSBjb25zZXF1ZW5jZSBvZiByb3V0aW5nIHByb3RvY29sIHVwZGF0ZXM/IFRoZSBjb250ZXh0IGlzIGNyaXRpY2FsIGhlcmUuIElzIHRoaXMgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrIGRpcmVjdGx5LCBvciBpcyBpdCBpbnZva2VkIGJ5IGEgdXNlci1zcGFjZSB1dGlsaXR5IGxpa2UgYGlwYD8gVGhlIHNvdXJjZSBvZiB0aGUgY2FsbCBpcyByZWxldmFudCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMuXG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgcG90ZW50aWFsIGVycm9yIHBhdGhzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHJlcXVlc3RlZCBjaGFuZ2UgaXMgaW52YWxpZCwgb3IgY29uZmxpY3RzIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIHJlc291cmNlIGFsbG9jYXRpb24gaXNzdWVzIGludm9sdmVkLCBsaWtlIGluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBmbG93IGxhYmVscyBvciBNVFUgY2hhbmdlcyB0aGF0IHdvdWxkIGJyZWFrIGV4aXN0aW5nIGNvbm5lY3Rpb25zPyBFcnJvciBoYW5kbGluZyBuZWVkcyB0byBiZSByb2J1c3QsIGFuZCBJJ2xsIHdhbnQgdG8gcmV2aWV3IHRoZSBjb2RlIGZvciBwcm9wZXIgY2hlY2tzIGFuZCBlcnJvciByZXBvcnRpbmcuIEFsc28sIHdoYXQga2luZCBvZiBsb2NraW5nIGlzIHVzZWQgYXJvdW5kIHRoaXMgZnVuY3Rpb24sIGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBvbmUga2VybmVsIGNvbnRleHQ/XG5cbkkgYWxzbyB3b25kZXIgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGJsb2NraW5nIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGludHJvZHVjZSBsYXRlbmN5LCBvciBkb2VzIGl0IGF0dGVtcHQgdG8gbWluaW1pemUgZGlzcnVwdGlvbiB3aXRoIGF0b21pYyB1cGRhdGVzIG9yIGRlZmVycmVkIGNoYW5nZXM/IElmIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmUtZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwsIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIG92ZXJoZWFkIG9mIHRoZSB0dW5uZWwgc2V0dXAsIGluY2x1ZGluZyB0aGUgZXhjaGFuZ2Ugb2YgY29udHJvbCBwYWNrZXRzIGFuZCByZS1lc3RhYmxpc2htZW50IG9mIGFueSBhc3NvY2lhdGVkIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBvciB0dW5uZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjQ5LjIxMDk5OTc4NloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMDQ5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0yMjU4PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI2NS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI2NjpzdGF0aWMgaW50IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNjctXFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMjA9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmVyc3Bhbl90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMyNy1cXHQubmV3bGlua1xcdD0gaXA2ZXJzcGFuX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMjg6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzI5LVxcdC5nZXRfc2l6ZVxcdD0gaXA2Z3JlX2dldF9zaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODo0OS4yNTYwMTE1OTNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NDA1NzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzpcblxuKipXb3JraW5nIHdpdGggSVB2NiBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGRpdmluZyBpbnRvIHRoZSBgaXA2X3RubF9jaGFuZ2VsaW5rYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoYXQgZnVuY3Rpb24gaXMga2V5IGZvciBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhbiBJUHY2IHR1bm5lbCBpbnRlcmZhY2UsIGFuZCBhcyBhIHJlc3VsdCBJIHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggbGluayBjaGFuZ2VzLiBJJ20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhvdyBpdCBoYW5kbGVzIGNoYW5nZXMgaW4gTVRVLCBhZGRyZXNzIGFzc2lnbm1lbnQsIG9yIG90aGVyIHJlbGV2YW50IHBhcmFtZXRlcnMgZm9yIHR1bm5lbCBpbnRlcmZhY2VzLiBJIGFsc28gd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgc3VjaCBhcyB0aGUgcm91dGluZyB0YWJsZSB1cGRhdGVzIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvdG9jb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjUyLjIxMDA3MjM1NVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MjExNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2Mz1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDQ6c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjI2OC1cXHQubmV3bGlua1xcdD0gaXA2X3RubF9uZXdsaW5rLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY5OlxcdC5jaGFuZ2VsaW5rXFx0PSBpcDZfdG5sX2NoYW5nZWxpbmssXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXFx0LmRlbGxpbmtcXHQ9IGlwNl90bmxfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NTIuMjU1NTAyMDAyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTkyNzAyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6XG5cbioqRGlnZ2luZyBpbnRvIElQdjYgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IElQdjYgdHVubmVsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGxpbmsgY2hhbmdlcywgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGlwaXA2X2NoYW5nZWxpbmtgIHdpdGhpbiBgbmV0L2lwdjYvc2l0LmNgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGgsIHNheSwgYSB0dW5uZWwgaW50ZXJmYWNlIG92ZXIgYSBwaHlzaWNhbCBpbnRlcmZhY2UgdGhhdCdzIGdvbmUgZG93biBhbmQgY29tZSBiYWNrIHVwLCBvciB3aG9zZSBjb25maWd1cmF0aW9uIGhhcyBvdGhlcndpc2UgYWx0ZXJlZCwgbGlrZSBhIE1UVSBjaGFuZ2UuIEkga25vdyBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZSBgaXBpcDZfY2hhbmdlbGlua2AgZnVuY3Rpb24gYWZmZWN0cyB0aGUgdHVubmVsJ3Mgc3RhdGUsIHRoZSByb3V0aW5nIHNldHVwLCB0aGUgbmVpZ2hib3IgZGlzY292ZXJ5LCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJlYXMgd2hlbiBhbiB1bmRlcmx5aW5nIGxpbmsgaXMgcmVjb25maWd1cmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMgdGhhdCB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtb2RpZmllcyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEknbSB3b25kZXJpbmcsIGNvdWxkIHRoZXJlIGJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1pc3NlZCB1cGRhdGVzPyBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgd2hlbiBpbnRlcmZhY2VzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBzaXQgZHJpdmVyIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODo1NS42NTQ3NzYyNTdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODU4MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXA2X2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTU0OT1zdGF0aWMgaW50IGlwaXA2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE2MDAtXFxubmV0L2lwdjYvc2l0LmM6MTYwMTpzdGF0aWMgaW50IGlwaXA2X2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvaXB2Ni9zaXQuYy0xNjAyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNzcxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBzaXRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE3NzgtXFx0Lm5ld2xpbmtcXHQ9IGlwaXA2X25ld2xpbmssXFxubmV0L2lwdjYvc2l0LmM6MTc3OTpcXHQuY2hhbmdlbGlua1xcdD0gaXBpcDZfY2hhbmdlbGluayxcXG5uZXQvaXB2Ni9zaXQuYy0xNzgwLVxcdC5nZXRfc2l6ZVxcdD0gaXBpcDZfZ2V0X3NpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjU1LjcwODY0NDE1NFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTYyODEyMzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBhbmQgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHR1bm5lbCBjb25maWd1cmF0aW9uIGFuZCBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkndmUgZ290IGEgcHJldHR5IGdvb2QgZ3Jhc3Agb24gdGhpcyBhbHJlYWR5LCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGAqX25ld2xpbmtgIGFuZCBgKl9jaGFuZ2VsaW5rYCBzeW1ib2xzIGZvciB2YXJpb3VzIHR1bm5lbCB0eXBlczogYG5ldGtpdGAsIGBpcGdyZWAsIGBlcnNwYW5gLCBgdnRpYCwgYGlwaXBgLCBgaXA2Z3JlYCwgYGlwNmVyc3BhbmAsIGBpcDZfdG5sYCwgYW5kIGBpcGlwNmAuIFRoZXNlIGxpa2VseSByZXByZXNlbnQgdGhlIGVudHJ5IHBvaW50cyBmb3IgY3JlYXRpbmcgYW5kIG1vZGlmeWluZyB0aGVzZSB0dW5uZWwgaW50ZXJmYWNlcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgY2FsbCByZWxhdGlvbnNoaXBzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBpcF90dW5uZWxfYmluZF9kZXZgIGZ1bmN0aW9uIHRvIHNlZSBpdHMgdXNhZ2UsIHNpbmNlIGl0IGhhcyBzdWNoIGNsZWFyIGxpbmtzIHRvIGEgbnVtYmVyIG9mIGltcG9ydGFudCBmdW5jdGlvbnM6IGBpcF90dW5uZWxfY3JlYXRlYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBgaXBfdHVubmVsX2luaXRfbmV0YCwgYW5kIGBpcF90dW5uZWxfbmV3bGlua2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgdXNlIHdpdGhpbiBgaXBfdHVubmVsX2luaXRfbmV0YCBtZWFucyBpdCdzIGFsc28gY2FsbGVkIHdoZW4gYSBuZXcgbmV0d29yayBuYW1lc3BhY2UgaXMgY3JlYXRlZCwgd2hpY2ggaXMgY3JpdGljYWwuXG5cbk1vdmluZyBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAgYW5kIG90aGVyIGZ1bmN0aW9ucy4gYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIGdldHMgY2FsbGVkIGZyb20gYGlwNmdyZV90bmxfbGlua19jb25maWdgIGFuZCBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AuIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnYCBpcyBjYWxsZWQgZnJvbSBgaXA2Z3JlX3R1bm5lbF9sb2NhdGVgLCBgaXA2Z3JlX3RubF9jaGFuZ2VgICh3aGljaCBpcywgaW4gdHVybiwgbGlua2VkIHRvIGBpcDZncmVfY2hhbmdlbGlua2ApLCBhbmQgZGlyZWN0bHkgZnJvbSBgaXA2Z3JlX25ld2xpbmtgLiAgYGlwNmVyc3Bhbl90bmxfbGlua19jb25maWdgIGlzIGNhbGxlZCBmcm9tIGBpcDZlcnNwYW5fdG5sX2NoYW5nZWAgYW5kIGBpcDZlcnNwYW5fbmV3bGlua2AuIFRoaXMgaGVscHMgbWUgbWFwIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgb2YgdGhlIDYtb3Zlci02IHR1bm5lbHMuXG5cbkxldCdzIGRyaWxsIGRvd24gZXZlbiBmdXJ0aGVyLiBgaXA2X3RubF9saW5rX2NvbmZpZ2AgaXMgY29ubmVjdGVkIHRvICBgaXA2X3RubF9jaGFuZ2VgICh3aGljaCBpcyBjYWxsZWQgdmlhIHRoZSBpb2N0bCBhbmQgY2hhbmdlIGxpbmsgcGF0aCkgYW5kIGBpcDZfdG5sX2Rldl9pbml0YC4gVGhlIGRldiBpbml0IHBhdGggaXMgZnJvbSB0aGUgbmV3IGxpbmsgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2VgLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuLiBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpcyBjYWxsZWQgZnJvbSBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgYW5kIGBpcGlwNl90dW5uZWxfaW5pdGAuICBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgY29ubmVjdHMgdG8gdGhlIGlvY3RsIGNhbGwsIHdoaWNoIGlzIHZlcnkgY29tbW9uLlxuXG5TaW5jZSB0aGUgaW9jdGxzIGFyZSBjcml0aWNhbCBmb3IgY29udHJvbGxpbmcgdGhlc2UgdHVubmVscywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBJL08gY29udHJvbCBjYWxscy4gIEkgbmVlZCB0byBhZGQgYGlwNmdyZV90dW5uZWxfaW9jdGxgLCBgaXA2X3RubF9pb2N0bGAsIGBpcGlwNl90dW5uZWxfaW9jdGxgLCBhbmQgYGlwX3R1bm5lbF9pb2N0bGAgdG8gdGhlIHJldmlldyBsaXN0LlxuXG5UaW1lIHRvIGhlYWQgaW50byBgbmV0L2lwdjQvaXBfdHVubmVsLmNgIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3R1bm5lbF9pb2N0bGAuIFRoaXMgc2hvdWxkIGdpdmUgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdHVubmVsIGNvbnRyb2wgaW50ZXJmYWNlcyBhY3R1YWxseSBvcGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTowNC4yNzE0NTk3MThaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTg3NDk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjA0LjMxNjA1NzUyNloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIyNDAzMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIElPQ1RMKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaXBfdHVubmVsX2lvY3RsYCBpc24ndCBzaG93aW5nIHVwPyBUaGF0J3MgZGVmaW5pdGVseSB1bmV4cGVjdGVkLiBJJ20gcHJldHR5IHN1cmUgSSd2ZSB1c2VkIHRoYXQgYmVmb3JlLCBvciBhdCBsZWFzdCBzb21ldGhpbmcgc2ltaWxhciBpbiB0aGF0IHNwYWNlLiBMZXQncyBub3QgYXNzdW1lIGFueXRoaW5nOyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgaXMgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gVGhhdCBmaWxlJ3MgdGhlIGhlYXJ0IG9mIElQIHR1bm5lbCBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwsIHNvIGlmIHRoaXMgSU9DVEwgaXMgZG9jdW1lbnRlZCBhbnl3aGVyZSwgb3IsIG1vcmUgaW1wb3J0YW50bHksICppbXBsZW1lbnRlZCogYW55d2hlcmUsIGl0J2xsIGJlIHRoZXJlLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSBpdHMgcHJlc2VuY2UgYW5kIGJlaGF2aW91ci4gSSB3aWxsIGxvb2sgZm9yIGFueSBzaWduIG9mIHRoaXMgZnVuY3Rpb24sIGl0cyB1c2FnZSwgb3IgYW55IHBvdGVudGlhbCByZXBsYWNlbWVudHMsIHRvIGRldGVybWluZSBpZiBJIGFtIGhhdmluZyBhIG1vbWVudCwgb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxOTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTowNy41Mzg0NjM0NjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTIyMTM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MDcuNTgzOTk4MzQ5WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzMxNjI4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQIFR1bm5lbCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVAgdHVubmVsaW5nIHNpdHVhdGlvbiBhbmQgcXVpY2tseSByZWFsaXplIHRoZSBgaXBfdHVubmVsLmNgIG1vZHVsZSBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2luZyBgaW9jdGxgLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgd2hhdCB0aGUgY29udHJvbCBwbGFuZSBpbnRlcmFjdGlvbiBsb29rcyBsaWtlLiBJdCdzIGxpa2VseSB1c2luZyBhIGRpZmZlcmVudCBtZXRob2QgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpdm90IG92ZXIgdG8gYGlwX2dyZS5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBjb250cm9sIHBhdGggb3IgdGhlIGFic3RyYWN0aW9uIHRoYXQgKmRvZXMqIGxldmVyYWdlIGEgbWV0aG9kIGZvciBzZXR0aW5nIHVwIGFuZCBtYW5hZ2luZyB0aGUgR1JFIHR1bm5lbHMgYXQgdGhlIG5ldHdvcmsgbGF5ZXIsIGxpa2VseSBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgc2ltaWxhciBtZWNoYW5pc20uIEknbSBrZWVuIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSBrZXkgbWFuYWdlbWVudCwgVFRMIG92ZXJyaWRlcywgYW5kIHByb3RvY29sIHR5cGUgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MTAuNzU3MTYzMzE3WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxNzEyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjEwLjgwMzM4NjY4NFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAzNzYyNjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkluaXRpYWwgUmVhY3Rpb24gdG8gYGlwaXAuY2AqKlxuXG5Pa2F5LCBgaXBpcC5jYC4uLiB3aGF0J3MgdGhpcyBhYm91dD8gTXkgaW50ZXJuYWwgcmFkYXIgaXMgaW1tZWRpYXRlbHkgcGluZ2luZy4gSSBzZWUgdGhhdCBmaWxlbmFtZSBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyB0dW5uZWxzLCBlbmNhcHN1bGF0aW9uLCBwcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCBJUC1pbi1JUCBvciBhIHNpbWlsYXIgcHJvdG9jb2wuIFRoZSAnYycgZXh0ZW5zaW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgQyBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGZvciBhIG5ldHdvcmsgc3RhY2sgb3IgYSB1dGlsaXR5LiBJcyB0aGlzIGEga2VybmVsIG1vZHVsZSwgYSB1c2VyLXNwYWNlIGRhZW1vbiwgb3IgYSBsaWJyYXJ5PyBUaGUgaW1tZWRpYXRlIGNvbnRleHQgaXMgbWlzc2luZyBidXQgdGhpcyBpcyB3aGVyZSBJJ2Qgc3RhcnQuIE15IG1pbmQganVtcHMgdG8gcG9zc2liaWxpdGllczogaXMgdGhpcyBwYXJ0IG9mIGEgVlBOIGltcGxlbWVudGF0aW9uLCBzb21lIGZvcm0gb2YgbmV0d29yayB2aXJ0dWFsaXphdGlvbiwgb3IgcGVyaGFwcyBhIGNvbXBvbmVudCBvZiBhbiBvdmVybGF5IG5ldHdvcmsgc29sdXRpb24/IERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIEknbSBtb3JlIGN1cmlvdXMgYWJvdXQgaG93IHRoaW5ncyBhcmUgaGFuZGxlZDogSVAgZnJhZ21lbnRhdGlvbiwgaGVhZGVyIG1hbmlwdWxhdGlvbiwgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy4gSSdtIGVhZ2VyIHRvIGdldCB0aGUgZnVsbGVyIHBpY3R1cmUgdG8gYXNzZXNzIGl0cyBxdWFsaXR5IGFuZCBhcHBsaWNhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MTQuOTA3MTUyMTY3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA3NTgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTI4Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTMyNS1cXG5uZXQvaXB2NC9pcGlwLmM6MzI2OnN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxcbm5ldC9pcHY0L2lwaXAuYy0zMjcte1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTM0MT1pcGlwX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzQ0LVxcdFxcdGlmIChwLVxcdTAwM2VpcGgudmVyc2lvbiAhPSA0IHx8XFxubmV0L2lwdjQvaXBpcC5jOjM0NTpcXHRcXHQgICAgIWlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbChwLVxcdTAwM2VpcGgucHJvdG9jb2wpIHx8XFxubmV0L2lwdjQvaXBpcC5jLTM0Ni1cXHRcXHQgICAgcC1cXHUwMDNlaXBoLmlobCAhPSA1IHx8IChwLVxcdTAwM2VpcGguZnJhZ19vZmYgXFx1MDAyNiBodG9ucyh+SVBfREYpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MTQuOTU3MjM1NTc0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTM0MTIwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29udHJvbCBGbG93OiBgaXBpcF90dW5uZWxfY3RsYCBhbmQgYG5kb19zaW9jZGV2cHJpdmF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlcyBhbmQgdGhlIHdheSB0aGluZ3MgdHlwaWNhbGx5IHdvcmsgaW4gbmV0d29ya2luZyBrZXJuZWwgbW9kdWxlcywgaXMgdGhhdCB0aGUgZnVuY3Rpb24gYGlwaXBfdHVubmVsX2N0bGAgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBgbmRvX3Npb2NkZXZwcml2YXRlYCBuZXRkZXYgb3BlcmF0aW9uIGhhbmRsZXIuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIGVudHJ5IHBvaW50LCByaWdodD8gYG5kb19zaW9jZGV2cHJpdmF0ZWAgaXMgdGhlIFN3aXNzIEFybXkga25pZmUgZm9yIGRlYWxpbmcgd2l0aCBkZXZpY2Utc3BlY2lmaWMgaW9jdGxzIGFuZCBjb250cm9sIG9wZXJhdGlvbnMuIElmIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdHVubmVsaW5nLCBzZXR0aW5nIHVwLCB0ZWFyaW5nIGRvd24sIGFuZCBjb25maWd1cmluZyB0aGUgdHVubmVsIGl0c2VsZiB3b3VsZCBiZSB0aGUga2luZCBvZiBcInByaXZhdGVcIiBvcGVyYXRpb24gdGhhdCBuZWF0bHkgZml0cyB3aXRoaW4gdGhlIHNjb3BlIG9mIHdoYXQgYG5kb19zaW9jZGV2cHJpdmF0ZWAgaGFuZGxlcy4gU28sIHRoYXQncyB3aGVyZSBJJ2Qgc3RhcnQgbG9va2luZyDigJMgdHJhY2luZyBiYWNrIGNhbGxzIGZyb20gYGlwaXBfdHVubmVsX2N0bGAgdG8gY29uZmlybSB0aGF0IGRpcmVjdCBsaW5rLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwYXRoLCBhbmQgYW55IGRldmlhdGlvbiBmcm9tIHRoYXQgd291bGQgYmUsIGF0IGxlYXN0IGluaXRpYWxseSwgYSBzdXJwcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OToxOC40NzA2NDk2NjJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODc3MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBfdHVubmVsX2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTM0MD1zdGF0aWMgaW50XFxubmV0L2lwdjQvaXBpcC5jOjM0MTppcGlwX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsIGludCBjbWQpXFxubmV0L2lwdjQvaXBpcC5jLTM0Mi17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcF9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM4Ny1cXHQubmRvX2dldF9pZmxpbmsgPSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcGlwLmM6Mzg4OlxcdC5uZG9fdHVubmVsX2N0bFxcdD0gaXBpcF90dW5uZWxfY3RsLFxcbm5ldC9pcHY0L2lwaXAuYy0zODktXFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjE4LjUxNDUzMjk0WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTcxMzY3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgR1JFIElQdjYgVHVubmVsIENvbnRyb2wgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IEdSRSBJUHY2IHR1bm5lbHMgYXJlIGNvbnRyb2xsZWQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCBgbmRvX3R1bm5lbF9jdGxgIGlzIGludm9sdmVkIHNvbWVob3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhhdCBhbmQgdGhlIHR1bm5lbCBtYW5hZ2VtZW50LlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSBgaXA2Z3JlX3R1bm5lbF9pb2N0bGAgZnVuY3Rpb24uIFRoYXQncyBkZWZpbmVkIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLiBMZXQncyBzZWUgd2hhdCB0aGUgaW9jdGwgaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29udHJvbCBwbGFuZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgcGxhbmUgZm9yIHRoZXNlIHR1bm5lbHMsIGFuZCB0aGlzIHNlZW1zIGxpa2UgdGhlIGRpcmVjdCB3YXkgdG8gZG8gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3NTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OToyMi43MTE2NzMzOTdaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDgxMDA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZncmVfdHVubmVsX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MjIuNzU4MTYxNTE0WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDgyNzQzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IEdSRSBUdW5uZWwgQ29udHJvbCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZG9fdHVubmVsX2N0bGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgIGZpbGUuIEknbSB0aGlua2luZywgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgY29udHJvbGxpbmcgdGhlIEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uIChHUkUpIHR1bm5lbHMsIHNwZWNpZmljYWxseSB0aG9zZSBvcGVyYXRpbmcgd2l0aCBJUHY2IGVuY2Fwc3VsYXRpb24sIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb25zIGZvciB0aGVzZSB0dW5uZWxzLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbmV0ZGV2aWNlIG9wZXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgaG93IHRyYWZmaWMgaXMgc2hhcGVkLCBob3cgdHVubmVsIGVuZHBvaW50cyBhcmUgY29uZmlndXJlZCwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBjb250cm9sIGZvciBJUHY2IHRyYWZmaWMgdGhyb3VnaCBHUkUgdHVubmVscyBpbiB0aGUgTGludXgga2VybmVsLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgTkRPIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBhbmQgaWYgYW55IHF1aXJrcyBhcmUgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OToyNi40NjY0MzkxNzFaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjA2MTU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZG9fdHVubmVsX2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjI2LjUxMjY1NTc1OFoiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc2MDgxMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgaXA2X2dyZS5jYCBmb3IgYGlvY3RsYCBJbnNwZWN0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYGlvY3RsYCB1c2FnZSB3aXRoaW4gdGhlIElQdjYgR1JFIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gYG5ldC9pcHY2L2lwNl9ncmUuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBHUkUgb3ZlciBJUHY2IGZ1bmN0aW9uYWxpdHksIGFuZCB0aGVyZWZvcmUsIHdoZXJlIGFueSBwb3RlbnRpYWwgYGlvY3RsYCBpbnRlcmFjdGlvbnMgd291bGQgYmUgZGVmaW5lZCBvciB1c2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCwgc28gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMgaGVyZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjI5Ljg4ODc0MDQ0NFoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDM4MTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MjkuOTMzODUyMjAyWiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDA5NTcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBxdWljayB0YWtlIG9uIHdoYXQgSSd2ZSBqdXN0IGJlZW4gbG9va2luZyBhdC5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgSVB2NiBHUkUgQ29kZSoqXG5cbkFscmlnaHQsIHNvIEkgd2FzIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBpcDZfZ3JlLmNgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmVuJ3QgYW55IGlvY3RsIGNhbGxzIGluIHRoZXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCBvbiB0aGlzIGZyb250LiBJIHdhcyBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgY2FsbHMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy5cblxuTm93LCB0aG91Z2gsIG15IGF0dGVudGlvbiBoYXMgc2hpZnRlZC4gU2luY2UgSSBjb3VsZG4ndCBmaW5kIGFueSBpb2N0bCdzIGluIHRoYXQgZmlyc3QgZmlsZSwgbXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGBpcDZfdG5sX2lvY3RsYCB3aGljaCByZXNpZGVzIGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBMZXQncyBzZWUgaWYgdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBpb2N0bCBjYWxscyBhcmUgaW1wbGVtZW50ZWQsIG9yIGlmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgcmFiYml0IGhvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MzIuOTM0ODEyODlaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDY0OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNjExPWlwNl90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0gKnUsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMxLSAqIERlc2NyaXB0aW9uOlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNjMyOiAqICAgaXA2X3RubF9pb2N0bCgpIGlzIHVzZWQgZm9yIG1hbmFnaW5nIElQdjYgdHVubmVsc1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMzLSAqICAgZnJvbSB1c2Vyc3BhY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjMyLjk4MjMyMDgwOFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUxOTE3MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQncyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBVc2FnZSBDb250ZXh0KipcblxuUmlnaHQsIHNvIEkndmUgZ290IHRoaXPigKYgd2hhdGV2ZXIgaXQgaXPigKYgaW4gZnJvbnQgb2YgbWUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoZXJlIGRvZXMgdGhpcyBhY3R1YWxseSAqc2hvdyB1cCo/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBhcHBsaWNhdGlvbnMsIHRoZSBlbnZpcm9ubWVudHMgaXQncyBkZXBsb3llZCBpbiwgdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMgaXQgaW50ZXJhY3RzIHdpdGguIEFyZSB3ZSB0YWxraW5nIHRoZW9yZXRpY2FsIG1vZGVscywgcHJvZHVjdGlvbiBzeXN0ZW1zLCByZXNlYXJjaCBwcm90b3R5cGVzPyBFYWNoIGNvbnRleHQgZGljdGF0ZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGFzc3VtcHRpb25zLCBsaW1pdGF0aW9ucywgYW5kLCBmcmFua2x5LCB3aGF0J3MgKmltcG9ydGFudCouIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGFuZCB0aGUgdXNhZ2UgaXMgd2hlcmUgdGhvc2UgZGV0YWlscyBiZWNvbWUgdGFuZ2libGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcywgZWRnZSBjYXNlcywgc2NhbGFiaWxpdHkgY29uY2VybnMuLi4gVGhpcyBcIndoZXJlIGl0J3MgdXNlZFwiIHF1ZXN0aW9uIGlzIHRoZSBqdW1waW5nLW9mZiBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZSBpbnRvIGl0cyB1dGlsaXR5IGFuZCBzaWduaWZpY2FuY2UuIEZyb20gaGVyZSwgSSBjYW4gc3RhcnQgdG8gZGlzc2VjdCBpdHMgZWZmZWN0aXZlbmVzcyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHN0cmVuZ3RocyBhbmQgd2Vha25lc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTozNS45MzQyNDA0NloiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NTIzMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kb190dW5uZWxfY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MzUuOTc5OTk5Nzk3WiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEyNzM1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgS2VybmVsIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlwNl90bmxfaW9jdGxgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3MgcGluZ2luZyBpbiB0aGUgYmFjayBvZiBteSBoZWFkLiBJJ20gd29uZGVyaW5nLi4uIGNvdWxkIGl0IGJlIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUsIHRoZSB3YXkgaXQncyBoYW5kbGluZyB0aGlzLCBpcyBhY3R1YWxseSByZWx5aW5nIG9uIHRoZSBgbmRvX3Npb2NkZXZwcml2YXRlYCBtZWNoYW5pc20gdW5kZXIgdGhlIGhvb2Q/IEl0IGZlZWxzIGxpa2UgdGhlcmUncyBhIHBvdGVudGlhbCBvdmVybGFwIG9yLCBwZXJoYXBzIG1vcmUgYWNjdXJhdGVseSwgYSBoaWRkZW4gZGVwZW5kZW5jeS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaGVyZSBhbmQgdHJhY2UgdGhlIGNvZGUgcGF0aCB0byBiZSBzdXJlLiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZSBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGlzIHdhcyBjbGVhcmVyLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBsb29rIGZvciBhIHBvdGVudGlhbCBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MzkuMTMxMjc3NjY3WiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcwNTUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfdG5sX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTYxMT1pcDZfdG5sX3Bhcm1fdG9fdXNlcihzdHJ1Y3QgaXA2X3RubF9wYXJtICp1LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTYzMS0gKiBEZXNjcmlwdGlvbjpcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTYzMjogKiAgIGlwNl90bmxfaW9jdGwoKSBpcyB1c2VkIGZvciBtYW5hZ2luZyBJUHY2IHR1bm5lbHNcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTYzMy0gKiAgIGZyb20gdXNlcnNwYWNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTozOS4xNzU5OTI3NzRaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMDg2MjQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBJUHY2IFR1bm5lbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIElQdjYgdHVubmVsaW5nIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyBzb21ldGhpbmcgbWlnaHQgYmUgZ29pbmcgc2lkZXdheXMgd2l0aCB0aGUgZW5jYXBzdWxhdGlvbiBvciBkZWNhcHN1bGF0aW9uIGxvZ2ljLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBsaW5lIDE2MzIgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gc2hvdWxkIGJlIGRlYWxpbmcgd2l0aCBbaW5zZXJ0IG15IHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QsIGVnLiBHUkUgdHVubmVscywgc2l0IHR1bm5lbHMsIG9yIGlwaXAgdHVubmVsc10uIEknbGwgbmVlZCB0byBmb2N1cyBvbiBob3cgaXQgaGFuZGxlcyBbc3BlY2lmaWMgYXNwZWN0IG9mIHR1bm5lbGluZ10uIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgaGVhZGVyIG1hbmlwdWxhdGlvbnMsIG9yIHBlcmhhcHMgYW4gaXNzdWUgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgSVB2NiBzdGFjayBhbmQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UuIE1heWJlIGEgbWlzc2VkIGVycm9yIGNoZWNrIG9yIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvciB1bmRlciBoZWF2eSBsb2FkLiBJIHdhbnQgdG8gc2VlIGhvdyBwYWNrZXRzIGFyZSBjcmVhdGVkL21hbmlwdWxhdGVkLiBJJ2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgUkZDcyBhbmQgcG90ZW50aWFsbHkgc29tZSBuZXR3b3JrIGNhcHR1cmVzIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTU4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6NDIuNzA2ODU4MzQxWiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYzMDpcXHQgKlxcbjE2MzE6XFx0ICogRGVzY3JpcHRpb246XFxuMTYzMjpcXHQgKiAgIGlwNl90bmxfaW9jdGwoKSBpcyB1c2VkIGZvciBtYW5hZ2luZyBJUHY2IHR1bm5lbHNcXG4xNjMzOlxcdCAqICAgZnJvbSB1c2Vyc3BhY2UuXFxuMTYzNDpcXHQgKlxcbjE2MzU6XFx0ICogICBUaGUgcG9zc2libGUgY29tbWFuZHMgYXJlIHRoZSBmb2xsb3dpbmc6XFxuMTYzNjpcXHQgKiAgICAgJVNJT0NHRVRUVU5ORUw6IGdldCB0dW5uZWwgcGFyYW1ldGVycyBmb3IgZGV2aWNlXFxuMTYzNzpcXHQgKiAgICAgJVNJT0NBRERUVU5ORUw6IGFkZCB0dW5uZWwgbWF0Y2hpbmcgZ2l2ZW4gdHVubmVsIHBhcmFtZXRlcnNcXG4xNjM4OlxcdCAqICAgICAlU0lPQ0NIR1RVTk5FTDogY2hhbmdlIHR1bm5lbCBwYXJhbWV0ZXJzIHRvIHRob3NlIGdpdmVuXFxuMTYzOTpcXHQgKiAgICAgJVNJT0NERUxUVU5ORUw6IGRlbGV0ZSB0dW5uZWxcXG4xNjQwOlxcdCAqXFxuMTY0MTpcXHQgKiAgIFRoZSBmYWxsYmFjayBkZXZpY2UgXFxcImlwNnRubDBcXFwiLCBjcmVhdGVkIGR1cmluZyBtb2R1bGVcXG4xNjQyOlxcdCAqICAgaW5pdGlhbGl6YXRpb24sIGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBvdGhlciB0dW5uZWwgZGV2aWNlcy5cXG4xNjQzOlxcdCAqXFxuMTY0NDpcXHQgKiBSZXR1cm46XFxuMTY0NTpcXHQgKiAgIDAgb24gc3VjY2VzcyxcXG4xNjQ2OlxcdCAqICAgJS1FRkFVTFQgaWYgdW5hYmxlIHRvIGNvcHkgZGF0YSB0byBvciBmcm9tIHVzZXJzcGFjZSxcXG4xNjQ3OlxcdCAqICAgJS1FUEVSTSBpZiBjdXJyZW50IHByb2Nlc3MgaGFzbid0ICVDQVBfTkVUX0FETUlOIHNldFxcbjE2NDg6XFx0ICogICAlLUVJTlZBTCBpZiBwYXNzZWQgdHVubmVsIHBhcmFtZXRlcnMgYXJlIGludmFsaWQsXFxuMTY0OTpcXHQgKiAgICUtRUVYSVNUIGlmIGNoYW5naW5nIGEgdHVubmVsJ3MgcGFyYW1ldGVycyB3b3VsZCBjYXVzZSBhIGNvbmZsaWN0XFxuMTY1MDpcXHQgKiAgICUtRU5PREVWIGlmIGF0dGVtcHRpbmcgdG8gY2hhbmdlIG9yIGRlbGV0ZSBhIG5vbmV4aXN0aW5nIGRldmljZVxcbjE2NTE6XFx0ICoqL1xcbjE2NTI6XFx0XFxuMTY1MzpcXHRzdGF0aWMgaW50XFxuMTY1NDpcXHRpcDZfdG5sX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxcbjE2NTU6XFx0XFx0XFx0ICAgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxcbjE2NTY6XFx0e1xcbjE2NTc6XFx0XFx0aW50IGVyciA9IDA7XFxuMTY1ODpcXHRcXHRzdHJ1Y3QgaXA2X3RubF9wYXJtIHA7XFxuMTY1OTpcXHRcXHRzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gcDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjQyLjcwNjk3MDA5MloiLCJTZXEiOjgzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg4MjExNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJJ20gcmVmbGVjdGluZyBvbiB0aGUgaW5pdGlhbCBwcm9tcHQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaXA2X3RubF9zaW9jZGV2cHJpdmF0ZWAqKlxuXG5BbHJpZ2h0LCB0aGF0IGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYC4uLiB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWV0aGluZyBpbiBteSBtZW50YWwgbGlicmFyeS4gSSdtIHByZXR0eSBzdXJlIHRoYXQncyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBwcml2YXRlIGlvY3RsIG9wZXJhdGlvbiB3aXRoaW4gdGhlIElQdjYgdHVubmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseS4gR2l2ZW4gdGhlIG5hbWUsIGl0IHNjcmVhbXMgXCJ0dW5uZWxcIiBhbmQgdGhlIFwic2lvY1wiIHN1Z2dlc3RzIHNvY2tldCBpbnRlcmZhY2UgY29udHJvbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBoYW5kbGluZyBzb21lIHZlbmRvci1zcGVjaWZpYyBvciBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gdGhlc2UgdHVubmVscy5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gbXkgdGhvdWdodHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSB0aGUgYHNpdC5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCdzIHdoZXJlIHRoZSBTSVQgKFNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uKSBkcml2ZXIgbGl2ZXMsIGFuZCB0aGF0J3MgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgdGhpbmdzIGxpa2UgaW9jdGwgY2FsbHMgcmVsYXRlZCB0byBJUHY2IHR1bm5lbHMuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcGxhY2UgdG8gcHV0IHRoZSBpb2N0bCBkZWZpbml0aW9ucyBhbmQgaGFuZGxlcnMgZm9yIGFueXRoaW5nIHRvIGRvIHdpdGggSVB2NiB0dW5uZWxsaW5nLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHVzZSBvZiB0aGUgcmVsYXRlZCBpZGVudGlmaWVyIHdpdGhpbiB0aGF0IHNvdXJjZSBmaWxlLiBJdCB3b3VsZCBiZSBteSBwcmltZSBwbGFjZSB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjQ2Ljc5NTE4NjAyNVoiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDg5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTM2OD1zdGF0aWMgaW50XFxubmV0L2lwdjYvc2l0LmM6MTM2OTppcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxubmV0L2lwdjYvc2l0LmMtMTM3MC1cXHRcXHRcXHQgICAgdm9pZCBfX3VzZXIgKmRhdGEsIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xMzc2LVxcdGNhc2UgU0lPQ0RFTFRVTk5FTDpcXG5uZXQvaXB2Ni9zaXQuYzoxMzc3OlxcdFxcdHJldHVybiBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoZGV2LCBpZnIsIGRhdGEsIGNtZCk7XFxubmV0L2lwdjYvc2l0LmMtMTM3OC1cXHRjYXNlIFNJT0NHRVRQUkw6XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xMzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcDZfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0MDAtXFx0Lm5kb19zdGFydF94bWl0XFx0PSBzaXRfdHVubmVsX3htaXQsXFxubmV0L2lwdjYvc2l0LmM6MTQwMTpcXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxcbm5ldC9pcHY2L3NpdC5jLTE0MDItXFx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjQ2Ljg0MjI0MTU4MloiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkyMTM3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJUHY2IFR1bm5lbCBEcml2ZXIgSXNzdWVzKipcblxuUmlnaHQsIGxldCdzIHNlZS4gSSd2ZSBnb3QgYGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgYW5kIGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYCBmbGFnZ2VkIGluIG15IG1pbmQuIFNvdW5kcyBsaWtlIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBwcm9ibGVtcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gcHJpdmF0ZSBkZXZpY2UgY29udHJvbCBpb2N0bHMgd2l0aGluIElQdjYgdHVubmVsIGRyaXZlcnMuIEl0J3MgYSBiaXQgb2YgYSBodW5jaCwgYnV0IHRoZXNlIHNwZWNpZmljIHN5bWJvbHMganVtcCBvdXQgYXMgYSBzdGFydGluZyBwb2ludC5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgaXBfdHVubmVsLmNgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHR1bm5lbCBkcml2ZXIgZnVuY3Rpb25hbGl0eSBpcyBob3VzZWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgc2lvY2RldnByaXZhdGVgIGhhbmRsaW5nIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGFueSB1bnVzdWFsIGFjY2VzcyBwYXR0ZXJucywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhbGxvdyBmb3IgaW1wcm9wZXIgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgdHVubmVsIGluc3RhbmNlcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBkdXJpbmcgaW9jdGwgY2FsbHMuIFRoYXQgZmlsZSBpcyBwcm9iYWJseSBteSBiZXN0IGxlYWQgdG8gaW52ZXN0aWdhdGUgdGhlc2UgZmxhZ2dlZCBzeW1ib2xzLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBwcml2YXRlIGlvY3RsJ3MgaGFuZGxpbmcgd2l0aGluIGFuIElQdjYgdHVubmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDAwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjUwLjIzNDM4MjE0OFoiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MjM1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmM9MTA0MD1FWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcGFybV90b191c2VyKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQxLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNDI6aW50IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQzLVxcdFxcdFxcdCAgICAgdm9pZCBfX3VzZXIgKmRhdGEsIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDU0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6NTAuMjgxMzE5MDY1WiIsIlNlcSI6ODcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTIzNDkzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIEV4cG9ydCoqXG5cbkFscmlnaHQsIHNvIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIGlzIGV4cG9ydGVkLCBodWg/IEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgZmxhZyBpbiBteSBtaW5kLiBFeHBvcnRlZCBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBcInByaXZhdGVcIiBpbiB0aGUgbmFtZSwgYWx3YXlzIHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gVGhleSdyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMsIG9yIG1heWJlIGp1c3QgYXJlYXMgd2hlcmUgZnV0dXJlIGNoYW5nZXMgY291bGQgcmlwcGxlIG91dCB1bmV4cGVjdGVkbHkuXG5cbk15IG5leHQgc3RlcCwgb2J2aW91c2x5LCBpcyB0byBwaW4gZG93biB3aGVyZSB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSwgaXRzIGltcGFjdCwgYW5kIHdoZXRoZXIgaXQncyBhZGhlcmluZyB0byBlc3RhYmxpc2hlZCBpbnRlcmZhY2VzLiBJJ2xsIGJlIHNpZnRpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzLCBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhbmQgd2h5IGl0J3MgYmVlbiBleHBvc2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgd2hldGhlciBJIG5lZWQgdG8gdGFrZSBmdXJ0aGVyIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTo1My4zNzM2NzEzNDlaIiwiU2VxIjo4OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzc1Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9OTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4Ny1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGlwZ3JlX3htaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTg4OlxcdC5uZG9fc2lvY2RldnByaXZhdGVcXHQ9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcXG5uZXQvaXB2NC9pcF9ncmUuYy05ODktXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDA9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0MS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDQyOmludCBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0My1cXHRcXHRcXHQgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1NC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2lvY2RldnByaXZhdGUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNTYtXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz00MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2dGlfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTQyMC1cXHQubmRvX3N0YXJ0X3htaXRcXHQ9IHZ0aV90dW5uZWxfeG1pdCxcXG5uZXQvaXB2NC9pcF92dGkuYzo0MjE6XFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcXG5uZXQvaXB2NC9pcF92dGkuYy00MjItXFx0Lm5kb19jaGFuZ2VfbXR1XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0zODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzgzLVxcdC5uZG9fc3RhcnRfeG1pdFxcdD0gaXBpcF90dW5uZWxfeG1pdCxcXG5uZXQvaXB2NC9pcGlwLmM6Mzg0OlxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjQvaXBpcC5jLTM4NS1cXHQubmRvX2NoYW5nZV9tdHUgPSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6NTMuNDIxNDUyNzE2WiIsIlNlcSI6ODksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTUzODQ2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSVAgVHVubmVsIERldmljZSBDb250cm9sIC0gQSBRdWljayBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSB0aGlua2luZyBhYm91dCBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYC4uLiByaWdodCwgdGhhdCdzIHRoZSBjb250cm9sIGludGVyZmFjZSwgdGhlIHN5c3RlbSBjYWxsLCBmb3Igc2V0dGluZyB1cCBhbmQgbWFuYWdpbmcgdGhlc2UgSVAgdHVubmVscy4gU28sIGl0J3MgdXNlZCBieSB0aGUgbWFqb3IgcGxheWVyczogYGlwZ3JlYCAoR1JFIHR1bm5lbHMpLCBgdnRpYCAoVmlydHVhbCBUdW5uZWwgSW50ZXJmYWNlIC0gYSBrZXkgY29tcG9uZW50IGZvciBWUE5zLCBlc3BlY2lhbGx5IGluIG9sZGVyIHNldHVwcywgSSB0aGluayksIGFuZCBvZiBjb3Vyc2UsIGBpcGlwYCAodGhlIGJhc2ljIElQLWluLUlQIGVuY2Fwc3VsYXRpb24pLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZXkgYWxsIG5lZWQgYSB3YXkgdG8gcGFzcyBwcml2YXRlLCBkZXZpY2Utc3BlY2lmaWMgZGF0YSB0byB0aGUga2VybmVsIGZvciBjb25maWd1cmF0aW9uLCBhbmQgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGF0IG1lY2hhbmlzbS5cblxuQnV0LCBhIHRob3VnaHQgZW1lcmdlczsgd2hhdCBhYm91dCBgaXA2Z3JlYD8gSSBjYW4ndCBxdWl0ZSByZWNhbGwgaWYgaXQgdXNlcyB0aGUgc2FtZSBpbnRlcmZhY2U7IEkgYXNzdW1lIHNvLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBjYXNlLiBUaGUgdW5kZXJseWluZyB0dW5uZWwgaW1wbGVtZW50YXRpb25zLCB3aGlsZSBkaWZmZXJlbnQgYmVjYXVzZSBvZiBJUHY2IGhlYWRlcnMsIHByb2JhYmx5IHN0aWxsIGxldmVyYWdlIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIGZvciB0aGUgY29yZSBzZXR1cCBhbmQgY29udHJvbCBvcGVyYXRpb25zLiBJJ2QgaGF0ZSB0byBiZSB3cm9uZyBoZXJlIGFuZCBJJ20gcHJldHR5IHN1cmUgSSBkaWQgYSBzaW1pbGFyIGluc3BlY3Rpb24gb24gdGhhdCBhIGZldyB5ZWFycyBhZ28uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQxMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjU3LjEzNjg0MDczMloiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTg3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTUtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNTY6c3RhdGljIGludCBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTE0MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xNDE3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXA2Z3JlX3R1bm5lbF94bWl0LFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxNDE4OlxcdC5uZG9fc2lvY2RldnByaXZhdGVcXHQ9IGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTktXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcDZfdG5sX2NoYW5nZV9tdHUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjU3LjE4NDYwMzA3OVoiLCJTZXEiOjkxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE0Mjc3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgR1JFIFR1bm5lbCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgcmVsYXRlZCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgc2hvdWxkIG1hcCBvdXQgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgYW5kIGludGVyYWN0IHdpdGggdHVubmVscyB0byBnZXQgdGhlIGZ1bGwgdmlldy5cblxuSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgYGlwZ3JlX25ld2xpbmtgLCBgaXBncmVfY2hhbmdlbGlua2BcbiogICBgZXJzcGFuX25ld2xpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgXG4qICAgYHZ0aV9uZXdsaW5rYCwgYHZ0aV9jaGFuZ2VsaW5rYFxuKiAgIGBpcGlwX25ld2xpbmtgLCBgaXBpcF9jaGFuZ2VsaW5rYFxuKiAgIGBpcDZncmVfbmV3bGlua2AsIGBpcDZncmVfY2hhbmdlbGlua2BcbiogICBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgXG4qICAgYGlwNl90bmxfbmV3bGlua2AsIGBpcDZfdG5sX2NoYW5nZWxpbmtgXG4qICAgYGlwaXA2X25ld2xpbmtgLCBgaXBpcDZfY2hhbmdlbGlua2BcbiogICBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2BcbiogICBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYFxuKiAgIGBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlYFxuKiAgIGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYFxuKiAgIGBpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVgXG4qICAgYGlwaXBfdHVubmVsX2N0bGBcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgaXBpcF90dW5uZWxfY3RsYC4uLiBpc24ndCB0aGF0IGp1c3QgYSB3cmFwcGVyIGZvciBgbmRvX3R1bm5lbF9jdGxgIGZvciB0aGUgYGlwaXBgIHR1bm5lbCB0eXBlPyBUaGF0J3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoZXJlJ3MgYSBjb21tb24gY29udHJvbCBwYXRoLCBgbmRvX3R1bm5lbF9jdGxgLCBhbmQgdGhlIHR1bm5lbC1zcGVjaWZpYyByb3V0aW5lcyB3b3VsZCBob29rIGludG8gaXQuXG5cbk5vdywgdGhlIG5hdHVyYWwgcXVlc3Rpb24gaXM6IEFyZSB0aGVyZSBvdGhlciB0dW5uZWwgdHlwZXMgdXNpbmcgdGhlIGBuZG9fdHVubmVsX2N0bGAgbWVjaGFuaXNtPyBLbm93aW5nIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDYyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjAyLjQ5ODg4NTEyOVoiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTc2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX3R1bm5lbF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05OTEtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYzo5OTI6XFx0Lm5kb190dW5uZWxfY3RsXFx0XFx0PSBpcGdyZV90dW5uZWxfY3RsLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5My19O1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA0Mj1pbnQgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0OS1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDUwOlxcdGVyciA9IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3R1bm5lbF9jdGwoZGV2LCBcXHUwMDI2cCwgY21kKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDUxLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2ICFpcF90dW5uZWxfcGFybV90b191c2VyKGRhdGEsIFxcdTAwMjZwKSlcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jPTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZ0aV9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNDI0LVxcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwX3Z0aS5jOjQyNTpcXHQubmRvX3R1bm5lbF9jdGxcXHQ9IHZ0aV90dW5uZWxfY3RsLFxcbm5ldC9pcHY0L2lwX3Z0aS5jLTQyNi19O1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0zODctXFx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXFxubmV0L2lwdjQvaXBpcC5jOjM4ODpcXHQubmRvX3R1bm5lbF9jdGxcXHQ9IGlwaXBfdHVubmVsX2N0bCxcXG5uZXQvaXB2NC9pcGlwLmMtMzg5LVxcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQ3OD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnYpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDk0LVxcbm5ldC9pcHY0L2lwbXIuYzo0OTU6XFx0aWYgKCF0dW5uZWxfZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fdHVubmVsX2N0bClcXG5uZXQvaXB2NC9pcG1yLmMtNDk2LVxcdFxcdGdvdG8gb3V0O1xcbm5ldC9pcHY0L2lwbXIuYzo0OTc6XFx0ZXJyID0gdHVubmVsX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3R1bm5lbF9jdGwodHVubmVsX2RldiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBtci5jLTQ5OC1cXHRcXHRcXHRTSU9DQUREVFVOTkVMKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy01MTQtXFx0XFx0ZGV2X2Nsb3NlKG5ld19kZXYpO1xcbm5ldC9pcHY0L2lwbXIuYzo1MTU6XFx0XFx0dHVubmVsX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3R1bm5lbF9jdGwodHVubmVsX2RldiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBtci5jLTUxNi1cXHRcXHRcXHRcXHRTSU9DREVMVFVOTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTQ6MDA6MDIuNTQ3Nzg4MzQ2WiIsIlNlcSI6OTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTk4OTEzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFR1bm5lbCBDb250cm9sIEZvY3VzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoaXMgZG93biwgYW5kIGl0IGxvb2tzIGxpa2UgYGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgdWx0aW1hdGVseSBmdW5uZWxzIGl0cyB3YXkgdG8gYG5kb190dW5uZWxfY3RsYC4gUmlnaHQsIHNvIHRoYXQncyB0aGUgY29tbW9uIGludGVyZmFjZS4gTm93LCB0aGUgcmVhbCBoZWF2eSBsaWZ0aW5nLCB0aGUgYWN0dWFsIGRldmljZS1zcGVjaWZpYyBoYW5kbGluZywgdGhhdCdzIGJlaW5nIGRvbmUgYnkgYGlwZ3JlX3R1bm5lbF9jdGxgLCBgdnRpX3R1bm5lbF9jdGxgLCBhbmQgYGlwaXBfdHVubmVsX2N0bGAuIEl0IG1ha2VzIG1vcmUgc2Vuc2UsIGZyb20gYSBjbGFyaXR5IGFuZCBmb2N1cyBwZXJzcGVjdGl2ZSwgdG8gcHV0IHRob3NlIGRldmljZS1zcGVjaWZpYyBoYW5kbGVycyBhcyB0aGUgZm9jYWwgcG9pbnRzLiBMZXQncyBtYWtlIHRoYXQgYWRqdXN0bWVudCBhbmQgdXBkYXRlIHRoZSBzeW1ib2wgbGlzdCBhY2NvcmRpbmdseS4gQW5kIGFzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgSVB2NiBzaWRlIG9mIHRoaW5ncy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AgaXMgYmVoYXZpbmcgc2ltaWxhcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDowNi4yMDc2ODIzNzVaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjI3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTUtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNTY6c3RhdGljIGludCBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTE0MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xNDE3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXA2Z3JlX3R1bm5lbF94bWl0LFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxNDE4OlxcdC5uZG9fc2lvY2RldnByaXZhdGVcXHQ9IGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTktXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcDZfdG5sX2NoYW5nZV9tdHUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjA2LjI1ODMxNTgxMloiLCJTZXEiOjk1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM1MTQ4MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGluayBIYW5kbGVyKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRpcmVjdCBoYW5kbGVyIG9mIHNvbWUgc29ydCwgcHJvYmFibHkgcmVsYXRlZCB0byBuZXR3b3JrIGxpbmtzLiBUaGUga2V5IGhlcmUsIHRoZSBcImZvY3VzIHN5bWJvbHNcIiBhcyB0aGV5J3JlIGNhbGxlZCwgYXJlIGFsbCB0aGVzZSBmdW5jdGlvbnMgd2l0aCBgbmV3bGlua2AgYW5kIGBjaGFuZ2VsaW5rYCBhdCB0aGUgZW5kLCBhbG9uZyB3aXRoIGEgZmV3IGNvbnRyb2wgYW5kIHByaXZhdGUgaW50ZXJmYWNlIGNhbGxzLiAgV2UndmUgZ290IGEgbG90IG9mIHRoZW0sIGNvdmVyaW5nIGEgdmFyaWV0eSBvZiB0dW5uZWxpbmcgcHJvdG9jb2xzOiBuZXRraXQsIGdyZSwgZXJzcGFuLCB2dGksIGlwaXAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy4gVGhhdCdzIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgc2V0LlxuXG5OZXh0LCB3ZSBzaG91bGQgY2hlY2sgd2hhdCBjb25maWd1cmF0aW9ucyB3aWxsIGNvbXBpbGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBXZSBoYXZlIGEgc2V0IG9mIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byBsb29rIGF0IC0gYE5FVEtJVGAsIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBgSVBWNl9TSVRgLCBhbmQgYElQVjZfVlRJYCBhbmQgYE5FVF9JUFZUSWAuIFNpbmNlIGBORVRfSVBWVElgIGlzIHByZXNlbnQsIGl0IGxvb2tzIGxpa2UgdGhhdCBpcyB0aGUgY29ycmVjdCBvbmUgdG8gZmluZCB0aGUgdnRpIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuR2l2ZW4gdGhhdCBgTkVUX0lQVlRJYCBjb25maWcgaXMgdXNlZCBmb3IgdnRpLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBzZXR0aW5ncyBvZiB0aGUgdHVubmVsLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSAtIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGUgdG8gdGhlIGNvZGUgYW5kIHdoYXQgdGhleSBhY3R1YWxseSBlbmFibGUuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyB3aG9sZSB0aGluZyBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDoxMS41OTM0NjY3OFoiLCJTZXEiOjk2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMjE5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUFZUSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MjY4PWNvbmZpZyBTWU5fQ09PS0lFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDMtXFxubmV0L2lwdjQvS2NvbmZpZzozMDQ6Y29uZmlnIE5FVF9JUFZUSVxcbm5ldC9pcHY0L0tjb25maWctMzA1LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQOiB0dW5uZWxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjExLjYzODQ5NDc1OFoiLCJTZXEiOjk3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY4NjcxMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFR1bm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB5ZXMsIGRlZmluaXRlbHksIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTkVUX0lQVlRJYCBoZXJlLiBUaGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYXkuXG5cblJpZ2h0LCBzbyBgaXBfdHVubmVsLmNgIGdldHMgYnVpbHQgd2hlbiBgTkVUX0lQX1RVTk5FTGAgaXMgZW5hYmxlZC4gQW5kIGBORVRfSVBfVFVOTkVMYCBpcywgaW4gdHVybiwgc2VsZWN0ZWQgYnkgYSBudW1iZXIgb2Ygb3RoZXIgY29uZmlncyBsaWtlIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBhbmQgb2YgY291cnNlLCBgTkVUX0lQVlRJYCDigJMgdGhlIG9uZSB3ZSdyZSBpbnRlcmVzdGVkIGluLiBUaGVuIHdlIGhhdmUgYGlwNl90dW5uZWwuY2AgYnVpbHQgYnkgYElQVjZfVFVOTkVMYC4gYGlwNl9ncmUuY2Agd2hlbiBgSVBWNl9HUkVgIGlzIGVuYWJsZWQuIEFuZCBgc2l0LmNgIHdpdGggYElQVjZfU0lUYCBlbmFibGVkLiBGaW5hbGx5LCBgbmV0a2l0LmNgIGlzIGNvbXBpbGVkIHdoZW4gYE5FVEtJVGAgaXMgZW5hYmxlZC5cblxuU28sIHN1bW1pbmcgaXQgdXAsIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbWUgdG8gbWluZCBhcmU6IGBORVRLSVRgLCBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgYE5FVF9JUFZUSWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCwgd2hpbGUgaXQncyBub3QgZXhwbGljaXRseSBpbiB0aGUgb3JpZ2luYWwgdGV4dCwgSSdtIGFzc3VtaW5nIHRoYXQgc2luY2UgVlRJIGlzIG1lbnRpb25lZCwgYElQVjZfVlRJYC5cblxuSG9sZCBvbiwgSSBzdXNwZWN0IGBpcDZfdHVubmVsLmNgIG1pZ2h0IGJlIGNvbXBpbGVkIGZvciBvdGhlciByZWFzb25zIGFzIHdlbGwsIGJ1dCBgSVBWNl9UVU5ORUxgIGlzIGl0cyBtYWluIHRyaWdnZXIuIEl0J3MgYmVzdCB0byBjb25maXJtIHRoaXMgYW5kIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTAxNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDoxNi44MDcxNjgwMTZaIiwiU2VxIjo5OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODEyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90dW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9NDE9b2JqLSQoQ09ORklHX0lQVjZfU0lUKSArPSBzaXQub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgKz0gaXA2X3R1bm5lbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX0lQVjZfR1JFKSArPSBpcDZfZ3JlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTQ6MDA6MTYuODUzOTg3MjQzWiIsIlNlcSI6OTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTAwNDc4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NCBNYWtlZmlsZSoqXG5cblllcy4gKlRoYXQncyB0aGUgZGlyZWN0aW9uIEkgbmVlZCB0byBnbyBpbiB0byBmaWd1cmUgb3V0IHRoaXMgaXNzdWUuKiBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgaXMgbGlrZWx5IGluIGBuZXQvaXB2NC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY3J1Y2lhbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NCBzdGFjayBhcmUgZGVmaW5lZC4gKlRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlKi4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHJlbGF0ZWQgbW9kdWxlcyB0byBzZWUgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGZhbGxpbmcgYXBhcnQsIHBlcmhhcHMgaW4gdGVybXMgb2YgbGlua2luZywgY29uZmlndXJhdGlvbiwgb3IgZGVwZW5kZW5jeSByZXNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTczNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjE5LjY0NDAzNzc0NVoiLCJTZXEiOjEwMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Nzg4NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNjpcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNy1cXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXFxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTQ6MDA6MTkuNjkwODM0NTcyWiIsIlNlcSI6MTAxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU4NTc2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBOZXR3b3JrIFR1bm5lbCBDb25maWd1cmF0aW9ucyoqXG5cblJpZ2h0LCBnb3QgaXQuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGxvb2tpbmcgYXQgYXJlOiBgTkVUS0lUYCwgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIGBORVRfSVBWVElgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBgSVBWNl9TSVRgLCBhbmQgYElQVjZfVlRJYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBzZXQgb2YgdHVubmVsIHR5cGVzLCBjb3ZlcmluZyBJUHY0IGFuZCBJUHY2IHZhcmlhdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgd2UgYXJlbid0IHVzaW5nIHRoZSBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB2YXJpYWJsZSBpbiBhbiB1bmV4cGVjdGVkIHBsYWNlLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgaW4gdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjEzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjIzLjA0OTQxNDIzWiIsIlNlcSI6MTAyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NjU0MzY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbGltaXRfaGVhZHJvb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD02Mjk9aW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNjMxLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo2MzI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNjMzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD02NDU9c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDcte1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo2NDg6XFx0aGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDktXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxOS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozMjA6XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzIxLVxcdG10dSAtPSB0X2hsZW4gKyAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTEyMj1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTQxLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTQyOlxcdFxcdFxcdGRzdF9sZW4gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20ocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExNDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdF9obGVuKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDc0PXN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTUyNC1cXHRcXHRpZiAodGRldikge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTI1OlxcdFxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tICtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTEwOTU9c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xMTMzLVxcdH1cXG5uZXQvaXB2Ni9zaXQuYzoxMTM0OlxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xcbm5ldC9pcHY2L3NpdC5jLTExMzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDoyNC44MzU5NjI0NTJaIiwiU2VxIjoxMDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTE4NzYzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUdW5uZWwgSGVhZHJvb20gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0aWdodGVuaW5nIHVwIGhlYWRyb29tIGxpbWl0YXRpb25zIGZvciBhIGZldyB0dW5uZWwgdHlwZXM6IG5ldGtpdCwgaXAgdHVubmVscy4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gYWRkcmVzcy4gVGhlIGNoYW5nZSBzZWVtcyBzb3VuZCwgc28gSSdsbCBiZSBtYXJraW5nIHRoaXMgYXMgV29ydGhGdXp6aW5nPXRydWUuXG5cbk5vdywgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHRvdWNoZWQ6IGBORVRLSVRgLCBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgYE5FVF9JUFZUSWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9WVElgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgYXJlYXMgdG8gZm9jdXMgb24uXG5cbk15IGF0dGVudGlvbiBpcyBiZWluZyBkcmF3biB0byBhIHByZXR0eSBsb25nIGxpc3Qgb2Ygc3ltYm9scyByZWxhdGVkIHRvIHRoZSBuZXcgYW5kIGNoYW5nZSBsaW5rcywgYW5kIHR1bm5lbCBjb250cm9sOiBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AsIGFuZCBvbiB0aHJvdWdoIHNldmVyYWwgbW9yZSBmb3IgR1JFLCBFUlNQQU4sIFZUSSwgSVBJUCwgYW5kIHRoZWlyIElQdjYgY291bnRlcnBhcnRzLCBhbG9uZyB3aXRoIHRoZSB2YXJpb3VzIHR1bm5lbCBjb250cm9sIG9wZXJhdGlvbnMuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gSSBzZWUgdGhhdCBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAgaXMgYWxzbyBtb2RpZmllZCB0byB1c2UgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCdzIGRpZyBpbnRvIHRob3NlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjMwLjQ0Nzg0MjA1NFoiLCJTZXEiOjEwNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQzNDMxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX2Fkal9oZWFkcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTYzMj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTY0NC1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NjQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTY0Ni1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3MT12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NTMtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjU0OlxcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBoZWFkcm9vbSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjU1LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NjY5PXZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg0NS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo4NDY6XFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtODQ3LVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTEwOTc9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3Mi1cXHRcXHRcXHQrIGRzdC1cXHUwMDNlaGVhZGVyX2xlbiArIHQtXFx1MDAzZWhsZW47XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEyNzM6XFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyNzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjMyLjMzMjE5MTg1MVoiLCJTZXEiOjEwNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMjQzNTI5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSGVhZHJvb20gQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYCBpcyB1c2VkIGluIHNldmVyYWwgdHJhbnNtaXQgKGB4bWl0YCkgZnVuY3Rpb25zOiBgaXBfbWRfdHVubmVsX3htaXRgLCBgaXBfdHVubmVsX3htaXRgLCBhbmQgYGlwNl90bmxfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSB0aG9zZSBgeG1pdGAgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGhlYWRyb29tIGxpbWl0YXRpb25zIGR1cmluZyAqYm90aCogY29uZmlndXJhdGlvbiAobmV3bGluaywgY2hhbmdlbGluaywgaW9jdGwpICphbmQqIHRyYW5zbWlzc2lvbiAoeG1pdCkuXG5cbkZ1enppbmcgdGhlIGB4bWl0YCBmdW5jdGlvbnMgZGlyZWN0bHkgKmNvdWxkKiBiZSBmcnVpdGZ1bCwgYnV0IGFzIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhleSBtaWdodCBub3QgYmUgdGhlIGJlc3QgdGFyZ2V0IGFjY29yZGluZyB0byB0aGUgcHJvbXB04oCZcyBndWlkYW5jZS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gXCJBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGRpcmVjdCBmdXp6aW5nIG9mIGhvdCBwYXRocyBpcyBwcm9uZSB0byBpbWJhbGFuY2VzIGFuZCBpbmVmZmljaWVudCB0ZXN0IGNvdmVyYWdlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBwcm9tcHQgYWR2aXNlcyBhZ2FpbnN0IGRpcmVjdGx5IGZ1enppbmcgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgdGhlIGB4bWl0YCBmdW5jdGlvbnMgYXJlIGhvdC1wYXRoLCBJ4oCZbGwgYXZvaWQgaW5jbHVkaW5nIHRoZW0uIFRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyDigJMgYG5ld2xpbmtgLCBgY2hhbmdlbGlua2AsIGFuZCBgaW9jdGxgIOKAkyBhcmUgaWRlYWwgdGFyZ2V0cywgYXMgdGhleSBhcmUgbm90IGhvdC1wYXRoIGFuZCByZXByZXNlbnQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGUgZXF1YXRpb24uXG5cbkxldOKAmXMgcmV2aWV3IHRoZSBwcm92aWRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGFyZSB0aGVyZTpcblxuYG5ldGtpdF9uZXdfbGlua2BcbmBuZXRraXRfY2hhbmdlX2xpbmtgXG5gaXBncmVfbmV3bGlua2BcbmBpcGdyZV9jaGFuZ2VsaW5rYFxuYGVyc3Bhbl9uZXdsaW5rYFxuYGVyc3Bhbl9jaGFuZ2VsaW5rYFxuYHZ0aV9uZXdsaW5rYFxuYHZ0aV9jaGFuZ2VsaW5rYFxuYGlwaXBfbmV3bGlua2BcbmBpcGlwX2NoYW5nZWxpbmtgXG5gaXA2Z3JlX25ld2xpbmtgXG5gaXA2Z3JlX2NoYW5nZWxpbmtgXG5gaXA2ZXJzcGFuX25ld2xpbmtgXG5gaXA2ZXJzcGFuX2NoYW5nZWxpbmtgXG5gaXA2X3RubF9uZXdsaW5rYFxuYGlwNl90bmxfY2hhbmdlbGlua2BcbmBpcGlwNl9uZXdsaW5rYFxuYGlwaXA2X2NoYW5nZWxpbmtgXG5gaXBncmVfdHVubmVsX2N0bGBcbmB2dGlfdHVubmVsX2N0bGBcbmBpcGlwX3R1bm5lbF9jdGxgXG5gaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWBcbmBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYFxuYGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWBcblxuVGhpcyBsb29rcyBsaWtlIGEgcm9idXN0IGxpc3QgY292ZXJpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBtYWtpbmcgaXQgYSBzb3VuZCBiYXNpcyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJ4oCZbGwgcXVpY2tseSBjaGVjayBpZiBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAgaXMgdXNlZCBhbnl3aGVyZSAqZWxzZSouIE5vLCBpdCdzIG9ubHkgaW4gdGhvc2UgdGhyZWUgdHJhbnNtaXQgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcblxuYE5FVEtJVGBcbmBORVRfSVBJUGBcbmBORVRfSVBHUkVgXG5gTkVUX0lQVlRJYFxuYElQVjZfR1JFYFxuYElQVjZfVFVOTkVMYFxuYElQVjZfU0lUYFxuYElQVjZfVlRJYFxuXG5BbmQgdGhlIGRlcGVuZGVuY2llcz8gYE5FVF9JUF9UVU5ORUxgIGlzIHNlbGVjdGVkIGJ5IGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBhbmQgYE5FVF9JUFZUSWAuIGBJUFY2YCBpcyByZXF1aXJlZCBmb3IgYElQVjZfR1JFYCwgYElQVjZfVFVOTkVMYCwgYElQVjZfU0lUYCwgYW5kIGBJUFY2X1ZUSWAuIEdvb2QsIHRoaXMgY29uZmlybXMgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSBhbmFseXNpcyBhbmQgY29uc2lkZXJhdGlvbnMgb2YgdGhlIHByb21wdCdzIHN1Z2dlc3Rpb25zLCBJJ2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgYW5hbHlzaXMgd2FycmFudHMgZnV6emluZyBvZiB0aGVzZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzNDcsIk91dHB1dFRva2VucyI6Mzc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjQyLjY1NjU0ODQ4OFoiLCJTZXEiOjEwNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODEzMDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUS0lUXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBWVElcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVlRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0a2l0X25ld19saW5rXCIsXG4gICAgXCJuZXRraXRfY2hhbmdlX2xpbmtcIixcbiAgICBcImlwZ3JlX25ld2xpbmtcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwidnRpX25ld2xpbmtcIixcbiAgICBcInZ0aV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwX25ld2xpbmtcIixcbiAgICBcImlwaXBfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fbmV3bGlua1wiLFxuICAgIFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNl90bmxfbmV3bGlua1wiLFxuICAgIFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwNl9uZXdsaW5rXCIsXG4gICAgXCJpcGlwNl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJ2dGlfdHVubmVsX2N0bFwiLFxuICAgIFwiaXBpcF90dW5uZWxfY3RsXCIsXG4gICAgXCJpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcDZfdG5sX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWF4aW11bSBoZWFkcm9vbSBsaW1pdCBmb3IgbmV0a2l0IGFuZCBJUCB0dW5uZWxzIHRvIHByZXZlbnQgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdHVubmVsIGRldmljZXMgdmlhIG5ldGxpbmsgKG5ld2xpbmsvY2hhbmdlbGluaykgYW5kIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29uZmlndXJhdGlvbiBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUS0lUXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBWVElcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVlRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0a2l0X25ld19saW5rXCIsXG4gICAgXCJuZXRraXRfY2hhbmdlX2xpbmtcIixcbiAgICBcImlwZ3JlX25ld2xpbmtcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwidnRpX25ld2xpbmtcIixcbiAgICBcInZ0aV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwX25ld2xpbmtcIixcbiAgICBcImlwaXBfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fbmV3bGlua1wiLFxuICAgIFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNl90bmxfbmV3bGlua1wiLFxuICAgIFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwNl9uZXdsaW5rXCIsXG4gICAgXCJpcGlwNl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJ2dGlfdHVubmVsX2N0bFwiLFxuICAgIFwiaXBpcF90dW5uZWxfY3RsXCIsXG4gICAgXCJpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcDZfdG5sX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWF4aW11bSBoZWFkcm9vbSBsaW1pdCBmb3IgbmV0a2l0IGFuZCBJUCB0dW5uZWxzIHRvIHByZXZlbnQgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdHVubmVsIGRldmljZXMgdmlhIG5ldGxpbmsgKG5ld2xpbmsvY2hhbmdlbGluaykgYW5kIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29uZmlndXJhdGlvbiBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7t7nn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 13:37:57 +0000 UTC FinishedAt: 2026-08-01 14:00:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETKIT", "NET_IPIP", "NET_IPGRE", "NET_IPVTI", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT", "IPV6_VTI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETKIT", "NET_IPIP", "NET_IPGRE", "NET_IPVTI", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT", "IPV6_VTI" ], "series_id": "24c5c8ca-e3b9-405e-8997-6e9d61202074" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "netkit_new_link", "netkit_change_link", "ipgre_newlink", "ipgre_changelink", "erspan_newlink", "erspan_changelink", "vti_newlink", "vti_changelink", "ipip_newlink", "ipip_changelink", "ip6gre_newlink", "ip6gre_changelink", "ip6erspan_newlink", "ip6erspan_changelink", "ip6_tnl_newlink", "ip6_tnl_changelink", "ipip6_newlink", "ipip6_changelink", "ipgre_tunnel_ctl", "vti_tunnel_ctl", "ipip_tunnel_ctl", "ip6gre_tunnel_siocdevprivate", "ip6_tnl_siocdevprivate", "ipip6_tunnel_siocdevprivate" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEtJVCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQVlRJJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVlRJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0a2l0X25ld19saW5rJiMzNDssCiAgICAmIzM0O25ldGtpdF9jaGFuZ2VfbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX25ld2xpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7dnRpX25ld2xpbmsmIzM0OywKICAgICYjMzQ7dnRpX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXBfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O3Z0aV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwaXBfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDssCiAgICAmIzM0O2lwNl90bmxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYXhpbXVtIGhlYWRyb29tIGxpbWl0IGZvciBuZXRraXQgYW5kIElQIHR1bm5lbHMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0dW5uZWwgZGV2aWNlcyB2aWEgbmV0bGluayAobmV3bGluay9jaGFuZ2VsaW5rKSBhbmQgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVhMjczMTQ4YmNlNDUxZmY2NzJmMWI1M2Y1MDY2MDQzNTUxNmE2YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEzOjU2OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbmluZGV4IGEzOTMxY2Q4MjEzMjEuLmQ4ZTljZTFjNjU5ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbkBAIC0yNSw2ICYjNDM7MjUsOCBAQFxuICNkZWZpbmUgTkVUS0lUX05VTV9SWF9RVUVVRVNfUkVBTCAxXG4gI2RlZmluZSBORVRLSVRfTlVNX1RYX1FVRVVFU19SRUFMIDFcbiBcbiYjNDM7I2RlZmluZSBORVRLSVRfSEVBRFJPT01fTUFYIDUxMlxuJiM0MztcbiBzdHJ1Y3QgbmV0a2l0IHtcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2JlZ2luKG5ldGtpdF9mYXN0cGF0aCk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqcGVlcjtcbkBAIC0xMjQ0LDcgJiM0MzsxMjQ2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGtpdF9wb2xpY3lbSUZMQV9ORVRLSVRfTUFYICYjNDM7IDFdID0ge1xuIFx0W0lGTEFfTkVUS0lUX01PREVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX0wzKSxcbiBcdFtJRkxBX05FVEtJVF9QT0xJQ1ldXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtJRkxBX05FVEtJVF9QRUVSX1BPTElDWV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi1cdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cdFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxuJiM0MztcdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTE2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCBORVRLSVRfSEVBRFJPT01fTUFYKSxcbiBcdFtJRkxBX05FVEtJVF9UQUlMUk9PTV1cdFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxuIFx0W0lGTEFfTkVUS0lUX1NDUlVCXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSxcbiBcdFtJRkxBX05FVEtJVF9QRUVSX1NDUlVCXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBORVRLSVRfU0NSVUJfREVGQVVMVCksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5pbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbkBAIC02MjksOCAmIzQzOzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxuIGludCBza2JfdHVubmVsX2NoZWNrX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZW5jYXBfZHN0LFxuIFx0XHRcdCAgaW50IGhlYWRyb29tLCBib29sIHJlcGx5KTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiB7XG4gXHQvKiB3ZSBtdXN0IGNhcCBoZWFkcm9vbSB0byBzb21lIHVwcGVybGltaXQsIGVsc2UgcHNrYl9leHBhbmRfaGVhZFxuIFx0ICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuXG5AQCAtNjQwLDYgJiM0Mzs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgbWF4X2FsbG93ZWQpXG4gXHRcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XG4gXG4mIzQzO1x0cmV0dXJuIGhlYWRyb29tO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4mIzQzO3tcbiYjNDM7XHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4mIzQzO1xuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBSRUFEX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtMzE3LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xuIFx0fVxuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuO1xuJiM0MztcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pO1xuIFx0bXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDApO1xuIFxuIFx0aWYgKG10dSBcdTAwM2MgSVBWNF9NSU5fTVRVKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9ncmUuYyBiL25ldC9pcHY2L2lwNl9ncmUuY1xuaW5kZXggYjg0MzExNmU5YjcwMy4uMDRhYzAwN2ViY2M4NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9ncmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5AQCAtMTEzNyw4ICYjNDM7MTEzNywxMCBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlmIChydC1cdTAwM2Vkc3QuZGV2KSB7XG4tXHRcdFx0dW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGRzdF9sZW47XG4mIzQzO1xuJiM0MztcdFx0XHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgdF9obGVuKTtcbiBcbiBcdFx0XHRpZiAodC1cdTAwM2VkZXYtXHUwMDNlaGVhZGVyX29wcylcbiBcdFx0XHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkc3RfbGVuO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwOC4uNDAzOTk1MjczY2JhZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTUyMiw4ICYjNDM7MTUyMiw5IEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0Mztcbi1cdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7IHRfaGxlbjtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHR0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHR0X2hsZW4pO1xuIFx0XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi1cdTAwM2VtdHUsIElQNl9NQVhfTVRVKTtcbiBcbiBcdFx0XHRtdHUgPSBtdHUgLSB0X2hsZW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xuaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zaXQuY1xuQEAgLTExMzEsNyAmIzQzOzExMzEsNyBAQCBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBtdHUpO1xuIFx0XHRobGVuID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4gXHR9XG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICYjNDM7IGhsZW47XG4mIzQzO1x0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUS0lUJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBWVEkmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRraXRfbmV3X2xpbmsmIzM0OywKICAgICYjMzQ7bmV0a2l0X2NoYW5nZV9saW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDt2dGlfbmV3bGluayYjMzQ7LAogICAgJiMzNDt2dGlfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7dnRpX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7aXBpcF90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXA2X3RubF9zaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1heGltdW0gaGVhZHJvb20gbGltaXQgZm9yIG5ldGtpdCBhbmQgSVAgdHVubmVscyB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHR1bm5lbCBkZXZpY2VzIHZpYSBuZXRsaW5rIChuZXdsaW5rL2NoYW5nZWxpbmspIGFuZCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb24gZW50cnkgcG9pbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWEyNzMxNDhiY2U0NTFmZjY3MmYxYjUzZjUwNjYwNDM1NTE2YTZhMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTM6NTY6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRraXQuYyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jCmluZGV4IGEzOTMxY2Q4MjEzMjEuLmQ4ZTljZTFjNjU5ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGtpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jCkBAIC0yNSw2ICYjNDM7MjUsOCBAQAogI2RlZmluZSBORVRLSVRfTlVNX1JYX1FVRVVFU19SRUFMIDEKICNkZWZpbmUgTkVUS0lUX05VTV9UWF9RVUVVRVNfUkVBTCAxCiAKJiM0MzsjZGVmaW5lIE5FVEtJVF9IRUFEUk9PTV9NQVggNTEyCiYjNDM7CiBzdHJ1Y3QgbmV0a2l0IHsKIAlfX2NhY2hlbGluZV9ncm91cF9iZWdpbihuZXRraXRfZmFzdHBhdGgpOwogCXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICpwZWVyOwpAQCAtMTI0NCw3ICYjNDM7MTI0Niw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRraXRfcG9saWN5W0lGTEFfTkVUS0lUX01BWCAmIzQzOyAxXSA9IHsKIAlbSUZMQV9ORVRLSVRfTU9ERV0JCT0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX0wzKSwKIAlbSUZMQV9ORVRLSVRfUE9MSUNZXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtJRkxBX05FVEtJVF9QRUVSX1BPTElDWV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAotCVtJRkxBX05FVEtJVF9IRUFEUk9PTV0JCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKJiM0MzsJW0lGTEFfTkVUS0lUX0hFQURST09NXQkJPSBOTEFfUE9MSUNZX01BWChOTEFfVTE2LAomIzQzOwkJCQkJCQkgTkVUS0lUX0hFQURST09NX01BWCksCiAJW0lGTEFfTkVUS0lUX1RBSUxST09NXQkJPSB7IC50eXBlID0gTkxBX1UxNiB9LAogCVtJRkxBX05FVEtJVF9TQ1JVQl0JCT0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX1NDUlVCX0RFRkFVTFQpLAogCVtJRkxBX05FVEtJVF9QRUVSX1NDUlVCXQk9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAppbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCkBAIC02MjksOCAmIzQzOzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLAogaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsCiAJCQkgIGludCBoZWFkcm9vbSwgYm9vbCByZXBseSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgdW5zaWduZWQgaW50IGhlYWRyb29tKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiB7CiAJLyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWQKIAkgKiB3aWxsIG92ZXJmbG93IGhlYWRlciBvZmZzZXRzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4KQEAgLTY0MCw2ICYjNDM7NjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGhlYWRyb29tICZndDsgbWF4X2FsbG93ZWQpCiAJCWhlYWRyb29tID0gbWF4X2FsbG93ZWQ7CiAKJiM0MzsJcmV0dXJuIGhlYWRyb29tOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiYjNDM7ewomIzQzOwloZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiYjNDM7CiAJaWYgKGhlYWRyb29tICZndDsgUkVBRF9PTkNFKGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tKSkKIAkJV1JJVEVfT05DRShkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwppbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwpAQCAtMzE3LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQltdHUgPSBtaW4odGRldi0mZ3Q7bXR1LCBJUF9NQVhfTVRVKTsKIAl9CiAKLQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuOwomIzQzOwlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7CiAJbXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIDogMCk7CiAKIAlpZiAobXR1ICZsdDsgSVBWNF9NSU5fTVRVKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IGI4NDMxMTZlOWI3MDMuLjA0YWMwMDdlYmNjODcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTExMzcsOCAmIzQzOzExMzcsMTAgQEAgc3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsCiAJCQlyZXR1cm47CiAKIAkJaWYgKHJ0LSZndDtkc3QuZGV2KSB7Ci0JCQl1bnNpZ25lZCBzaG9ydCBkc3RfbGVuID0gcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOwotCQkJCQkJIHRfaGxlbjsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgZHN0X2xlbjsKJiM0MzsKJiM0MzsJCQlkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LSZndDtkc3QuZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKJiM0MzsJCQkJCQkJICAgdF9obGVuKTsKIAogCQkJaWYgKHQtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcykKIAkJCQlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwOC4uNDAzOTk1MjczY2JhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTUyMiw4ICYjNDM7MTUyMiw5IEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpCiAJCQl0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHQtJmd0O25ldCwgcC0mZ3Q7bGluayk7CiAKIAkJaWYgKHRkZXYpIHsKLQkJCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gdGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7Ci0JCQkJdGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tICYjNDM7IHRfaGxlbjsKJiM0MzsJCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKJiM0MzsJCQkJCQkJCQl0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0MzsKJiM0MzsJCQkJCQkJCQl0X2hsZW4pOwogCQkJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LSZndDttdHUsIElQNl9NQVhfTVRVKTsKIAogCQkJbXR1ID0gbXR1IC0gdF9obGVuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBtdHUpOwogCQlobGVuID0gdGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtJmd0O25lZWRlZF9oZWFkcm9vbTsKIAl9Ci0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gJiM0MzsgaGxlbjsKJiM0MzsJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWwgKnQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIZWFkcm9vbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgaGVhZHJvb20gbGltaXRzIHdpdGhpbiBhIGZldyB0dW5uZWxpbmcgcHJvdG9jb2xzLiBJdCBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcHJldmVudGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgLiBUaGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGBORVRLSVRfSEVBRFJPT01fTUFYYCBhbmQgYXJlIGNhcHBpbmcgYElGTEFfTkVUS0lUX0hFQURST09NYCB0byBpdCwgYW5kIHRoZSBuZXcgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSgpYCBmdW5jdGlvbiBpcyBiZWluZyBhcHBsaWVkIGluIHNldmVyYWwgcGxhY2VzOiBgaXBfdHVubmVsYCwgYGlwNl9ncmVgLCBgaXA2X3R1bm5lbGAsIGFuZCBgc2l0YC4gVGhpcyBtYWtlcyBzZW5zZTsgZXhjZXNzIGhlYWRyb29tIGNhbiBiZSBhIG5hc3R5IHNvdXJjZSBvZiBwcm9ibGVtcywgYW5kIGNhcHBpbmcgaXQgaXMgYSBnb29kIHByZXZlbnRhdGl2ZSBtZWFzdXJlLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGZvY3VzIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uCgoqICAgRm9yIGBuZXRraXRgLCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBmaWxlIGlzIGBkcml2ZXJzL25ldC9uZXRraXQuY2AgYW5kIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfTkVUS0lUYC4gU2ltcGxlIGVub3VnaC4KKiAgIGBpcF90dW5uZWxgJiMzOTtzIGNvZGUgcmVzaWRlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsLmNgLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09ORklHX05FVF9JUElQYCwgYENPTkZJR19ORVRfSVBHUkVgLCBhbmQgc28gb24uIFJpZ2h0LCBzbyBpdCBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyB0dW5uZWwgdHlwZS4KKiAgIGBpcDZfZ3JlYCBpcyBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYCwgd2hpY2ggcmVxdWlyZXMgYENPTkZJR19JUFY2X0dSRWAuCiogICBgaXA2X3R1bm5lbGAsIHNpbWlsYXJseSwgaXMgZm91bmQgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGRlcGVuZHMgb24gYENPTkZJR19JUFY2X1RVTk5FTGAuCiogICBBbmQgZmluYWxseSwgYHNpdGAgaXMgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2l0LmNgLCBjb250cm9sbGVkIGJ5IGBDT05GSUdfSVBWNl9TSVRgLgoKT2theSwgSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgZXhhbWluZSB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlc2Ugb3B0aW9ucyBub3cgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgZnVsbHkuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnQgZm9yIGRpZ2dpbmcgaW50byB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEtJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz00NTM9Y29uZmlnIE5MTU9OXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NjItXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2Mzpjb25maWcgTkVUS0lUXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cdGJvb2wgXCYjMzQ7QlBGLXByb2dyYW1tYWJsZSBuZXR3b3JrIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYmVzaWRlcyB0aGUgb25lcyBJJiMzOTt2ZSBhbHJlYWR5IGV4YW1pbmVkLiBUaGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCB3b3VsZCBiZSB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIElQdjQgYW5kIElQdjYuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbC4gU28sIEkmIzM5O2xsIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgIHRvIHNlZSB3aGF0IGVsc2UgaXMgaW4gdGhlcmUuIEkgYmV0IHRoZXkmIzM5O2xsIGhhdmUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfR1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDb25zaWRlcmluZyBJUHY2IFR1bm5lbGluZyBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi5JJiMzOTttIG11bGxpbmcgb3ZlciBJUHY2IHR1bm5lbGluZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcgYXJvdW5kIGBJUFY2X1NJVGAgYW5kIGBJUFY2X1RVTk5FTGAuIE9mIGNvdXJzZSwgdGhpcyBpcyBqdXN0IGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBvYnZpb3VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNvbmNlcHQgSSBuZWVkIHRvIGFkZHJlc3MgaXMgdGhlIG1lY2hhbmlzbSBmb3IgZW5jYXBzdWxhdGluZyBJUHY2IHBhY2tldHMgd2l0aGluIElQdjQgcGFja2V0cywgb3IgcG90ZW50aWFsbHkgd2l0aGluIGFub3RoZXIgdHJhbnNwb3J0IHByb3RvY29sIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHJpZ2h0PyBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgdGhlIG51YW5jZSBiZXR3ZWVuIHRoZSB0d28uIGBJUFY2X1NJVGAgaXMgdGhlICYjMzQ7U2ltcGxlIEludGVybmV0IFRyYW5zaXRpb24mIzM0OyBwcm90b2NvbC4gSXQmIzM5O3MgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCwgb2Z0ZW4gdGhvdWdodCBvZiBhcyBhIHN0YXRpYyB0dW5uZWwuIE5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnksIGRvZXMgaXQgcmVxdWlyZSBleHBsaWNpdCBjb25maWd1cmF0aW9uIGF0IGJvdGggdHVubmVsIGVuZHBvaW50cz8gVGhhdCB3b3VsZCBpbXBseSBhIGZpeGVkIHR1bm5lbCBkZXN0aW5hdGlvbiwgeWVhaD8gQW5kIHdoYXQgYWJvdXQgdGhlIG92ZXJoZWFkPyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gbWFraW5nIGEgc2VsZWN0aW9uIGZvciBhIGN1cnJlbnQgcHJvamVjdC4gSXMgdGhlcmUgYSBiZXR0ZXIgYXBwcm9hY2g/IE1heWJlIHRoZXJlJiMzOTtzIGEgcmVhc29uIHRvIHVzZSBgSVBWNl9UVU5ORUxgIG92ZXIgaXQuIGBJUFY2X1RVTk5FTGAgcHJvYmFibHkgZW5jb21wYXNzZXMgYSBicm9hZGVyIHJhbmdlIG9mIG9wdGlvbnMsIGFsbG93aW5nIGZvciBkeW5hbWljIHR1bm5lbCBlc3RhYmxpc2htZW50IG9yIGRpZmZlcmVudCBlbmNhcHN1bGF0aW9uIG1ldGhvZHMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgZGV0YWlscywgYnV0IG15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdGhhdCBgSVBWNl9UVU5ORUxgIGlzIHByb2JhYmx5IG1vcmUgZmxleGlibGUuIE9rYXksIEkmIzM5O2xsIHJldmlldyBteSBub3RlcyBvbiB0aGlzIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMga2V5IHRvIHNlbGVjdGluZyB0aGUgbW9zdCBlZmZpY2llbnQgdHJhbnNpdGlvbiBtZXRob2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfU0lUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzoKCioqRXhhbWluaW5nIElQdjQgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgYWdhaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NCB0dW5uZWxpbmcuIEkmIzM5O20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgTkVUX0lQSVBgIGFuZCBgTkVUX0lQR1JFYC4gVGhlc2UgYXJlLCBvZiBjb3Vyc2UsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeW1ib2xzIHRoYXQgY29udHJvbCB3aGV0aGVyIHN1cHBvcnQgZm9yIElQSVAgKElQLWluLUlQKSBhbmQgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgdHVubmVscywgcmVzcGVjdGl2ZWx5LCBhcmUgY29tcGlsZWQgaW50byB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrLiBTbywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIHRvIGVuYWJsZSwgYXMgdGhlc2Ugd2lsbCBhZmZlY3Qga2VybmVsIHNpemUgYW5kIHJlc291cmNlIHVzYWdlLiBJIGtub3cgdGhlIG51YW5jZXMgb2YgdXNpbmcgdGhlc2UsIGluY2x1ZGluZyBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoIGRpZmZlcmVudCBoYXJkd2FyZS4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFzc2Vzc2luZyB0aGUgSVB2NCB0dW5uZWwgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUElQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUDogdHVubmVsaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBJUEdSRSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIGBORVRfSVBHUkVgLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIHR1bm5lbHMsIHJpZ2h0PyBUaGUgY2xhc3NpYywgUkZDIDI3ODQgYW5kIGFsbCB0aGF0LiBJdCYjMzk7cyBhbiBJUCBwcm90b2NvbCwgc28gdGhlIGltcGxpY2F0aW9uIGlzIExheWVyIDMgZW5jYXBzdWxhdGlvbiwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHdheSB0byB0cmFuc3BvcnQgcGFja2V0cyB0aGF0IG1pZ2h0IGJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXR3b3JrJiMzOTtzIG5hdGl2ZSBwcm90b2NvbHMgb3IgdG9wb2xvZ2llcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYXJvdW5kIHNjZW5hcmlvcyB3aGVyZSB5b3UgbmVlZCB0byBnZXQgYXJvdW5kIG5ldHdvcmsgcmVzdHJpY3Rpb25zLCBtYXliZSB0dW5uZWxpbmcgSVB2NiBvdmVyIGFuIElQdjQgbmV0d29yaywgb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MgdGhhdCB3b3VsZG4mIzM5O3Qgbm9ybWFsbHkgdGFsayB0byBlYWNoIG90aGVyIGRpcmVjdGx5LgoKSSYjMzk7bSBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgLSB0aGUgYWRkaXRpb25hbCBJUCBoZWFkZXIgZm9yIGVuY2Fwc3VsYXRpb24gaXRzZWxmLiBUaGF0IGFkZHMgdG8gdGhlIHBhY2tldCBzaXplLCBpbXBhY3RpbmcgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS4gVGhpcyBhbHNvIG1lYW5zIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgcGxhbmUg4oCTIHdoYXQgcm91dGluZyBwcm90b2NvbCBpcyBiZWluZyB1c2VkIG92ZXIgdGhpcyB0dW5uZWw/IFN0YXRpYyByb3V0ZXM/IER5bmFtaWMsIGxpa2UgT1NQRiBvciBCR1A/IEFuZCB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBmcm9udCBhbmQgY2VudGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW5oZXJlbnQgaW4gYW55IHR1bm5lbCAtIG5vdCBvbmx5IHNob3VsZCBpdCBiZSBlbmNyeXB0ZWQsIGJ1dCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgYWNjZXNzIGNvbnRyb2xzIGFuZCBwb3RlbnRpYWwgRG9TIGF0dGFja3MuIFRoZSBmYWN0IHRoYXQgdGhlIEdSRSB0dW5uZWwgaXRzZWxmIGRvZXNuJiMzOTt0IG9mZmVyIGVuY3J5cHRpb24gcmlnaHQgb3V0IG9mIHRoZSBib3ggbWVhbnMgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHdoZXJlIHRoYXQgZXh0cmEgbGF5ZXIgaXMgYmVpbmcgaW1wbGVtZW50ZWQuIElzIGl0IElQU2VjIG9uIHRvcCwgb3Igc29tZSBvdGhlciBzb2x1dGlvbj8KCkZ1bmN0aW9uYWxseSwgSSBzdGFydCB0byBhbmFseXplIG15IG9wdGlvbnMuIFdoYXQgYXJlIHRoZSBhZHZhbnRhZ2VzIG9mIHVzaW5nIEdSRT8gVGhlIGRpc2FkdmFudGFnZXM/IFdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgc3BlY2lmaWMgbmV0d29yayBlbnZpcm9ubWVudD8gSXMgaXQgYSBwb2ludC10by1wb2ludCBzaXR1YXRpb24sIG9yIGEgbXVsdGktcG9pbnQgdG9wb2xvZ3k/IFRoZSBjaG9pY2UgaXMgbWFkZSBiYXNlZCBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCB0aGUgbmVjZXNzaXR5IGZvciB0dW5uZWxpbmcgaW4gZ2VuZXJhbC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wYWN0IG9uIG5ldHdvcmsgZGlhZ25vc3RpY3MuIFBhY2tldCBjYXB0dXJlcyBhcmUgYWx3YXlzIGdvaW5nIHRvIGJlIHBhcnQgb2YgbXkgdG9vbHNldC4KCkkmIzM5O20gYXNzZXNzaW5nIGl0cyBzdWl0YWJpbGl0eSBmb3IgdmFyaW91cyB1c2UgY2FzZXMgYW5kIGl0cyBpbmhlcmVudCBsaW1pdGF0aW9ucy4gSSBjb25zaWRlciBpZiBvdGhlciB0dW5uZWxpbmcgbWVjaGFuaXNtcyBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgd29ya2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHN0ZXBzLCBjaGVja2luZyBmb3IgcG90ZW50aWFsIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzLCBhbmQgZm9ybWluZyBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Qgb2YgdGhpbmdzIHRvIHZlcmlmeSBpbiBhIGxpdmUgZGVwbG95bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUEdSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O0lQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGVzZSBtb2RpZmljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZGlmZiBpbmRpY2F0ZXMgdGhlc2UgZnVuY3Rpb25zIHdlcmUgdG91Y2hlZDogYG5ldGtpdC5jYCwgYGlwX3R1bm5lbC5jYCwgYGlwNl9ncmUuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYHNpdC5jYC4gUmlnaHQsIHNvIG5vdGhpbmcgZGlyZWN0bHkgY2hhbmdlZCBpbiB0aGUgYG5ldGtpdGAgZnVuY3Rpb25zLiBUaGUgYG5ldGtpdF9wb2xpY3lgIGFycmF5IGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhpcyBjaGFuZ2UgaXMgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYnV0IGluZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyB0aGUgbmV0bGluayBwYXJzZXIgd29ya3MuIE5vdGVkLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBvdGhlciBmaWxlcy4gU3BlY2lmaWNhbGx5LCBgaXBfdHVubmVsX2JpbmRfZGV2YCwgYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgLCBgaXA2X3RubF9saW5rX2NvbmZpZ2AsIGFuZCBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCAtIGFsbCBrZXkgZnVuY3Rpb25zIGZvciB0dW5uZWwgYW5kIGludGVyZmFjZSBtYW5hZ2VtZW50LiBJIHNob3VsZCBsb29rIGludG8gd2hldGhlciBvciBub3QgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWNhbGx5IC0gYGlwX3R1bm5lbF9iaW5kX2RldmAgaGFzIGJlZW4gbGlzdGVkIGFzIGEgZnVuY3Rpb24gbW9kaWZpZWQsIHNvIEkmIzM5O2xsIGNoZWNrIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmM9MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqX19pcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yNzktXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoyODA6c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI4MS17XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDItXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6XHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0NC1cdGVyciA9IGRldl9zZXRfbXR1KGRldiwgbXR1KTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz04NjI9c3RhdGljIHZvaWQgaXBfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg4OC1cdFx0dC1cdTAwM2Vmd21hcmsgPSBmd21hcms7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo4ODk6XHRcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtODkwLVx0XHRpZiAoc2V0X210dSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTI1PWludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaXBfdG5sX25ldF9pZCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTU1LVx0XHRpdG4tXHUwMDNlZmJfdHVubmVsX2Rldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE1NjpcdFx0aXRuLVx1MDAzZWZiX3R1bm5lbF9kZXYtXHUwMDNlbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGl0bi1cdTAwM2VmYl90dW5uZWxfZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTctXHRcdGlwX3R1bm5lbF9hZGQoaXRuLCBuZXRkZXZfcHJpdihpdG4tXHUwMDNlZmJfdHVubmVsX2RldikpO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTU9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjI0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIyNTpcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIyNi1cdGlmICh0YltJRkxBX01UVV0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVAgVHVubmVsIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcF90dW5uZWxfYmluZF9kZXZgLiBUaGF0IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHN0YXRpY2FsbHkgZGVmaW5lZCwgYW5kIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIGludm9rZWQgYnkgYSBoYW5kZnVsIG9mIGtleSBmdW5jdGlvbnM6IGBpcF90dW5uZWxfY3JlYXRlYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBgaXBfdHVubmVsX2luaXRfbmV0YCwgYW5kIGBpcF90dW5uZWxfbmV3bGlua2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyB0byBjb25zaWRlci4KCk5vdywgSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGlwX3R1bm5lbF9uZXdsaW5rYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSBtaWdodCBiZSBleHBvcnRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGF0LCBzbyBsZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTM9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2RlbGV0ZV9uZXQpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTYtXHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkxpbmsgQ29uZmlndXJhdGlvbiBhbmQgUm91dGluZyBmb3IgSVAgVHVubmVscyoqCgpSaWdodCwgc28gYGlwX3R1bm5lbF9uZXdsaW5rYCBpcyBkZWZpbml0ZWx5IGFuIGV4cG9ydGVkIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyB0aGUgY29yZSBwcmltaXRpdmUgZm9yIGNyZWF0aW5nIG5ldyBJUCB0dW5uZWwgaW50ZXJmYWNlcywgc28gSSBuZWVkIHRvIGtlZXAgaXQgaW4gbWluZCBhcyBJIHdvcmsuIEJ1dCBub3cgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBicm9hZGVyOiB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHNpZGU/IEkmIzM5O20gY3VyaW91cyBhYm91dCBob3cgcm91dGVzIGFyZSBoYW5kbGVkIGFzIHRoZXNlIHR1bm5lbHMgYXJlIHNldCB1cC4gTGV0IG1lIGRpZyBpbnRvIHRoZSByZWxhdGVkIGNvZGViYXNlIGFuZCBjb25zaWRlciBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAuIElzIHRoaXMgYWxzbyBleHBvcnRlZD8gSXTigJlzIHByb2JhYmx5IGEgZnVuY3Rpb24gaW52b2x2ZWQgd2l0aCBjb25maWd1cmluZyB0aGUgcm91dGluZyBmb3IgR1JFIHR1bm5lbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl04oCZcyBhIG5lY2Vzc2FyeSBmdW5jdGlvbiBhcyB3ZWxsLiBBcmUgdGhlcmUgb3RoZXIgYW5hbG9nb3VzIHJvdXRpbmcgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gYmUgY29uc2lkZXJlZD8gQW5kIHdoYXQgYXJlIHRoZSBicm9hZGVyIHJvdXRpbmcgaW1wbGljYXRpb25zIG9mIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aGVzZSB0dW5uZWxzIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgb2YgYGlwX3R1bm5lbF9uZXdsaW5rYCBhbmQgcm91dGluZyBjb25maWcsIGFzIHRoaXMgaXMgYSBjb3JlIHBpZWNlIG9mIHRoZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MTA4OD1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXHRcdFx0XHRcdCBpbnQgdF9obGVuKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTg0PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTg2LVx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4NzpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4OC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNTI9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTQtXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjU1Olx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZlcnNwYW5fY2FsY19obGVuKHQpKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlN0YXRpYyBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYGlwNmdyZV90bmxfbGlua19jb25maWdgIGFuZCBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQgc3RhdGljYWxseS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvICp3aHkqIHRoZXkmIzM5O3JlIHN0YXRpYyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuIFRoaXMgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGEgYmFkIHRoaW5nLCBidXQgaXQgZG9lcyBtZWFuIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMsIHBvdGVudGlhbGx5IHByZS1kZXRlcm1pbmVkIHNldHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIGNob2ljZXMgYmVoaW5kIHRoYXQgc3RhdGljIGltcGxlbWVudGF0aW9uIOKAkyBpcyBpdCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgcmVxdWlyZW1lbnQgb2YgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgb3IgcHJvdG9jb2wsIGEgc2ltcGxpY2l0eSB0cmFkZS1vZmYsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhY2UsIGxpa2VseSBsb29raW5nIGF0IHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGRhdGEgc3RydWN0dXJlcywgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBiZWhhdmlvciByZWxhdGVkIHRvIHRob3NlIHN0YXRpYyBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBob3cgdGhlc2Ugc3RhdGljIHZhbHVlcyBhcmUgdXNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2Z3JlX3RubF9saW5rX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9Nzk9c3RhdGljIHZvaWQgaXA2Z3JlX3R1bm5lbF9saW5rKHN0cnVjdCBpcDZncmVfbmV0ICppZ24sIHN0cnVjdCBpcDZfdG5sICp0KTtcbm5ldC9pcHY2L2lwNl9ncmUuYzo4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtODEtc3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0zMTU9c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZncmVfdHVubmVsX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTM1Mi1cbm5ldC9pcHY2L2lwNl9ncmUuYzozNTM6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnKG50LCAxKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0zNTQtXHRpcDZncmVfdHVubmVsX2xpbmsoaWduLCBudCk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTkxNz1zdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTEwODctXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTA4ODpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDg5LXtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXHRcdFx0XHRcdCBpbnQgdF9obGVuKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTY3PXN0YXRpYyBpbnQgaXA2Z3JlX2NhbGNfaGxlbihzdHJ1Y3QgaXA2X3RubCAqdHVubmVsKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTgzLVxubmV0L2lwdjYvaXA2X2dyZS5jOjExODQ6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NS17XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4NjpcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjExODc6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmdyZV9jYWxjX2hsZW4odCkpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTExODgtfVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMjEzPXN0YXRpYyBpbnQgaXA2Z3JlX3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTIxNi1cdGlwNmdyZV90bmxfY29weV90bmxfcGFybSh0LCBwKTtcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMjE3Olx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyh0LCBzZXRfbXR1KTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjE4LVx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTE5Nzk9c3RhdGljIGludCBpcDZncmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDAyLVx0aWYgKCFlcnIpIHtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDAzOlx0XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnKG50LCAhdGJbSUZMQV9NVFVdKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDA0LVx0XHRpcDZncmVfdHVubmVsX2xpbmtfbWQoaWduLCBudCk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNTI9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1My17XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NDpcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjIyNTU6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmVyc3Bhbl9jYWxjX2hsZW4odCkpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgSVA2R1JFIEludGVyZmFjZSBDcmVhdGlvbiBQcm9jZXNzKioKClJpZ2h0LCBzbywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaXA2Z3JlX25ld2xpbmtgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMsIGlzbiYjMzk7dCBpdD8gVGhlIGVudHJ5IHBvaW50LiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgZ3VuIGZvciBicmluZ2luZyB1cCBhIG5ldyBHUkUgdHVubmVsIHdpdGggSVB2NiBlbmNhcHN1bGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGtlcm5lbCYjMzk7cyBkYXRhIHN0cnVjdHVyZXMgYW5kIGZsb3cuIEkga25vdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yLCBhdCBhIGhpZ2ggbGV2ZWwsIGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgbmV0bGluayBtZXNzYWdlLCBpbml0aWFsaXppbmcgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGFzc29jaWF0ZWQgcHJvdG9jb2wgaGFuZGxlciwgYW5kIGJpbmRpbmcgaXQgYWxsIHRvZ2V0aGVyLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gcHJvcGFnYXRlcywgd2hhdCBob29rcyBhbmQgY2FsbGJhY2tzIGFyZSByZWdpc3RlcmVkLCBhbmQgd2hhdCBlcnJvciBjaGVja2luZyBpcyBkb25lIGF0IHRoaXMgaW5pdGlhbCBzdGFnZS4gVWx0aW1hdGVseSwgdGhpcyBwb2ludCBpcyBjcml0aWNhbC4gR2V0IHRoaXMgd3JvbmcsIGFuZCB0aGUgZW50aXJlIEdSRSBJUHY2IHR1bm5lbCBpbXBsZW1lbnRhdGlvbiB3aWxsIGZhbGwgYXBhcnQgYXQgdGhlIHNlYW1zLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW50ZXJuYWxzLiBJIGNhbiBndWVzcyBJIHdpbGwgYmUgbmVlZGluZyB0byBsb29rIGNsb3NlbHkgYXQgaXRzIGFyZ3VtZW50IGhhbmRsaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aGF0IGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MTkxMj1zdGF0aWMgYm9vbCBpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NDQtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTk0NTpzdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0ICpsaW5rX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTQ2LVx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk3OC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTc5OnN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTgwLVx0XHRcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAwMC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDAxOlx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDAyLVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjIyMD1zdGF0aWMgaW50IGlwNmVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDItXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI0MzpcdGVyciA9IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihuZXQsIGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI0NC1cdGlmICghZXJyKSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjk3LVx0LnZhbGlkYXRlXHQ9IGlwNmdyZV90dW5uZWxfdmFsaWRhdGUsXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5ODpcdC5uZXdsaW5rXHQ9IGlwNmdyZV9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTktXHQuY2hhbmdlbGlua1x0PSBpcDZncmVfY2hhbmdlbGluayxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjMwNj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxMi1cdC52YWxpZGF0ZVx0PSBpcDZncmVfdGFwX3ZhbGlkYXRlLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMTM6XHQubmV3bGlua1x0PSBpcDZncmVfbmV3bGluayxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzE0LVx0LmNoYW5nZWxpbmtcdD0gaXA2Z3JlX2NoYW5nZWxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjYxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQdjYgR1JFIE5ld2xpbmsgQ2FsbGJhY2sqKgoKQWxyaWdodCwgc28gYGlwNmdyZV9uZXdsaW5rYC4uLiB0aGF0JiMzOTtzIGEgKm5ld2xpbmsqIGNhbGxiYWNrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBzbyB3aGF0IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT8mIzM0OyBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgd2hlcmUgYSBuZXcgSVB2NiBHUkUgdHVubmVsIGlzIGJlaW5nIHNldCB1cCwgY3JlYXRlZCwgb3IgY29uZmlndXJlZC4gVGhlIGtleSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGRlZmluZWQsIGFuZCBob3cgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/CgpBbmQgdGhhdCBsaW5lIG9mIHRoaW5raW5nLCBxdWlja2x5IGxlYWRzIG1lIHRvIHRoZSBvYnZpb3VzIGZpbGU6IGBpcDZfdHVubmVsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgKmV4cGVjdCogdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NiB0dW5uZWxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZXdsaW5rYCBjYWxsIGlzIHVzZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciB0dW5uZWwtcmVsYXRlZCBmdW5jdGlvbnMsIGFuZCB3aGF0IHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIGxpa2VseSBtYW5pcHVsYXRpbmcuIFNvLCBsZXQgbWUgZ28gaGF2ZSBhIGxvb2sgYXQgYGlwNl90dW5uZWwuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfbGlua19jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE0MzY9aXA2X3RubF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTQ3NDpzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzUte1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNTUxPWlwNl90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjItXHRkc3RfY2FjaGVfcmVzZXQoXHUwMDI2dC1cdTAwM2Vkc3RfY2FjaGUpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NjM6XHRpcDZfdG5sX2xpbmtfY29uZmlnKHQpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjQtfVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTc0PXN0YXRpYyBpbnQgaXA2X3RubF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTgwLVx0XHRyZXR1cm4gZXJyO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5ODE6XHRpcDZfdG5sX2xpbmtfY29uZmlnKHQpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5ODItXHRpZiAodC1cdTAwM2VwYXJtcy5jb2xsZWN0X21kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhvc2Uga2VybmVsIGZ1bmN0aW9uczoKCioqS2VybmVsIEZ1bmN0aW9uIENvbnNpZGVyYXRpb25zOiBgaXA2X3RubF9kZXZfaW5pdGAgYW5kIGBpcDZfdG5sX2NoYW5nZWAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIHdvcmtpbmdzIG9mIElQdjYgdHVubmVsaW5nIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIG15IG1pbmQgaXMgZHJhd24gdG8gdHdvIGNydWNpYWwgZnVuY3Rpb25zOiBgaXA2X3RubF9kZXZfaW5pdGAgYW5kIGBpcDZfdG5sX2NoYW5nZWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGBpcDZfdG5sX2Rldl9pbml0YCBhcyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYSB0dW5uZWwgZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGlzIGVzdGFibGlzaGVkIOKAkyBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGluZyByZXNvdXJjZXMsIGFuZCBnZXR0aW5nIHRoZSB0dW5uZWwgaW50ZXJmYWNlIHJlYWR5IGZvciB0cmFmZmljLiBJJiMzOTttIGNvbnNpZGVyaW5nIHdoYXQgYXNwZWN0cyBvZiB0aGUgdHVubmVsIGFyZSBzZXQgdXAgYXQgdGhpcyBwb2ludDogdGhlIGxpbmstbGF5ZXIgcGFyYW1ldGVycywgcm91dGluZyB0YWJsZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZXMuIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGVzcGVjaWFsbHkgaWYgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgZGV2aWNlIGNyZWF0aW9uLgoKTXkgdGhvdWdodHMgdGhlbiBzaGlmdCB0byBgaXA2X3RubF9jaGFuZ2VgLiBUaGlzLCBJIGFzc3VtZSwgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgdHVubmVsIGRldmljZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBiZWNhdXNlIGFueSBjaGFuZ2UgdG8gdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGNvdWxkIHRyaWdnZXIgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgdG8gdGhlIHR1bm5lbCYjMzk7cyBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzLCBNVFUsIG9yIGVuY2Fwc3VsYXRpb24gbWV0aG9kLiBXaGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBhIHNlYW1sZXNzIHRyYW5zaXRpb24gd2l0aG91dCBkaXNydXB0aW5nIG9uZ29pbmcgdHJhZmZpYz8gQXJlIHRoZXJlIHByb3BlciBsb2NraW5nIHByaW1pdGl2ZXMgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIHN0YXRlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2VsbCBpdCBoYW5kbGVzIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLiBBbHNvLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhbmQgdGhlIGZsb3cgY29udHJvbC4gV2hhdCBraW5kIG9mIHZhbGlkYXRpb24gaGFwcGVucyB0byBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgdmFsaWQsIGFuZCBkbyB0aGV5IGFsaWduIHdpdGggZXN0YWJsaXNoZWQgbmV0d29yayBwb2xpY2llcyBvciBzZWN1cml0eSBydWxlcz8gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHN0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCBzZWN1cml0eS4gSXQmIzM5O3MgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2Ygb3VyIHdvcms7IEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2Rldl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz03ND1zdGF0aWMgdTMyIEhBU0goY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODAtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6ODE6c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgyLXN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4Nzk6XHQubmRvX2luaXRcdD0gaXA2X3RubF9kZXZfaW5pdCxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODgwLVx0Lm5kb191bmluaXRcdD0gaXA2X3RubF9kZXZfdW5pbml0LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTAzPXN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5MjYtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTkyNzogKiBpcDZfdG5sX2Rldl9pbml0X2dlbiAtIGdlbmVyYWwgaW5pdGlhbGl6ZXIgZm9yIGFsbCB0dW5uZWwgZGV2aWNlc1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5MjgtICogICBAZGV2OiB2aXJ0dWFsIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdHVubmVsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5MzE9c3RhdGljIGlubGluZSBpbnRcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTMyOmlwNl90bmxfZGV2X2luaXRfZ2VuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTkzMy17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5NjktLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk3MDogKiBpcDZfdG5sX2Rldl9pbml0IC0gaW5pdGlhbGl6ZXIgZm9yIGFsbCBub24gZmFsbGJhY2sgdHVubmVsIGRldmljZXNcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTcxLSAqICAgQGRldjogdmlydHVhbCBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHR1bm5lbFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTczLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5NzQ6c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3NS17XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3Ni1cdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTc3Olx0aW50IGVyciA9IGlwNl90bmxfZGV2X2luaXRfZ2VuKGRldik7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVHVubmVsIERldmljZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBpcDZfdG5sX2Rldl9pbml0YCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBOZXR3b3JrIERldmljZSBPcGVyYXRvciAoTkRPKSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgYG5kb19pbml0YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXTigJlzIHRoZSBzdGFuZGFyZCB3YXkgd2UmIzM5O3JlIHNldHRpbmcgdXAgdGhlIGZvdW5kYXRpb24gZm9yIElQdjYgdHVubmVsIGRldmljZXMuIEJ1dCwgdGhhdCBjb25uZWN0aW9uIG1ha2VzIG1lIHRoaW5rLi4uIHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgY29udGV4dD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoaWNoIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFmZmVjdGVkIHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIG15IGFyZWEgb2YgZXhwZXJ0aXNlLgoKTXkgY29uY2VybiBpcyB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgc2l0LmNgLiBJcyB0aGUgaW1wbGVtZW50YXRpb24gZm9sbG93aW5nIHRoZSBSRkMgc3RhbmRhcmRzPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBJUHY2LWluLUlQdjQgdHVubmVsIGNvZGUgd2l0aCB0aGUgYnJvYWRlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY2xhc2hlcyBvciByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBnaXZlbiB0aGF0IGBzaXQuY2AgaGFuZGxlcyBhIGRpZmZlcmVudCBzcGVjaWZpYyB0eXBlIG9mIHR1bm5lbCB0aGFuIHRoZSBtb3JlIGdlbmVyYWwgc2V0dXA/IEkgbmVlZCB0byBjaGVjayBob3cgdGhleSBmaXQgdG9nZXRoZXIgdG8gZW5zdXJlIG5vIHVuZXhwZWN0ZWQgcHJvYmxlbXMgYXJpc2UuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmM9MTA2ND1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2l0X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTA5NC1cbm5ldC9pcHY2L3NpdC5jOjEwOTU6c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9zaXQuYy0xMDk2LXtcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xMTM3PXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xMTU2LVx0XHR0LVx1MDAzZWZ3bWFyayA9IGZ3bWFyaztcbm5ldC9pcHY2L3NpdC5jOjExNTc6XHRcdGlwaXA2X3R1bm5lbF9iaW5kX2Rldih0LVx1MDAzZWRldik7XG5uZXQvaXB2Ni9zaXQuYy0xMTU4LVx0fVxuLS1cbm5ldC9pcHY2L3NpdC5jPTE0NDM9c3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L3NpdC5jLTE0NTAtXG5uZXQvaXB2Ni9zaXQuYzoxNDUxOlx0aXBpcDZfdHVubmVsX2JpbmRfZGV2KGRldik7XG5uZXQvaXB2Ni9zaXQuYy0xNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVAgVHVubmVsIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYGlwaXA2X3R1bm5lbF9pbml0YCBpcyBnb2luZyB0byBiZSBhbmFsb2dvdXMgdG8gYG5kb19pbml0YC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoYXQgbGluayBpbiBteSBoZWFkLiBOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBhbmQgZmluZCB0aGUgYG5ld2xpbmtgIGZ1bmN0aW9ucyBmb3IgYWxsIHRoZXNlIHR1bm5lbHMuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgbWVudGFsIG1hcCBvZiB0aGlzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgam90dGluZyB0aGVtIGRvd24gZm9yIGVhY2ggZmlsZS4KCkZvciB0aGUgSVB2NCB0dW5uZWxzIGluIGBpcF90dW5uZWwuY2AsIGl0JiMzOTtzIGRlZmluaXRlbHkgYGlwX3R1bm5lbF9uZXdsaW5rYC4gVGhlbiwgZGlnZ2luZyBpbnRvIElQdjYgdHVubmVscywgaW4gYGlwNl9ncmUuY2AsIEkmIzM5O20gc2VlaW5nIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZlcnNwYW5fbmV3bGlua2AuIE92ZXIgaW4gYGlwNl90dW5uZWwuY2AsIHRoZSBmdW5jdGlvbiBpcyBgaXA2X3RubF9uZXdsaW5rYC4gQW5kIGZvciBgc2l0LmNgPyBBaCwgeWVzLCBpdCYjMzk7cyBgaXBpcDZfbmV3bGlua2AuCgpSaWdodCwgbGV0JiMzOTtzIG5vdyBkcmlsbCBkb3duIGFuZCBleGFtaW5lIGBpcF90dW5uZWxfbmV3bGlua2Agd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHVubmVscyBhcmUgdHJ1bHkgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTM9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2RlbGV0ZV9uZXQpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTYtXHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfdHVubmVsX25ld2xpbmtgIEV4cG9ydCoqCgpBbHJpZ2h0LCBzbyBgaXBfdHVubmVsX25ld2xpbmtgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc291cmNlIGNvZGUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBhcyBpcyBhbHdheXMgdGhlIGNhc2Ugd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsLWxldmVsIGZ1bmN0aW9ucy4gVGhlIGZpcnN0LCBhbmQgbW9zdCBjcml0aWNhbCwgcXVlc3Rpb24gaXM6ICoqd2hvJiMzOTtzIGFjdHVhbGx5ICp1c2luZyogdGhpcyBmdW5jdGlvbj8qKiBLbm93aW5nIHRoZSBjYWxsZXJzIGlzIHBhcmFtb3VudCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBwb3RlbnRpYWwgaW1wYWN0LCBhbmQgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBhIGtleSBmaXJzdCBzdGVwIGluIGFzc2Vzc2luZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGF0JiMzOTtzIHJlbHlpbmcgb24gYGlwX3R1bm5lbF9uZXdsaW5rYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgdGhpcyBmdW5jdGlvbiBjcml0aWNhbCwgaXMgaXQgcmFyZWx5IHVzZWQsIG9yIGlzIGl0IGEgZm91bmRhdGlvbj8gVGhpcyByZXF1aXJlcyBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBicm9hZGVyIGNvZGUgYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTQwOT1zdGF0aWMgaW50IGlwZ3JlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI1LVx0XHRyZXR1cm4gZXJyO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQyNjpcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXHUwMDI2cCxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MjctXHRcdFx0XHQgZndtYXJrKTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDMwPXN0YXRpYyBpbnQgZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ2LVx0XHRyZXR1cm4gZXJyO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQ0NzpcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXHUwMDI2cCxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NDgtXHRcdFx0XHQgZndtYXJrKTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTQtXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTk1OmludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ2LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyNDc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cbi0tXG5uZXQvaXB2NC9pcF92dGkuYz01Nzc9c3RhdGljIGludCB2dGlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jLTU4Ni1cdHZ0aV9uZXRsaW5rX3Bhcm1zKGRhdGEsIFx1MDAyNnBhcm1zLCBcdTAwMjZmd21hcmspO1xubmV0L2lwdjQvaXBfdnRpLmM6NTg3Olx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLFxubmV0L2lwdjQvaXBfdnRpLmMtNTg4LVx0XHRcdFx0IFx1MDAyNnBhcm1zLCBmd21hcmspO1xuLS1cbm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDgyLVx0aXBpcF9uZXRsaW5rX3Bhcm1zKGRhdGEsIFx1MDAyNnAsIFx1MDAyNnQtXHUwMDNlY29sbGVjdF9tZCwgXHUwMDI2ZndtYXJrKTtcbm5ldC9pcHY0L2lwaXAuYzo0ODM6XHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcGlwLmMtNDg0LVx0XHRcdFx0IGZ3bWFyayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHdoZXJlIHRvIGdvIG5leHQsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gVHVubmVsIEludGVyZmFjZSBDcmVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgY2hlY2tsaXN0IG5vdyBzYXlzIHRvIGZvY3VzIG9uIHRoZSBpbnRlcmZhY2UgY3JlYXRpb24gZW50cnkgcG9pbnRzLiBJJiMzOTttIHRoaW5raW5nLCBgaXBncmVfbmV3bGlua2AsIGBlcnNwYW5fbmV3bGlua2AsIGB2dGlfbmV3bGlua2AsIGFuZCBgaXBpcF9uZXdsaW5rYCBhcmUgdGhlIGluaXRpYWwgc3VzcGVjdHMgZm9yIEdSRSwgRVJTUEFOLCBWVEkgYW5kIElQSVAgdHVubmVsIGludGVyZmFjZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHNvbWV0aGluZyBzaW1pbGFyOyBuYW1lbHksIHNpbmNlIElQdjYgdHVubmVsaW5nIGlzIG9mdGVuIGJ1aWx0IG9uIHNpbWlsYXIgcHJpbmNpcGxlcywgSSYjMzk7bGwgaG9uZSBpbiBvbiBgaXA2X3RubF9uZXdsaW5rYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgZmlsZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgc2ltaWxhcml0aWVzLCBhbmQgdXN1YWxseSBwcm92aWRlcyBhIGNsZWFuIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBuZXcgbGluayB0eXBlcyBhcmUgc2V0IHVwIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3RubF9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0yMDI0PXN0YXRpYyB2b2lkIGlwNl90bmxfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwNjItXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjA2MzpzdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwNjQtXHRcdFx0ICAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjctXHQudmFsaWRhdGVcdD0gaXA2X3RubF92YWxpZGF0ZSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY4Olx0Lm5ld2xpbmtcdD0gaXA2X3RubF9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjktXHQuY2hhbmdlbGlua1x0PSBpcDZfdG5sX2NoYW5nZWxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSVB2NiBUdW5uZWwgSW50ZXJmYWNlIENyZWF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcsIGFuZCBteSBtaW5kIGhhcyB6b25lZCBpbiBvbiBgaXBpcDZfbmV3bGlua2Agd2l0aGluIGBuZXQvaXB2Ni9zaXQuY2AuIFRoYXQgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIG5ldyBJUHY2LWluLUlQdjQgdHVubmVsIGludGVyZmFjZXMsIHRoZSBTSVQgKFNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uKSB0dW5uZWxzLiBJ4oCZbSB6ZXJvaW5nIGluIG9uIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGJlY2F1c2XigKYgd2VsbCwgSSYjMzk7bSBwcm9iYWJseSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHVubmVsIGludGVyZmFjZSBicmluZy11cCwgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBJUHY2IG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTWF5YmUgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBpc3N1ZSBtYW5pZmVzdGluZywgbGlrZSBhIGZhaWx1cmUgdG8gYXNzaWduIGFkZHJlc3Nlcywgcm91dGluZyBwcm9ibGVtcyBzcGVjaWZpYyB0byB0aGVzZSB0dW5uZWxzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGRpYWdub3NlIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIEtub3dpbmcgdGhlIGNvZGViYXNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OgoKKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZSBlcnJvciBwYXRocyB3ZWxsLWRlZmluZWQ/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgaW50ZXJmYWNlcywgb3IgbWlzY29uZmlndXJlZCBwYXJhbWV0ZXJzPwoqICAgKipQYXJhbWV0ZXIgVmFsaWRhdGlvbjoqKiBIb3cgcm9idXN0IGlzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSB0dW5uZWwmIzM5O3MgcGFyYW1ldGVycz8gSXMgdGhlcmUgYSByaXNrIG9mIGNyZWF0aW5nIGluY29uc2lzdGVudCB0dW5uZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbnRyb2R1Y2Ugcm91dGluZyBsb29wcyBvciBvdGhlciBvZGQgYmVoYXZpb3JzPyBJcyB0aGVyZSBhIHJpc2sgb2YgbGVha2luZyByZXNvdXJjZXM/CiogICAqKkNvbmN1cnJlbmN5OioqIEdpdmVuIHRoZSBtdWx0aS10aHJlYWRlZCBuYXR1cmUgb2YgdGhlIGtlcm5lbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGludGVyZmFjZSBjcmVhdGlvbiBvciBjb25maWd1cmF0aW9uIHN0ZXBzLiBBcmUgcHJvcGVyIGxvY2tzIGhlbGQgd2hlbiBuZWNlc3Nhcnk/CiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zOioqIEhvdyBkb2VzIGBpcGlwNl9uZXdsaW5rYCBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHRhYmxlPyBEb2VzIGl0IHJlZ2lzdGVyIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gcm91dGUgY29uZmxpY3RzIG9yIGJsYWNraG9saW5nPwoqICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaGVyZT8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciBtaXN1c2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGltcG9zZWQ/CgpUaGlzIHBvaW50cyBtZSBpbiB0aGUgZGlyZWN0aW9uIG9mIGV4YW1pbmluZyB0aGUgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUsIGluY2x1ZGluZyBob3cgdGhlIHR1bm5lbCYjMzk7cyBlbmRwb2ludHMgYXJlIHNldCB1cCwgaG93IHRoZSBNVFUgaXMgbmVnb3RpYXRlZCwgYW5kIGhvdyBJUHY2IGFkZHJlc3NpbmcgaXMgYXNzaWduZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYz0xNTE0PXN0YXRpYyBib29sIGlwaXA2X25ldGxpbmtfNnJkX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNTQ4LVxubmV0L2lwdjYvc2l0LmM6MTU0OTpzdGF0aWMgaW50IGlwaXA2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L3NpdC5jLTE1NTAtXHRcdFx0IHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4tLVxubmV0L2lwdjYvc2l0LmM9MTc3MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgc2l0X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvc2l0LmMtMTc3Ny1cdC52YWxpZGF0ZVx0PSBpcGlwNl92YWxpZGF0ZSxcbm5ldC9pcHY2L3NpdC5jOjE3Nzg6XHQubmV3bGlua1x0PSBpcGlwNl9uZXdsaW5rLFxubmV0L2lwdjYvc2l0LmMtMTc3OS1cdC5jaGFuZ2VsaW5rXHQ9IGlwaXA2X2NoYW5nZWxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqVHVubmVsIEhlYWRyb29tIEFkanVzdG1lbnRzIC0gU2NvcGUgYW5kIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgY29kZSBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBoYW5kbGUgdGhlIGNoYW5nZXMgdG8gdHVubmVsIGhlYWRyb29tLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB3aGVyZSBuZXcgdHVubmVsIGxpbmtzIGFyZSBjcmVhdGVkIOKAkyBhbmQgdGhlc2UgYXJlOiBgaXBncmVfbmV3bGlua2AsIGBlcnNwYW5fbmV3bGlua2AsIGB2dGlfbmV3bGlua2AsIGBpcGlwX25ld2xpbmtgLCBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYW5kIGBpcGlwNl9uZXdsaW5rYC4gVGhlc2Ugc2VlbSB0byBjb3ZlciB0aGUgc3RhbmRhcmQgdHVubmVsIHR5cGVzLCBhbmQgdGhleSYjMzk7bGwgbGlrZWx5IGJlIHRoZSBmb2N1cyBvZiB0aGUgaW5pdGlhbCBhZGp1c3RtZW50cy4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGhhdmUgSSBjYXB0dXJlZCBhbGwgdGhlIHJlbGV2YW50IGxpbmsgY3JlYXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgaWYgdGhlcmUgYXJlIG90aGVyIHBsYWNlcyB3aGVyZSB0dW5uZWxzIGFyZSBjb25maWd1cmVkIChyYXRoZXIgdGhhbiBjcmVhdGVkKSwgd2hpY2ggbWlnaHQgYWxzbyBiZSBhZmZlY3RlZC4KCk5vdywgcmVnYXJkaW5nIGBuZXRraXQuY2AsIEkmIzM5O20gZ3Vlc3NpbmcgdGhlcmUmIzM5O3MgYSBzaW1pbGFyIGBuZXRraXRfbmV3X2xpbmtgIGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50IHRoYXQgd291bGQgYWxzbyBuZWVkIHRvIGJlIG1vZGlmaWVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGNvbW1vbiBpbnRlcmZhY2Ugd291bGQgYmUgdXNlZCB0aGVyZSB0byBhYnN0cmFjdCB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSBjb25zaXN0ZW5jeS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lIGluIHRoYXQgbW9kdWxlIGFuZCBtYWtlIHN1cmUgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIG1vZGlmaWNhdGlvbnMuIEkgbXVzdCBlbnN1cmUgdGhpcyBhbmQgb3RoZXIgcG90ZW50aWFsIGNhbGxzIGFyZSBpZGVudGlmaWVkLCBvciB0aGUgY2hhbmdlcyB3b24mIzM5O3QgYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0a2l0X25ld19saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmM9NTExPXN0YXRpYyBpbnQgbmV0a2l0X3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy01MjQtXG5kcml2ZXJzL25ldC9uZXRraXQuYzo1MjU6c3RhdGljIGludCBuZXRraXRfbmV3X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTUyNi1cdFx0XHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTEyNTk9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG5ldGtpdF9saW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy0xMjYzLVx0LnNldHVwXHRcdD0gbmV0a2l0X3NldHVwLFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MTI2NDpcdC5uZXdsaW5rXHQ9IG5ldGtpdF9uZXdfbGluayxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTEyNjUtXHQuZGVsbGlua1x0PSBuZXRraXRfZGVsX2xpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBUdW5uZWxpbmcgQ29kZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBjaGFuZ2UgcmVmZXJlbmNlcyBgbmV0a2l0X25ld19saW5rYCwgc28gdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjb2RlIHRvdWNoZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGxvY2F0ZSB0aGF0IGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaGAuIEFoYSwgaXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lLCBnb3QgaXQuCgpOb3csIG15IGZvY3VzIG5lZWRzIHRvIGV4cGFuZCBiZXlvbmQganVzdCBgbmV0a2l0X25ld19saW5rYC4gR2l2ZW4gdGhpcyBhbmQgdGhlIGlubGluZSBuYXR1cmUgb2YgdGhhdCBmdW5jdGlvbiwgSSBuZWVkIHRvIGlkZW50aWZ5ICphbGwqIHRoZSBuZXdsaW5rLXJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSBhZmZlY3RlZC4gVGhhdCB3b3VsZCBiZSBgaXBncmVfbmV3bGlua2AsIGBlcnNwYW5fbmV3bGlua2AsIGB2dGlfbmV3bGlua2AsIGBpcGlwX25ld2xpbmtgLCBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYW5kIGBpcGlwNl9uZXdsaW5rYC4gT2YgY291cnNlLCBsZXQmIzM5O3MgaW5jbHVkZSBgbmV0a2l0X25ld19saW5rYCBpbiB0aGlzIGxpc3QuCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBgaXBfdHVubmVsX2JpbmRfZGV2YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwX3R1bm5lbF9uZXdsaW5rYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBhbmQgYGlwX3R1bm5lbF9pbml0X25ldGAuIGBpcF90dW5uZWxfdXBkYXRlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBpcF90dW5uZWxfY2hhbmdlbGlua2AuIFRoYXQgc2lnbmlmaWNhbnRseSBicm9hZGVucyB0aGUgc2NvcGUhIFNvIEkgbmVlZCB0byBjb25zaWRlciBgaXBncmVfY2hhbmdlbGlua2AsIGBlcnNwYW5fY2hhbmdlbGlua2AsIGB2dGlfY2hhbmdlbGlua2AsIGBpcGlwX2NoYW5nZWxpbmtgLCBgaXA2Z3JlX2NoYW5nZWxpbmtgLCBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXA2X3RubF9jaGFuZ2VsaW5rYCwgYGlwaXA2X2NoYW5nZWxpbmtgLCBhbmQgZmluYWxseSwgdGhlIHBvdGVudGlhbCBgbmV0a2l0X2NoYW5nZV9saW5rYCBpZiBpdCBleGlzdHMuIFRpbWUgdG8gdmVyaWZ5IGlmIHRoYXQgZXhpc3RzLCBvZiBjb3Vyc2UuIFRoaXMgYnJvYWRlciBpbnZlc3RpZ2F0aW9uIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0a2l0X2NoYW5nZV9saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmM9MTA2OD1zdGF0aWMgdm9pZCBuZXRraXRfZGVsX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy0xMDg5LVxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MTA5MDpzdGF0aWMgaW50IG5ldGtpdF9jaGFuZ2VfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTA5MS1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxuZHJpdmVycy9uZXQvbmV0a2l0LmM9MTI1OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbmV0a2l0X2xpbmtfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTEyNjUtXHQuZGVsbGlua1x0PSBuZXRraXRfZGVsX2xpbmssXG5kcml2ZXJzL25ldC9uZXRraXQuYzoxMjY2Olx0LmNoYW5nZWxpbmtcdD0gbmV0a2l0X2NoYW5nZV9saW5rLFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTI2Ny1cdC5nZXRfbGlua19uZXRcdD0gbmV0a2l0X2dldF9saW5rX25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgSW50ZXJmYWNlIENoYW5nZSoqCgpSaWdodCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHdlIHNob3VsZCB6ZXJvIGluIG9uIGhvdyB0aGUgdHVubmVsaW5nIGFzcGVjdHMgb2YgYSBsaW5rIGNoYW5nZSBhcmUgaGFuZGxlZC4gU28sIHRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIGBpcF90dW5uZWxfY2hhbmdlbGlua2AgYW5kIGl0IGxpdmVzIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIEdvdHRhIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHVuZGVyIHRoZSBob29kIHdoZW4gYSB0dW5uZWwgbGluayYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MgYXJlIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTEyNDc9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyNDk6aW50IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjUwLVx0XHRcdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwgX191MzIgZndtYXJrKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyODQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI4NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfY2hhbmdlbGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBHUkUgdHVubmVscyBhcmUgaGFuZGxlZCBpbiB0aGUgSVB2NCBzdGFjay4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGlwZ3JlX2NoYW5nZWxpbmtgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIHdoZW4gdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhIEdSRSBsaW5rIGNoYW5nZS4gSXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSByZWFjdHMgdG8gbW9kaWZpY2F0aW9ucyBvZiBhIEdSRSBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZXZlbnRzIHRyaWdnZXIgdGhpcyBmdW5jdGlvbiwgYW5kIHdoYXQgb3BlcmF0aW9ucyBpdCBpcyBwZXJmb3JtaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ1MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTE6c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDUyLVx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTY3ND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjgxLVx0Lm5ld2xpbmtcdD0gaXBncmVfbmV3bGluayxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2ODI6XHQuY2hhbmdlbGlua1x0PSBpcGdyZV9jaGFuZ2VsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY4My1cdC5kZWxsaW5rXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE2ODk9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk2LVx0Lm5ld2xpbmtcdD0gaXBncmVfbmV3bGluayxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2OTc6XHQuY2hhbmdlbGlua1x0PSBpcGdyZV9jaGFuZ2VsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5OC1cdC5kZWxsaW5rXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBlcnNwYW5fY2hhbmdlbGlua2AgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBFUlNQQU4gKEVuY2Fwc3VsYXRlZCBSZW1vdGUgU1BBTikgYXJjaGl0ZWN0dXJlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdHMgY29yZSBwdXJwb3NlIGlzIHdpdGhpbiB0aGUgZGF0YSBwbGFuZSBtYW5hZ2VtZW50LiBJcyBpdCBwcmltYXJpbHkgZm9jdXNlZCBvbiBjb25maWd1cmF0aW9uIHVwZGF0ZXMsIGhhbmRsaW5nIGxpbmsgc3RhdGUgY2hhbmdlcywgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gTXkgaW5pdGlhbCBzdXNwaWNpb24gaXMgdGhhdCBpdOKAmXMgaW52b2x2ZWQgaW4gZHluYW1pY2FsbHkgYWRqdXN0aW5nIHRoZSBFUlNQQU4gY29uZmlndXJhdGlvbiBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgdG9wb2xvZ3kgb3IgbGluayBzdGF0dXMuCgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcy4gRG9lcyBpdCBoYW5kbGUgbGluayB1cC9kb3duIGV2ZW50cz8gIEhvdyBkb2VzIGl0IGludGVyZmFjZSB3aXRoIHRoZSBjb250cm9sIHBsYW5lLCBpZiBhdCBhbGw/ICBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBzdGFuZGFsb25lIG1vZHVsZSwgb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbXBvbmVudHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0IHJlbGllcyBvbiBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG9yIHN0YXRlIHZhcmlhYmxlcyB0byBtYW5hZ2UgRVJTUEFOIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCB0aGVzZSBhcmUuIEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gc2hhcmVkIHJlc291cmNlcywgY29uc2lkZXJpbmcgdGhlIGluaGVyZW50IGR5bmFtaWMgbmF0dXJlIG9mIG5ldHdvcmsgbGlua3M/CgpXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgbG9nZ2luZyBvciBlcnJvciByZXBvcnRpbmcgd2hlbiBpdCBlbmNvdW50ZXJzIHByb2JsZW1zPyAgU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgcm9idXN0IG1lY2hhbmlzbXMgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmVzIGR1cmluZyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgb3IgbGluayBzdGF0ZSB0cmFuc2l0aW9ucz8gVGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgdW5pbnRlcnJ1cHRlZCBuZXR3b3JrIHZpc2liaWxpdHkuIEkmIzM5O20gYWxzbyBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnM7IGlzIHRoZXJlIGFueSByaXNrIG9mIHVuYXV0aG9yaXplZCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIGRvZXMgdGhlIGZ1bmN0aW9uIHByb3Blcmx5IHZhbGlkYXRlIGlucHV0IGFuZCBwZXJtaXNzaW9ucz8KCkZpbmFsbHksIGFuZCB0aGlzIGlzIGNydWNpYWwsIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QuICBEb2VzIGl0IGludHJvZHVjZSBhbnkgc2lnbmlmaWNhbnQgbGF0ZW5jeSBvciByZXNvdXJjZSBvdmVyaGVhZCwgYW5kIGlmIHNvLCBob3cgY2FuIGl0IGJlIG9wdGltaXplZD8gIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgcGFydGljdWxhcmx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGZyZXF1ZW50bHkgZHVlIHRvIGxpbmsgZmxhcHBpbmcgb3IgcmFwaWQgY2hhbmdlcyBpbiB0aGUgbmV0d29yay4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZnVsbHkgYXBwcmVjaWF0ZSBpdHMgZWZmaWNpZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz0xNDUxPXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODItXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDgzOnN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODQtXHRcdFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTcxMS1cdC5uZXdsaW5rXHQ9IGVyc3Bhbl9uZXdsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTcxMjpcdC5jaGFuZ2VsaW5rXHQ9IGVyc3Bhbl9jaGFuZ2VsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTcxMy1cdC5kZWxsaW5rXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzoKCioqVlRJIENoYW5nZWxpbmsgQ29uY2VybnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFZpcnR1YWwgVHVubmVsIEludGVyZmFjZSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQvaXB2NC9pcF92dGkuY2AgZmlsZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdGhlIGB2dGlfY2hhbmdlbGlua2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaGFzIGxpa2VseSBiZWVuIHRoZSBmb2N1cyBvZiBteSBhdHRlbnRpb24gZHVlIHRvIGNlcnRhaW4gaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIG9uIHdoYXQgaXRzIHB1cnBvc2UgaXMuIFdoYXQgZGF0YSBkb2VzIGl0IG5lZWQgdG8gYWx0ZXI/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yIHdoZW4gbGlua2luZyBhIFZUSSB0byBvdGhlciBpbnRlcmZhY2VzLiBUaGlzIG5lZWRzIGEgZGVlcGVyIGRpdmUsIEkgY2FuJiMzOTt0IGxlYXZlIHRoaXMgYWxvbmUgdW50aWwgSSYjMzk7bSBzdXJlIEkgaGF2ZSBpdCBhbGwgc29ydGVkIGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z0aV9jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdnRpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdnRpLmM9NTc3PXN0YXRpYyBpbnQgdnRpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy01OTAtXG5uZXQvaXB2NC9pcF92dGkuYzo1OTE6c3RhdGljIGludCB2dGlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxubmV0L2lwdjQvaXBfdnRpLmMtNTkyLVx0XHRcdCAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jPTY0OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdnRpX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfdnRpLmMtNjU2LVx0Lm5ld2xpbmtcdD0gdnRpX25ld2xpbmssXG5uZXQvaXB2NC9pcF92dGkuYzo2NTc6XHQuY2hhbmdlbGlua1x0PSB2dGlfY2hhbmdlbGluayxcbm5ldC9pcHY0L2lwX3Z0aS5jLTY1OC1cdC5kZWxsaW5rICAgICAgICA9IGlwX3R1bm5lbF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIG5ldHdvcmsgY29kZSwgc3BlY2lmaWNhbGx5IElQdjQgdHVubmVscy4gTXkgbWluZCBoYXMganVzdCBqdW1wZWQgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbjogYGlwaXBfY2hhbmdlbGlua2Agd2l0aGluIGBuZXQvaXB2NC9pcGlwLmNgLiBUaGlzIHN1Z2dlc3RzIEkmIzM5O20gZWl0aGVyIGRlYnVnZ2luZywgcmV2aWV3aW5nLCBvciBwZXJoYXBzIGV4dGVuZGluZyB0aGUgSVB2NC1pbi1JUHY0IChJUElQKSB0dW5uZWwgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgdHVubmVscyBhcmUgY29uZmlndXJlZCBvciBtb2RpZmllZCBhdCBhIGxpbmsgbGV2ZWwuIEkgbWlnaHQgYmUgbG9va2luZyBhdCBob3cgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBpbXBhY3QgdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLCBvciBjb252ZXJzZWx5LCBob3cgYWRqdXN0bWVudHMgdG8gdGhlIElQSVAgdHVubmVsIGl0c2VsZiBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBleGFtaW5pbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgcmVhY3RzIHRvIGxpbmsgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9uIHVwZGF0ZXMgZm9yIHRoZSB0dW5uZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayB0dW5uZWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTQ2ND1zdGF0aWMgaW50IGlwaXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwaXAuYy00ODYtXG5uZXQvaXB2NC9pcGlwLmM6NDg3OnN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcGlwLmMtNDg4LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2NC9pcGlwLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGlwX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTYwOC1cdC5uZXdsaW5rXHQ9IGlwaXBfbmV3bGluayxcbm5ldC9pcHY0L2lwaXAuYzo2MDk6XHQuY2hhbmdlbGlua1x0PSBpcGlwX2NoYW5nZWxpbmssXG5uZXQvaXB2NC9pcGlwLmMtNjEwLVx0LmRlbGxpbmtcdD0gaXBfdHVubmVsX2RlbGxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJUHY2IEdSRSBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIElQdjYgR1JFIHNldHVwLi4uIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgYWJvdXQgd2hlcmUgdGhlIGxpbmsgY2hhbmdlcyBoYXBwZW4uIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYGlwNmdyZV9jaGFuZ2VsaW5rYCBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRob3NlIGV2ZW50cywgYW5kIGl0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIHRvIHVwZGF0ZSBvciBhZGp1c3QgYW55dGhpbmcgcmVsYXRlZCB0byBJUHY2IEdSRSB0dW5uZWxzIHdoZW4gdGhlIHVuZGVybHlpbmcgbGluayBzdGF0ZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlzaXQgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MjAxMD1zdGF0aWMgc3RydWN0IGlwNl90bmwgKlxubmV0L2lwdjYvaXA2X2dyZS5jOjIwMTE6aXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAxMi1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnBfcCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA0My1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDQ0OnN0YXRpYyBpbnQgaXA2Z3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDQ1LVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDU0LVxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNTU6XHR0ID0gaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgdGIsIGRhdGEsIFx1MDAyNnAsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1Ni1cdGlmIChJU19FUlIodCkpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjY9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjc3LVx0aWduID0gbmV0X2dlbmVyaWModC1cdTAwM2VuZXQsIGlwNmdyZV9uZXRfaWQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjIyNzg6XHR0ID0gaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgdGIsIGRhdGEsIFx1MDAyNnAsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3OS1cdGlmIChJU19FUlIodCkpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjk4LVx0Lm5ld2xpbmtcdD0gaXA2Z3JlX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5OTpcdC5jaGFuZ2VsaW5rXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMDAtXHQuZGVsbGlua1x0PSBpcDZncmVfZGVsbGluayxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjMwNj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxMy1cdC5uZXdsaW5rXHQ9IGlwNmdyZV9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMTQ6XHQuY2hhbmdlbGlua1x0PSBpcDZncmVfY2hhbmdlbGluayxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzE1LVx0LmdldF9zaXplXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYGlwNmVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb246IHdoYXQgc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgSVAgdHVubmVsIGFyZSBiZWluZyBtb2RpZmllZD8gSXMgaXQgdGhlIE1UVSwgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBlbmNhcHN1bGF0aW9uIHR5cGUsIHRoZSBmbG93IGxhYmVscywgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlICYjMzQ7Y2hhbmdlJiMzNDsgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dW5uZWwgdHlwZSDigJMgbGlrZWx5IGBzdHJ1Y3QgZXJzcGFuX2RldmAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFuZCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhvc2Ugc3RydWN0dXJlcyB0byBhbnRpY2lwYXRlIHdoYXQgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC4KClRoZSAmIzM0O2NoYW5nZWxpbmsmIzM0OyBhc3BlY3QgaW1wbGllcyBhIHJlY29uZmlndXJhdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBkeW5hbWljIGNoYW5nZXMgYmFzZWQgb24gbmV0d29yayBldmVudHMsIHVzZXItaW5pdGlhdGVkIGFkanVzdG1lbnRzLCBvciBwZXJoYXBzIGEgY29uc2VxdWVuY2Ugb2Ygcm91dGluZyBwcm90b2NvbCB1cGRhdGVzPyBUaGUgY29udGV4dCBpcyBjcml0aWNhbCBoZXJlLiBJcyB0aGlzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2sgZGlyZWN0bHksIG9yIGlzIGl0IGludm9rZWQgYnkgYSB1c2VyLXNwYWNlIHV0aWxpdHkgbGlrZSBgaXBgPyBUaGUgc291cmNlIG9mIHRoZSBjYWxsIGlzIHJlbGV2YW50IGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O20gaW5zdGFudGx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlcnJvciBwYXRocy4gV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgY2hhbmdlIGlzIGludmFsaWQsIG9yIGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24/IEFyZSB0aGVyZSByZXNvdXJjZSBhbGxvY2F0aW9uIGlzc3VlcyBpbnZvbHZlZCwgbGlrZSBpbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgZmxvdyBsYWJlbHMgb3IgTVRVIGNoYW5nZXMgdGhhdCB3b3VsZCBicmVhayBleGlzdGluZyBjb25uZWN0aW9ucz8gRXJyb3IgaGFuZGxpbmcgbmVlZHMgdG8gYmUgcm9idXN0LCBhbmQgSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGNvZGUgZm9yIHByb3BlciBjaGVja3MgYW5kIGVycm9yIHJlcG9ydGluZy4gQWxzbywgd2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCBhcm91bmQgdGhpcyBmdW5jdGlvbiwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIG9uZSBrZXJuZWwgY29udGV4dD8KCkkgYWxzbyB3b25kZXIgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGJsb2NraW5nIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGludHJvZHVjZSBsYXRlbmN5LCBvciBkb2VzIGl0IGF0dGVtcHQgdG8gbWluaW1pemUgZGlzcnVwdGlvbiB3aXRoIGF0b21pYyB1cGRhdGVzIG9yIGRlZmVycmVkIGNoYW5nZXM/IElmIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmUtZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwsIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBvdmVyaGVhZCBvZiB0aGUgdHVubmVsIHNldHVwLCBpbmNsdWRpbmcgdGhlIGV4Y2hhbmdlIG9mIGNvbnRyb2wgcGFja2V0cyBhbmQgcmUtZXN0YWJsaXNobWVudCBvZiBhbnkgYXNzb2NpYXRlZCBzZWN1cml0eSBhc3NvY2lhdGlvbnMgb3IgdHVubmVscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jPTIyNTg9c3RhdGljIGludCBpcDZlcnNwYW5fdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI2NS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjY2OnN0YXRpYyBpbnQgaXA2ZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjY3LVx0XHRcdFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMzIwPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZlcnNwYW5fdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzI3LVx0Lm5ld2xpbmtcdD0gaXA2ZXJzcGFuX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMyODpcdC5jaGFuZ2VsaW5rXHQ9IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMjktXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzoKCioqV29ya2luZyB3aXRoIElQdjYgVHVubmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGRpdmluZyBpbnRvIHRoZSBgaXA2X3RubF9jaGFuZ2VsaW5rYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoYXQgZnVuY3Rpb24gaXMga2V5IGZvciBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhbiBJUHY2IHR1bm5lbCBpbnRlcmZhY2UsIGFuZCBhcyBhIHJlc3VsdCBJIHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggbGluayBjaGFuZ2VzLiBJJiMzOTttIGxpa2VseSBjb25jZXJuZWQgd2l0aCBob3cgaXQgaGFuZGxlcyBjaGFuZ2VzIGluIE1UVSwgYWRkcmVzcyBhc3NpZ25tZW50LCBvciBvdGhlciByZWxldmFudCBwYXJhbWV0ZXJzIGZvciB0dW5uZWwgaW50ZXJmYWNlcy4gSSBhbHNvIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHN1Y2ggYXMgdGhlIHJvdXRpbmcgdGFibGUgdXBkYXRlcyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5IHByb3RvY29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0yMDYzPXN0YXRpYyBpbnQgaXA2X3RubF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwNDpzdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDUtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yMjYxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjI2OC1cdC5uZXdsaW5rXHQ9IGlwNl90bmxfbmV3bGluayxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY5Olx0LmNoYW5nZWxpbmtcdD0gaXA2X3RubF9jaGFuZ2VsaW5rLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXHQuZGVsbGlua1x0PSBpcDZfdG5sX2RlbGxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOgoKKipEaWdnaW5nIGludG8gSVB2NiBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBJUHY2IHR1bm5lbGluZywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBsaW5rIGNoYW5nZXMsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBpcGlwNl9jaGFuZ2VsaW5rYCB3aXRoaW4gYG5ldC9pcHY2L3NpdC5jYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgc2F5LCBhIHR1bm5lbCBpbnRlcmZhY2Ugb3ZlciBhIHBoeXNpY2FsIGludGVyZmFjZSB0aGF0JiMzOTtzIGdvbmUgZG93biBhbmQgY29tZSBiYWNrIHVwLCBvciB3aG9zZSBjb25maWd1cmF0aW9uIGhhcyBvdGhlcndpc2UgYWx0ZXJlZCwgbGlrZSBhIE1UVSBjaGFuZ2UuIEkga25vdyBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZSBgaXBpcDZfY2hhbmdlbGlua2AgZnVuY3Rpb24gYWZmZWN0cyB0aGUgdHVubmVsJiMzOTtzIHN0YXRlLCB0aGUgcm91dGluZyBzZXR1cCwgdGhlIG5laWdoYm9yIGRpc2NvdmVyeSwgYW5kIG90aGVyIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGFyZWFzIHdoZW4gYW4gdW5kZXJseWluZyBsaW5rIGlzIHJlY29uZmlndXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBhY2Nlc3NlcyBhbmQgbW9kaWZpZXMgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBJJiMzOTttIHdvbmRlcmluZywgY291bGQgdGhlcmUgYmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgbWlzc2VkIHVwZGF0ZXM/IFRoaXMgaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYSB3aGVuIGludGVyZmFjZXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBzaXQgZHJpdmVyIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jPTE1NDk9c3RhdGljIGludCBpcGlwNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTYwMC1cbm5ldC9pcHY2L3NpdC5jOjE2MDE6c3RhdGljIGludCBpcGlwNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2Ni9zaXQuYy0xNjAyLVx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2lwdjYvc2l0LmM9MTc3MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgc2l0X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvc2l0LmMtMTc3OC1cdC5uZXdsaW5rXHQ9IGlwaXA2X25ld2xpbmssXG5uZXQvaXB2Ni9zaXQuYzoxNzc5Olx0LmNoYW5nZWxpbmtcdD0gaXBpcDZfY2hhbmdlbGluayxcbm5ldC9pcHY2L3NpdC5jLTE3ODAtXHQuZ2V0X3NpemVcdD0gaXBpcDZfZ2V0X3NpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBhbmQgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdHVubmVsIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgZ290IGEgcHJldHR5IGdvb2QgZ3Jhc3Agb24gdGhpcyBhbHJlYWR5LCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIG1ldGhvZGljYWwuIFRoZSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgKl9uZXdsaW5rYCBhbmQgYCpfY2hhbmdlbGlua2Agc3ltYm9scyBmb3IgdmFyaW91cyB0dW5uZWwgdHlwZXM6IGBuZXRraXRgLCBgaXBncmVgLCBgZXJzcGFuYCwgYHZ0aWAsIGBpcGlwYCwgYGlwNmdyZWAsIGBpcDZlcnNwYW5gLCBgaXA2X3RubGAsIGFuZCBgaXBpcDZgLiBUaGVzZSBsaWtlbHkgcmVwcmVzZW50IHRoZSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIGFuZCBtb2RpZnlpbmcgdGhlc2UgdHVubmVsIGludGVyZmFjZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgY2FsbCByZWxhdGlvbnNoaXBzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBpcF90dW5uZWxfYmluZF9kZXZgIGZ1bmN0aW9uIHRvIHNlZSBpdHMgdXNhZ2UsIHNpbmNlIGl0IGhhcyBzdWNoIGNsZWFyIGxpbmtzIHRvIGEgbnVtYmVyIG9mIGltcG9ydGFudCBmdW5jdGlvbnM6IGBpcF90dW5uZWxfY3JlYXRlYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBgaXBfdHVubmVsX2luaXRfbmV0YCwgYW5kIGBpcF90dW5uZWxfbmV3bGlua2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgdXNlIHdpdGhpbiBgaXBfdHVubmVsX2luaXRfbmV0YCBtZWFucyBpdCYjMzk7cyBhbHNvIGNhbGxlZCB3aGVuIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIHdoaWNoIGlzIGNyaXRpY2FsLgoKTW92aW5nIG9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlYCBhbmQgb3RoZXIgZnVuY3Rpb25zLiBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAgZ2V0cyBjYWxsZWQgZnJvbSBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgYW5kIGBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnYC4gYGlwNmdyZV90bmxfbGlua19jb25maWdgIGlzIGNhbGxlZCBmcm9tIGBpcDZncmVfdHVubmVsX2xvY2F0ZWAsIGBpcDZncmVfdG5sX2NoYW5nZWAgKHdoaWNoIGlzLCBpbiB0dXJuLCBsaW5rZWQgdG8gYGlwNmdyZV9jaGFuZ2VsaW5rYCksIGFuZCBkaXJlY3RseSBmcm9tIGBpcDZncmVfbmV3bGlua2AuICBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AgaXMgY2FsbGVkIGZyb20gYGlwNmVyc3Bhbl90bmxfY2hhbmdlYCBhbmQgYGlwNmVyc3Bhbl9uZXdsaW5rYC4gVGhpcyBoZWxwcyBtZSBtYXAgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBvZiB0aGUgNi1vdmVyLTYgdHVubmVscy4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGV2ZW4gZnVydGhlci4gYGlwNl90bmxfbGlua19jb25maWdgIGlzIGNvbm5lY3RlZCB0byAgYGlwNl90bmxfY2hhbmdlYCAod2hpY2ggaXMgY2FsbGVkIHZpYSB0aGUgaW9jdGwgYW5kIGNoYW5nZSBsaW5rIHBhdGgpIGFuZCBgaXA2X3RubF9kZXZfaW5pdGAuIFRoZSBkZXYgaW5pdCBwYXRoIGlzIGZyb20gdGhlIG5ldyBsaW5rIHZpYSBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCwgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgaXMgY2FsbGVkIGZyb20gYGlwaXA2X3R1bm5lbF91cGRhdGVgIGFuZCBgaXBpcDZfdHVubmVsX2luaXRgLiAgYGlwaXA2X3R1bm5lbF91cGRhdGVgIGNvbm5lY3RzIHRvIHRoZSBpb2N0bCBjYWxsLCB3aGljaCBpcyB2ZXJ5IGNvbW1vbi4KClNpbmNlIHRoZSBpb2N0bHMgYXJlIGNyaXRpY2FsIGZvciBjb250cm9sbGluZyB0aGVzZSB0dW5uZWxzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIEkvTyBjb250cm9sIGNhbGxzLiAgSSBuZWVkIHRvIGFkZCBgaXA2Z3JlX3R1bm5lbF9pb2N0bGAsIGBpcDZfdG5sX2lvY3RsYCwgYGlwaXA2X3R1bm5lbF9pb2N0bGAsIGFuZCBgaXBfdHVubmVsX2lvY3RsYCB0byB0aGUgcmV2aWV3IGxpc3QuCgpUaW1lIHRvIGhlYWQgaW50byBgbmV0L2lwdjQvaXBfdHVubmVsLmNgIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3R1bm5lbF9pb2N0bGAuIFRoaXMgc2hvdWxkIGdpdmUgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdHVubmVsIGNvbnRyb2wgaW50ZXJmYWNlcyBhY3R1YWxseSBvcGVyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIElPQ1RMKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYGlwX3R1bm5lbF9pb2N0bGAgaXNuJiMzOTt0IHNob3dpbmcgdXA/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSB1bmV4cGVjdGVkLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHVzZWQgdGhhdCBiZWZvcmUsIG9yIGF0IGxlYXN0IHNvbWV0aGluZyBzaW1pbGFyIGluIHRoYXQgc3BhY2UuIExldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nOyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgaXMgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gVGhhdCBmaWxlJiMzOTtzIHRoZSBoZWFydCBvZiBJUCB0dW5uZWwgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLCBzbyBpZiB0aGlzIElPQ1RMIGlzIGRvY3VtZW50ZWQgYW55d2hlcmUsIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqaW1wbGVtZW50ZWQqIGFueXdoZXJlLCBpdCYjMzk7bGwgYmUgdGhlcmUuIEkgbmVlZCB0byBkaXZlIGluIGFuZCBjb25maXJtIGl0cyBwcmVzZW5jZSBhbmQgYmVoYXZpb3VyLiBJIHdpbGwgbG9vayBmb3IgYW55IHNpZ24gb2YgdGhpcyBmdW5jdGlvbiwgaXRzIHVzYWdlLCBvciBhbnkgcG90ZW50aWFsIHJlcGxhY2VtZW50cywgdG8gZGV0ZXJtaW5lIGlmIEkgYW0gaGF2aW5nIGEgbW9tZW50LCBvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0uIExldCYjMzk7cyBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBUdW5uZWwgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgSVAgdHVubmVsaW5nIHNpdHVhdGlvbiBhbmQgcXVpY2tseSByZWFsaXplIHRoZSBgaXBfdHVubmVsLmNgIG1vZHVsZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdXNpbmcgYGlvY3RsYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyIHdoYXQgdGhlIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb24gbG9va3MgbGlrZS4gSXQmIzM5O3MgbGlrZWx5IHVzaW5nIGEgZGlmZmVyZW50IG1ldGhvZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGl2b3Qgb3ZlciB0byBgaXBfZ3JlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBjb250cm9sIHBhdGggb3IgdGhlIGFic3RyYWN0aW9uIHRoYXQgKmRvZXMqIGxldmVyYWdlIGEgbWV0aG9kIGZvciBzZXR0aW5nIHVwIGFuZCBtYW5hZ2luZyB0aGUgR1JFIHR1bm5lbHMgYXQgdGhlIG5ldHdvcmsgbGF5ZXIsIGxpa2VseSBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgc2ltaWxhciBtZWNoYW5pc20uIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGtleSBtYW5hZ2VtZW50LCBUVEwgb3ZlcnJpZGVzLCBhbmQgcHJvdG9jb2wgdHlwZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW5pdGlhbCBSZWFjdGlvbiB0byBgaXBpcC5jYCoqCgpPa2F5LCBgaXBpcC5jYC4uLiB3aGF0JiMzOTtzIHRoaXMgYWJvdXQ/IE15IGludGVybmFsIHJhZGFyIGlzIGltbWVkaWF0ZWx5IHBpbmdpbmcuIEkgc2VlIHRoYXQgZmlsZW5hbWUgYW5kIEkmIzM5O20gaW5zdGFudGx5IHRoaW5raW5nIHR1bm5lbHMsIGVuY2Fwc3VsYXRpb24sIHByb2JhYmx5IHNvbWV0aGluZyB0byBkbyB3aXRoIElQLWluLUlQIG9yIGEgc2ltaWxhciBwcm90b2NvbC4gVGhlICYjMzk7YyYjMzk7IGV4dGVuc2lvbiBzdHJvbmdseSBzdWdnZXN0cyBhIEMgaW1wbGVtZW50YXRpb24sIGxpa2VseSBmb3IgYSBuZXR3b3JrIHN0YWNrIG9yIGEgdXRpbGl0eS4gSXMgdGhpcyBhIGtlcm5lbCBtb2R1bGUsIGEgdXNlci1zcGFjZSBkYWVtb24sIG9yIGEgbGlicmFyeT8gVGhlIGltbWVkaWF0ZSBjb250ZXh0IGlzIG1pc3NpbmcgYnV0IHRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBzdGFydC4gTXkgbWluZCBqdW1wcyB0byBwb3NzaWJpbGl0aWVzOiBpcyB0aGlzIHBhcnQgb2YgYSBWUE4gaW1wbGVtZW50YXRpb24sIHNvbWUgZm9ybSBvZiBuZXR3b3JrIHZpcnR1YWxpemF0aW9uLCBvciBwZXJoYXBzIGEgY29tcG9uZW50IG9mIGFuIG92ZXJsYXkgbmV0d29yayBzb2x1dGlvbj8gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgSSYjMzk7bSBtb3JlIGN1cmlvdXMgYWJvdXQgaG93IHRoaW5ncyBhcmUgaGFuZGxlZDogSVAgZnJhZ21lbnRhdGlvbiwgaGVhZGVyIG1hbmlwdWxhdGlvbiwgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy4gSSYjMzk7bSBlYWdlciB0byBnZXQgdGhlIGZ1bGxlciBwaWN0dXJlIHRvIGFzc2VzcyBpdHMgcXVhbGl0eSBhbmQgYXBwbGljYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTI4Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zMjUtXG5uZXQvaXB2NC9pcGlwLmM6MzI2OnN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxubmV0L2lwdjQvaXBpcC5jLTMyNy17XG4tLVxubmV0L2lwdjQvaXBpcC5jPTM0MT1pcGlwX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsIGludCBjbWQpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTM0NC1cdFx0aWYgKHAtXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fFxubmV0L2lwdjQvaXBpcC5jOjM0NTpcdFx0ICAgICFpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wocC1cdTAwM2VpcGgucHJvdG9jb2wpIHx8XG5uZXQvaXB2NC9pcGlwLmMtMzQ2LVx0XHQgICAgcC1cdTAwM2VpcGguaWhsICE9IDUgfHwgKHAtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyh+SVBfREYpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvbnRyb2wgRmxvdzogYGlwaXBfdHVubmVsX2N0bGAgYW5kIGBuZG9fc2lvY2RldnByaXZhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlcyBhbmQgdGhlIHdheSB0aGluZ3MgdHlwaWNhbGx5IHdvcmsgaW4gbmV0d29ya2luZyBrZXJuZWwgbW9kdWxlcywgaXMgdGhhdCB0aGUgZnVuY3Rpb24gYGlwaXBfdHVubmVsX2N0bGAgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBgbmRvX3Npb2NkZXZwcml2YXRlYCBuZXRkZXYgb3BlcmF0aW9uIGhhbmRsZXIuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBlbnRyeSBwb2ludCwgcmlnaHQ/IGBuZG9fc2lvY2RldnByaXZhdGVgIGlzIHRoZSBTd2lzcyBBcm15IGtuaWZlIGZvciBkZWFsaW5nIHdpdGggZGV2aWNlLXNwZWNpZmljIGlvY3RscyBhbmQgY29udHJvbCBvcGVyYXRpb25zLiBJZiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0dW5uZWxpbmcsIHNldHRpbmcgdXAsIHRlYXJpbmcgZG93biwgYW5kIGNvbmZpZ3VyaW5nIHRoZSB0dW5uZWwgaXRzZWxmIHdvdWxkIGJlIHRoZSBraW5kIG9mICYjMzQ7cHJpdmF0ZSYjMzQ7IG9wZXJhdGlvbiB0aGF0IG5lYXRseSBmaXRzIHdpdGhpbiB0aGUgc2NvcGUgb2Ygd2hhdCBgbmRvX3Npb2NkZXZwcml2YXRlYCBoYW5kbGVzLiBTbywgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIHN0YXJ0IGxvb2tpbmcg4oCTIHRyYWNpbmcgYmFjayBjYWxscyBmcm9tIGBpcGlwX3R1bm5lbF9jdGxgIHRvIGNvbmZpcm0gdGhhdCBkaXJlY3QgbGluay4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBhdGgsIGFuZCBhbnkgZGV2aWF0aW9uIGZyb20gdGhhdCB3b3VsZCBiZSwgYXQgbGVhc3QgaW5pdGlhbGx5LCBhIHN1cnByaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX3R1bm5lbF9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTM0MD1zdGF0aWMgaW50XG5uZXQvaXB2NC9pcGlwLmM6MzQxOmlwaXBfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwgaW50IGNtZClcbm5ldC9pcHY0L2lwaXAuYy0zNDIte1xuLS1cbm5ldC9pcHY0L2lwaXAuYz0zODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTM4Ny1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBpcC5jOjM4ODpcdC5uZG9fdHVubmVsX2N0bFx0PSBpcGlwX3R1bm5lbF9jdGwsXG5uZXQvaXB2NC9pcGlwLmMtMzg5LVx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBHUkUgSVB2NiBUdW5uZWwgQ29udHJvbCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBHUkUgSVB2NiB0dW5uZWxzIGFyZSBjb250cm9sbGVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoYXQgYG5kb190dW5uZWxfY3RsYCBpcyBpbnZvbHZlZCBzb21laG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgYW5kIHRoZSB0dW5uZWwgbWFuYWdlbWVudC4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSBgaXA2Z3JlX3R1bm5lbF9pb2N0bGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpb2N0bCBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb250cm9sIHBsYW5lIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBwbGFuZSBmb3IgdGhlc2UgdHVubmVscywgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgZGlyZWN0IHdheSB0byBkbyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNmdyZV90dW5uZWxfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IEdSRSBUdW5uZWwgQ29udHJvbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZG9fdHVubmVsX2N0bGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGNvbnRyb2xsaW5nIHRoZSBHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbiAoR1JFKSB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb3BlcmF0aW5nIHdpdGggSVB2NiBlbmNhcHN1bGF0aW9uLCByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9ucyBmb3IgdGhlc2UgdHVubmVscy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBuZXRkZXZpY2Ugb3BlcmF0aW9ucy4gTXkgZ29hbCBpcyB0byBncmFzcCBob3cgdHJhZmZpYyBpcyBzaGFwZWQsIGhvdyB0dW5uZWwgZW5kcG9pbnRzIGFyZSBjb25maWd1cmVkLCBhbmQgdWx0aW1hdGVseSwgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBmbG93IGNvbnRyb2wgZm9yIElQdjYgdHJhZmZpYyB0aHJvdWdoIEdSRSB0dW5uZWxzIGluIHRoZSBMaW51eCBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgTkRPIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBhbmQgaWYgYW55IHF1aXJrcyBhcmUgdG8gYmUgY29uc2lkZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fdHVubmVsX2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mjg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYGlwNl9ncmUuY2AgZm9yIGBpb2N0bGAgSW5zcGVjdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgaW9jdGxgIHVzYWdlIHdpdGhpbiB0aGUgSVB2NiBHUkUgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgR1JFIG92ZXIgSVB2NiBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlcmVmb3JlLCB3aGVyZSBhbnkgcG90ZW50aWFsIGBpb2N0bGAgaW50ZXJhY3Rpb25zIHdvdWxkIGJlIGRlZmluZWQgb3IgdXNlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTAxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgdGFrZSBvbiB3aGF0IEkmIzM5O3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0LgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgSVB2NiBHUkUgQ29kZSoqCgpBbHJpZ2h0LCBzbyBJIHdhcyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUsIHNwZWNpZmljYWxseSBgaXA2X2dyZS5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaW9jdGwgY2FsbHMgaW4gdGhlcmUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCBvbiB0aGlzIGZyb250LiBJIHdhcyBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgY2FsbHMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuCgpOb3csIHRob3VnaCwgbXkgYXR0ZW50aW9uIGhhcyBzaGlmdGVkLiBTaW5jZSBJIGNvdWxkbiYjMzk7dCBmaW5kIGFueSBpb2N0bCYjMzk7cyBpbiB0aGF0IGZpcnN0IGZpbGUsIG15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgaXA2X3RubF9pb2N0bGAgd2hpY2ggcmVzaWRlcyBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBpb2N0bCBjYWxscyBhcmUgaW1wbGVtZW50ZWQsIG9yIGlmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE2MTE9aXA2X3RubF9wYXJtX3RvX3VzZXIoc3RydWN0IGlwNl90bmxfcGFybSAqdSwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMxLSAqIERlc2NyaXB0aW9uOlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE2MzI6ICogICBpcDZfdG5sX2lvY3RsKCkgaXMgdXNlZCBmb3IgbWFuYWdpbmcgSVB2NiB0dW5uZWxzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTYzMy0gKiAgIGZyb20gdXNlcnNwYWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0JiMzOTtzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZToKCioqSW52ZXN0aWdhdGluZyBVc2FnZSBDb250ZXh0KioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBnb3QgdGhpc+KApiB3aGF0ZXZlciBpdCBpc+KApiBpbiBmcm9udCBvZiBtZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7V2hlcmUgZG9lcyB0aGlzIGFjdHVhbGx5ICpzaG93IHVwKj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGFwcGxpY2F0aW9ucywgdGhlIGVudmlyb25tZW50cyBpdCYjMzk7cyBkZXBsb3llZCBpbiwgdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMgaXQgaW50ZXJhY3RzIHdpdGguIEFyZSB3ZSB0YWxraW5nIHRoZW9yZXRpY2FsIG1vZGVscywgcHJvZHVjdGlvbiBzeXN0ZW1zLCByZXNlYXJjaCBwcm90b3R5cGVzPyBFYWNoIGNvbnRleHQgZGljdGF0ZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGFzc3VtcHRpb25zLCBsaW1pdGF0aW9ucywgYW5kLCBmcmFua2x5LCB3aGF0JiMzOTtzICppbXBvcnRhbnQqLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBhbmQgdGhlIHVzYWdlIGlzIHdoZXJlIHRob3NlIGRldGFpbHMgYmVjb21lIHRhbmdpYmxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIGVkZ2UgY2FzZXMsIHNjYWxhYmlsaXR5IGNvbmNlcm5zLi4uIFRoaXMgJiMzNDt3aGVyZSBpdCYjMzk7cyB1c2VkJiMzNDsgcXVlc3Rpb24gaXMgdGhlIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBkaXZlIGludG8gaXRzIHV0aWxpdHkgYW5kIHNpZ25pZmljYW5jZS4gRnJvbSBoZXJlLCBJIGNhbiBzdGFydCB0byBkaXNzZWN0IGl0cyBlZmZlY3RpdmVuZXNzIGFuZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kb190dW5uZWxfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFN1c3BlY3RlZCBLZXJuZWwgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcDZfdG5sX2lvY3RsYCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBwaW5naW5nIGluIHRoZSBiYWNrIG9mIG15IGhlYWQuIEkmIzM5O20gd29uZGVyaW5nLi4uIGNvdWxkIGl0IGJlIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUsIHRoZSB3YXkgaXQmIzM5O3MgaGFuZGxpbmcgdGhpcywgaXMgYWN0dWFsbHkgcmVseWluZyBvbiB0aGUgYG5kb19zaW9jZGV2cHJpdmF0ZWAgbWVjaGFuaXNtIHVuZGVyIHRoZSBob29kPyBJdCBmZWVscyBsaWtlIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIG92ZXJsYXAgb3IsIHBlcmhhcHMgbW9yZSBhY2N1cmF0ZWx5LCBhIGhpZGRlbiBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBoZXJlIGFuZCB0cmFjZSB0aGUgY29kZSBwYXRoIHRvIGJlIHN1cmUuIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIGRvY3VtZW50YXRpb24gYXJvdW5kIHRoaXMgd2FzIGNsZWFyZXIuIFRoaXMgY291bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvb2sgZm9yIGEgcG90ZW50aWFsIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3RubF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTYxMT1pcDZfdG5sX3Bhcm1fdG9fdXNlcihzdHJ1Y3QgaXA2X3RubF9wYXJtICp1LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE2MzEtICogRGVzY3JpcHRpb246XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTYzMjogKiAgIGlwNl90bmxfaW9jdGwoKSBpcyB1c2VkIGZvciBtYW5hZ2luZyBJUHY2IHR1bm5lbHNcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMzLSAqICAgZnJvbSB1c2Vyc3BhY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTU4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IFR1bm5lbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBJUHY2IHR1bm5lbGluZyBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgc29tZXRoaW5nIG1pZ2h0IGJlIGdvaW5nIHNpZGV3YXlzIHdpdGggdGhlIGVuY2Fwc3VsYXRpb24gb3IgZGVjYXBzdWxhdGlvbiBsb2dpYy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBsaW5lIDE2MzIgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gc2hvdWxkIGJlIGRlYWxpbmcgd2l0aCBbaW5zZXJ0IG15IHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QsIGVnLiBHUkUgdHVubmVscywgc2l0IHR1bm5lbHMsIG9yIGlwaXAgdHVubmVsc10uIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgW3NwZWNpZmljIGFzcGVjdCBvZiB0dW5uZWxpbmddLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluY29ycmVjdCBoZWFkZXIgbWFuaXB1bGF0aW9ucywgb3IgcGVyaGFwcyBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBJUHY2IHN0YWNrIGFuZCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZS4gTWF5YmUgYSBtaXNzZWQgZXJyb3IgY2hlY2sgb3Igc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGhlYXZ5IGxvYWQuIEkgd2FudCB0byBzZWUgaG93IHBhY2tldHMgYXJlIGNyZWF0ZWQvbWFuaXB1bGF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgUkZDcyBhbmQgcG90ZW50aWFsbHkgc29tZSBuZXR3b3JrIGNhcHR1cmVzIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYzMDpcdCAqXG4xNjMxOlx0ICogRGVzY3JpcHRpb246XG4xNjMyOlx0ICogICBpcDZfdG5sX2lvY3RsKCkgaXMgdXNlZCBmb3IgbWFuYWdpbmcgSVB2NiB0dW5uZWxzXG4xNjMzOlx0ICogICBmcm9tIHVzZXJzcGFjZS5cbjE2MzQ6XHQgKlxuMTYzNTpcdCAqICAgVGhlIHBvc3NpYmxlIGNvbW1hbmRzIGFyZSB0aGUgZm9sbG93aW5nOlxuMTYzNjpcdCAqICAgICAlU0lPQ0dFVFRVTk5FTDogZ2V0IHR1bm5lbCBwYXJhbWV0ZXJzIGZvciBkZXZpY2VcbjE2Mzc6XHQgKiAgICAgJVNJT0NBRERUVU5ORUw6IGFkZCB0dW5uZWwgbWF0Y2hpbmcgZ2l2ZW4gdHVubmVsIHBhcmFtZXRlcnNcbjE2Mzg6XHQgKiAgICAgJVNJT0NDSEdUVU5ORUw6IGNoYW5nZSB0dW5uZWwgcGFyYW1ldGVycyB0byB0aG9zZSBnaXZlblxuMTYzOTpcdCAqICAgICAlU0lPQ0RFTFRVTk5FTDogZGVsZXRlIHR1bm5lbFxuMTY0MDpcdCAqXG4xNjQxOlx0ICogICBUaGUgZmFsbGJhY2sgZGV2aWNlIFwmIzM0O2lwNnRubDBcJiMzNDssIGNyZWF0ZWQgZHVyaW5nIG1vZHVsZVxuMTY0MjpcdCAqICAgaW5pdGlhbGl6YXRpb24sIGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBvdGhlciB0dW5uZWwgZGV2aWNlcy5cbjE2NDM6XHQgKlxuMTY0NDpcdCAqIFJldHVybjpcbjE2NDU6XHQgKiAgIDAgb24gc3VjY2VzcyxcbjE2NDY6XHQgKiAgICUtRUZBVUxUIGlmIHVuYWJsZSB0byBjb3B5IGRhdGEgdG8gb3IgZnJvbSB1c2Vyc3BhY2UsXG4xNjQ3Olx0ICogICAlLUVQRVJNIGlmIGN1cnJlbnQgcHJvY2VzcyBoYXNuJiMzOTt0ICVDQVBfTkVUX0FETUlOIHNldFxuMTY0ODpcdCAqICAgJS1FSU5WQUwgaWYgcGFzc2VkIHR1bm5lbCBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLFxuMTY0OTpcdCAqICAgJS1FRVhJU1QgaWYgY2hhbmdpbmcgYSB0dW5uZWwmIzM5O3MgcGFyYW1ldGVycyB3b3VsZCBjYXVzZSBhIGNvbmZsaWN0XG4xNjUwOlx0ICogICAlLUVOT0RFViBpZiBhdHRlbXB0aW5nIHRvIGNoYW5nZSBvciBkZWxldGUgYSBub25leGlzdGluZyBkZXZpY2VcbjE2NTE6XHQgKiovXG4xNjUyOlx0XG4xNjUzOlx0c3RhdGljIGludFxuMTY1NDpcdGlwNl90bmxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4xNjU1Olx0XHRcdCAgICAgICB2b2lkIF9fdXNlciAqZGF0YSwgaW50IGNtZClcbjE2NTY6XHR7XG4xNjU3Olx0XHRpbnQgZXJyID0gMDtcbjE2NTg6XHRcdHN0cnVjdCBpcDZfdG5sX3Bhcm0gcDtcbjE2NTk6XHRcdHN0cnVjdCBfX2lwNl90bmxfcGFybSBwMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gcmVmbGVjdGluZyBvbiB0aGUgaW5pdGlhbCBwcm9tcHQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYGlwNl90bmxfc2lvY2RldnByaXZhdGVgKioKCkFscmlnaHQsIHRoYXQgYGlwNl90bmxfc2lvY2RldnByaXZhdGVgLi4uIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZXRoaW5nIGluIG15IG1lbnRhbCBsaWJyYXJ5LiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgcHJpdmF0ZSBpb2N0bCBvcGVyYXRpb24gd2l0aGluIHRoZSBJUHY2IHR1bm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkuIEdpdmVuIHRoZSBuYW1lLCBpdCBzY3JlYW1zICYjMzQ7dHVubmVsJiMzNDsgYW5kIHRoZSAmIzM0O3Npb2MmIzM0OyBzdWdnZXN0cyBzb2NrZXQgaW50ZXJmYWNlIGNvbnRyb2wuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV0YWlscy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGhhbmRsaW5nIHNvbWUgdmVuZG9yLXNwZWNpZmljIG9yIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGVzZSB0dW5uZWxzLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gbXkgdGhvdWdodHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSB0aGUgYHNpdC5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgU0lUIChTaW1wbGUgSW50ZXJuZXQgVHJhbnNpdGlvbikgZHJpdmVyIGxpdmVzLCBhbmQgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHBsYWNlIGZvciB0aGluZ3MgbGlrZSBpb2N0bCBjYWxscyByZWxhdGVkIHRvIElQdjYgdHVubmVscy4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgcGxhY2UgdG8gcHV0IHRoZSBpb2N0bCBkZWZpbml0aW9ucyBhbmQgaGFuZGxlcnMgZm9yIGFueXRoaW5nIHRvIGRvIHdpdGggSVB2NiB0dW5uZWxsaW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSB1c2Ugb2YgdGhlIHJlbGF0ZWQgaWRlbnRpZmllciB3aXRoaW4gdGhhdCBzb3VyY2UgZmlsZS4gSXQgd291bGQgYmUgbXkgcHJpbWUgcGxhY2UgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Npb2NkZXZwcml2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmM9MTM2OD1zdGF0aWMgaW50XG5uZXQvaXB2Ni9zaXQuYzoxMzY5OmlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcbm5ldC9pcHY2L3NpdC5jLTEzNzAtXHRcdFx0ICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY2L3NpdC5jLTEzNzYtXHRjYXNlIFNJT0NERUxUVU5ORUw6XG5uZXQvaXB2Ni9zaXQuYzoxMzc3Olx0XHRyZXR1cm4gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKGRldiwgaWZyLCBkYXRhLCBjbWQpO1xubmV0L2lwdjYvc2l0LmMtMTM3OC1cdGNhc2UgU0lPQ0dFVFBSTDpcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xMzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcDZfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNDAwLVx0Lm5kb19zdGFydF94bWl0XHQ9IHNpdF90dW5uZWxfeG1pdCxcbm5ldC9pcHY2L3NpdC5jOjE0MDE6XHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjYvc2l0LmMtMTQwMi1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDAwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElQdjYgVHVubmVsIERyaXZlciBJc3N1ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O3ZlIGdvdCBgaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlYCBhbmQgYGlwNl90bmxfc2lvY2RldnByaXZhdGVgIGZsYWdnZWQgaW4gbXkgbWluZC4gU291bmRzIGxpa2UgcG90ZW50aWFsIGludGVyYWN0aW9uIHByb2JsZW1zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBwcml2YXRlIGRldmljZSBjb250cm9sIGlvY3RscyB3aXRoaW4gSVB2NiB0dW5uZWwgZHJpdmVycy4gSXQmIzM5O3MgYSBiaXQgb2YgYSBodW5jaCwgYnV0IHRoZXNlIHNwZWNpZmljIHN5bWJvbHMganVtcCBvdXQgYXMgYSBzdGFydGluZyBwb2ludC4KCkdpdmVuIHRoZSBjb250ZXh0LCBteSBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYGlwX3R1bm5lbC5jYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgdHVubmVsIGRyaXZlciBmdW5jdGlvbmFsaXR5IGlzIGhvdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgc2lvY2RldnByaXZhdGVgIGhhbmRsaW5nIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBhbnkgdW51c3VhbCBhY2Nlc3MgcGF0dGVybnMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYWxsb3cgZm9yIGltcHJvcGVyIGludGVyYWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IHR1bm5lbCBpbnN0YW5jZXMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgZHVyaW5nIGlvY3RsIGNhbGxzLiBUaGF0IGZpbGUgaXMgcHJvYmFibHkgbXkgYmVzdCBsZWFkIHRvIGludmVzdGlnYXRlIHRoZXNlIGZsYWdnZWQgc3ltYm9scy4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZXNlIHByaXZhdGUgaW9jdGwmIzM5O3MgaGFuZGxpbmcgd2l0aGluIGFuIElQdjYgdHVubmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDA9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQxLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA0MjppbnQgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0My1cdFx0XHQgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNTQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2lvY2RldnByaXZhdGUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYCBFeHBvcnQqKgoKQWxyaWdodCwgc28gYGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgaXMgZXhwb3J0ZWQsIGh1aD8gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBmbGFnIGluIG15IG1pbmQuIEV4cG9ydGVkIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB3aXRoICYjMzQ7cHJpdmF0ZSYjMzQ7IGluIHRoZSBuYW1lLCBhbHdheXMgd2FycmFudCBhIGNsb3NlciBsb29rLiBUaGV5JiMzOTtyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMsIG9yIG1heWJlIGp1c3QgYXJlYXMgd2hlcmUgZnV0dXJlIGNoYW5nZXMgY291bGQgcmlwcGxlIG91dCB1bmV4cGVjdGVkbHkuCgpNeSBuZXh0IHN0ZXAsIG9idmlvdXNseSwgaXMgdG8gcGluIGRvd24gd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIHB1cnBvc2UsIGl0cyBpbXBhY3QsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGFkaGVyaW5nIHRvIGVzdGFibGlzaGVkIGludGVyZmFjZXMuIEkmIzM5O2xsIGJlIHNpZnRpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzLCBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhbmQgd2h5IGl0JiMzOTtzIGJlZW4gZXhwb3NlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRha2UgZnVydGhlciBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTk4Ny1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlwZ3JlX3htaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODg6XHQubmRvX3Npb2NkZXZwcml2YXRlXHQ9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4OS1cdC5uZG9fY2hhbmdlX210dVx0XHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDA9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQxLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA0MjppbnQgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0My1cdFx0XHQgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNTQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2lvY2RldnByaXZhdGUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cbi0tXG5uZXQvaXB2NC9pcF92dGkuYz00MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2dGlfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy00MjAtXHQubmRvX3N0YXJ0X3htaXRcdD0gdnRpX3R1bm5lbF94bWl0LFxubmV0L2lwdjQvaXBfdnRpLmM6NDIxOlx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY0L2lwX3Z0aS5jLTQyMi1cdC5uZG9fY2hhbmdlX210dVx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcF9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0zODMtXHQubmRvX3N0YXJ0X3htaXRcdD0gaXBpcF90dW5uZWxfeG1pdCxcbm5ldC9pcHY0L2lwaXAuYzozODQ6XHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjQvaXBpcC5jLTM4NS1cdC5uZG9fY2hhbmdlX210dSA9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSVAgVHVubmVsIERldmljZSBDb250cm9sIC0gQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYC4uLiByaWdodCwgdGhhdCYjMzk7cyB0aGUgY29udHJvbCBpbnRlcmZhY2UsIHRoZSBzeXN0ZW0gY2FsbCwgZm9yIHNldHRpbmcgdXAgYW5kIG1hbmFnaW5nIHRoZXNlIElQIHR1bm5lbHMuIFNvLCBpdCYjMzk7cyB1c2VkIGJ5IHRoZSBtYWpvciBwbGF5ZXJzOiBgaXBncmVgIChHUkUgdHVubmVscyksIGB2dGlgIChWaXJ0dWFsIFR1bm5lbCBJbnRlcmZhY2UgLSBhIGtleSBjb21wb25lbnQgZm9yIFZQTnMsIGVzcGVjaWFsbHkgaW4gb2xkZXIgc2V0dXBzLCBJIHRoaW5rKSwgYW5kIG9mIGNvdXJzZSwgYGlwaXBgICh0aGUgYmFzaWMgSVAtaW4tSVAgZW5jYXBzdWxhdGlvbikuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhleSBhbGwgbmVlZCBhIHdheSB0byBwYXNzIHByaXZhdGUsIGRldmljZS1zcGVjaWZpYyBkYXRhIHRvIHRoZSBrZXJuZWwgZm9yIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoYXQgbWVjaGFuaXNtLgoKQnV0LCBhIHRob3VnaHQgZW1lcmdlczsgd2hhdCBhYm91dCBgaXA2Z3JlYD8gSSBjYW4mIzM5O3QgcXVpdGUgcmVjYWxsIGlmIGl0IHVzZXMgdGhlIHNhbWUgaW50ZXJmYWNlOyBJIGFzc3VtZSBzbywgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgY2FzZS4gVGhlIHVuZGVybHlpbmcgdHVubmVsIGltcGxlbWVudGF0aW9ucywgd2hpbGUgZGlmZmVyZW50IGJlY2F1c2Ugb2YgSVB2NiBoZWFkZXJzLCBwcm9iYWJseSBzdGlsbCBsZXZlcmFnZSBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYCBmb3IgdGhlIGNvcmUgc2V0dXAgYW5kIGNvbnRyb2wgb3BlcmF0aW9ucy4gSSYjMzk7ZCBoYXRlIHRvIGJlIHdyb25nIGhlcmUgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgSSBkaWQgYSBzaW1pbGFyIGluc3BlY3Rpb24gb24gdGhhdCBhIGZldyB5ZWFycyBhZ28uIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2lvY2RldnByaXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jPTEyMzg9c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9wYXJtX3RvX3VzZXIoc3RydWN0IGlwNl90bmxfcGFybTIgKnUsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTUtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI1NjpzdGF0aWMgaW50IGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjU3LVx0XHRcdFx0XHRzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTE0MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZncmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTQxNy1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlwNmdyZV90dW5uZWxfeG1pdCxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxNDE4Olx0Lm5kb19zaW9jZGV2cHJpdmF0ZVx0PSBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTktXHQubmRvX2NoYW5nZV9tdHVcdFx0PSBpcDZfdG5sX2NoYW5nZV9tdHUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDYyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgR1JFIFR1bm5lbCBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlYCwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSByZWxhdGVkIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpc3N1ZS4gSSBzaG91bGQgbWFwIG91dCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBhbmQgaW50ZXJhY3Qgd2l0aCB0dW5uZWxzIHRvIGdldCB0aGUgZnVsbCB2aWV3LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICBgaXBncmVfbmV3bGlua2AsIGBpcGdyZV9jaGFuZ2VsaW5rYAoqICAgYGVyc3Bhbl9uZXdsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYAoqICAgYHZ0aV9uZXdsaW5rYCwgYHZ0aV9jaGFuZ2VsaW5rYAoqICAgYGlwaXBfbmV3bGlua2AsIGBpcGlwX2NoYW5nZWxpbmtgCiogICBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2Z3JlX2NoYW5nZWxpbmtgCiogICBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgCiogICBgaXA2X3RubF9uZXdsaW5rYCwgYGlwNl90bmxfY2hhbmdlbGlua2AKKiAgIGBpcGlwNl9uZXdsaW5rYCwgYGlwaXA2X2NoYW5nZWxpbmtgCiogICBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AKKiAgIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgCiogICBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAKKiAgIGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYAoqICAgYGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAKKiAgIGBpcGlwX3R1bm5lbF9jdGxgCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBpcGlwX3R1bm5lbF9jdGxgLi4uIGlzbiYjMzk7dCB0aGF0IGp1c3QgYSB3cmFwcGVyIGZvciBgbmRvX3R1bm5lbF9jdGxgIGZvciB0aGUgYGlwaXBgIHR1bm5lbCB0eXBlPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGVyZSYjMzk7cyBhIGNvbW1vbiBjb250cm9sIHBhdGgsIGBuZG9fdHVubmVsX2N0bGAsIGFuZCB0aGUgdHVubmVsLXNwZWNpZmljIHJvdXRpbmVzIHdvdWxkIGhvb2sgaW50byBpdC4KCk5vdywgdGhlIG5hdHVyYWwgcXVlc3Rpb24gaXM6IEFyZSB0aGVyZSBvdGhlciB0dW5uZWwgdHlwZXMgdXNpbmcgdGhlIGBuZG9fdHVubmVsX2N0bGAgbWVjaGFuaXNtPyBLbm93aW5nIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fdHVubmVsX2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTk5MS1cdC5uZG9fZ2V0X2lmbGlua1x0XHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmM6OTkyOlx0Lm5kb190dW5uZWxfY3RsXHRcdD0gaXBncmVfdHVubmVsX2N0bCxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5My19O1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDI9aW50IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQ5LVx0XHRyZXR1cm4gLUVGQVVMVDtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNTA6XHRlcnIgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fdHVubmVsX2N0bChkZXYsIFx1MDAyNnAsIGNtZCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDUxLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2ICFpcF90dW5uZWxfcGFybV90b191c2VyKGRhdGEsIFx1MDAyNnApKVxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jPTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZ0aV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jLTQyNC1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBfdnRpLmM6NDI1Olx0Lm5kb190dW5uZWxfY3RsXHQ9IHZ0aV90dW5uZWxfY3RsLFxubmV0L2lwdjQvaXBfdnRpLmMtNDI2LX07XG4tLVxubmV0L2lwdjQvaXBpcC5jPTM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMzg3LVx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXG5uZXQvaXB2NC9pcGlwLmM6Mzg4Olx0Lm5kb190dW5uZWxfY3RsXHQ9IGlwaXBfdHVubmVsX2N0bCxcbm5ldC9pcHY0L2lwaXAuYy0zODktXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcF9maWxsX2ZvcndhcmRfcGF0aCxcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NDc4PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNDk0LVxubmV0L2lwdjQvaXBtci5jOjQ5NTpcdGlmICghdHVubmVsX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb190dW5uZWxfY3RsKVxubmV0L2lwdjQvaXBtci5jLTQ5Ni1cdFx0Z290byBvdXQ7XG5uZXQvaXB2NC9pcG1yLmM6NDk3Olx0ZXJyID0gdHVubmVsX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb190dW5uZWxfY3RsKHR1bm5lbF9kZXYsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcG1yLmMtNDk4LVx0XHRcdFNJT0NBRERUVU5ORUwpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYy01MTQtXHRcdGRldl9jbG9zZShuZXdfZGV2KTtcbm5ldC9pcHY0L2lwbXIuYzo1MTU6XHRcdHR1bm5lbF9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fdHVubmVsX2N0bCh0dW5uZWxfZGV2LCBcdTAwMjZwLFxubmV0L2lwdjQvaXBtci5jLTUxNi1cdFx0XHRcdFNJT0NERUxUVU5ORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgVHVubmVsIENvbnRyb2wgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGlzIGRvd24sIGFuZCBpdCBsb29rcyBsaWtlIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIHVsdGltYXRlbHkgZnVubmVscyBpdHMgd2F5IHRvIGBuZG9fdHVubmVsX2N0bGAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHRoZSBjb21tb24gaW50ZXJmYWNlLiBOb3csIHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcsIHRoZSBhY3R1YWwgZGV2aWNlLXNwZWNpZmljIGhhbmRsaW5nLCB0aGF0JiMzOTtzIGJlaW5nIGRvbmUgYnkgYGlwZ3JlX3R1bm5lbF9jdGxgLCBgdnRpX3R1bm5lbF9jdGxgLCBhbmQgYGlwaXBfdHVubmVsX2N0bGAuIEl0IG1ha2VzIG1vcmUgc2Vuc2UsIGZyb20gYSBjbGFyaXR5IGFuZCBmb2N1cyBwZXJzcGVjdGl2ZSwgdG8gcHV0IHRob3NlIGRldmljZS1zcGVjaWZpYyBoYW5kbGVycyBhcyB0aGUgZm9jYWwgcG9pbnRzLiBMZXQmIzM5O3MgbWFrZSB0aGF0IGFkanVzdG1lbnQgYW5kIHVwZGF0ZSB0aGUgc3ltYm9sIGxpc3QgYWNjb3JkaW5nbHkuIEFuZCBhcyBhIHF1aWNrIHNhbml0eSBjaGVjaywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBJUHY2IHNpZGUgb2YgdGhpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AgaXMgYmVoYXZpbmcgc2ltaWxhcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz0xMjM4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjU1LVxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNTY6c3RhdGljIGludCBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTI1Ny1cdFx0XHRcdFx0c3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xNDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2Z3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTctXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpcDZncmVfdHVubmVsX3htaXQsXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTQxODpcdC5uZG9fc2lvY2RldnByaXZhdGVcdD0gaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xNDE5LVx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gaXA2X3RubF9jaGFuZ2VfbXR1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI1NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbmsgSGFuZGxlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaXJlY3QgaGFuZGxlciBvZiBzb21lIHNvcnQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gbmV0d29yayBsaW5rcy4gVGhlIGtleSBoZXJlLCB0aGUgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgYXMgdGhleSYjMzk7cmUgY2FsbGVkLCBhcmUgYWxsIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIGBuZXdsaW5rYCBhbmQgYGNoYW5nZWxpbmtgIGF0IHRoZSBlbmQsIGFsb25nIHdpdGggYSBmZXcgY29udHJvbCBhbmQgcHJpdmF0ZSBpbnRlcmZhY2UgY2FsbHMuICBXZSYjMzk7dmUgZ290IGEgbG90IG9mIHRoZW0sIGNvdmVyaW5nIGEgdmFyaWV0eSBvZiB0dW5uZWxpbmcgcHJvdG9jb2xzOiBuZXRraXQsIGdyZSwgZXJzcGFuLCB2dGksIGlwaXAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy4gVGhhdCYjMzk7cyBhIHByZXR0eSBjb21wcmVoZW5zaXZlIHNldC4KCk5leHQsIHdlIHNob3VsZCBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zIHdpbGwgY29tcGlsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFdlIGhhdmUgYSBzZXQgb2YgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRvIGxvb2sgYXQgLSBgTkVUS0lUYCwgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9WVElgIGFuZCBgTkVUX0lQVlRJYC4gU2luY2UgYE5FVF9JUFZUSWAgaXMgcHJlc2VudCwgaXQgbG9va3MgbGlrZSB0aGF0IGlzIHRoZSBjb3JyZWN0IG9uZSB0byBmaW5kIHRoZSB2dGkgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKR2l2ZW4gdGhhdCBgTkVUX0lQVlRJYCBjb25maWcgaXMgdXNlZCBmb3IgdnRpLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBzZXR0aW5ncyBvZiB0aGUgdHVubmVsLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSAtIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGUgdG8gdGhlIGNvZGUgYW5kIHdoYXQgdGhleSBhY3R1YWxseSBlbmFibGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgdGhpbmcgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUFZUSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yNjg9Y29uZmlnIFNZTl9DT09LSUVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDMtXG5uZXQvaXB2NC9LY29uZmlnOjMwNDpjb25maWcgTkVUX0lQVlRJXG5uZXQvaXB2NC9LY29uZmlnLTMwNS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVA6IHR1bm5lbGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAxNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBUdW5uZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHllcywgZGVmaW5pdGVseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTkVUX0lQVlRJYCBoZXJlLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxheS4KClJpZ2h0LCBzbyBgaXBfdHVubmVsLmNgIGdldHMgYnVpbHQgd2hlbiBgTkVUX0lQX1RVTk5FTGAgaXMgZW5hYmxlZC4gQW5kIGBORVRfSVBfVFVOTkVMYCBpcywgaW4gdHVybiwgc2VsZWN0ZWQgYnkgYSBudW1iZXIgb2Ygb3RoZXIgY29uZmlncyBsaWtlIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBhbmQgb2YgY291cnNlLCBgTkVUX0lQVlRJYCDigJMgdGhlIG9uZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gVGhlbiB3ZSBoYXZlIGBpcDZfdHVubmVsLmNgIGJ1aWx0IGJ5IGBJUFY2X1RVTk5FTGAuIGBpcDZfZ3JlLmNgIHdoZW4gYElQVjZfR1JFYCBpcyBlbmFibGVkLiBBbmQgYHNpdC5jYCB3aXRoIGBJUFY2X1NJVGAgZW5hYmxlZC4gRmluYWxseSwgYG5ldGtpdC5jYCBpcyBjb21waWxlZCB3aGVuIGBORVRLSVRgIGlzIGVuYWJsZWQuCgpTbywgc3VtbWluZyBpdCB1cCwgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSB0byBtaW5kIGFyZTogYE5FVEtJVGAsIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQVlRJYCwgYElQVjZfR1JFYCwgYElQVjZfVFVOTkVMYCwgYElQVjZfU0lUYCwgYW5kLCB3aGlsZSBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBpbiB0aGUgb3JpZ2luYWwgdGV4dCwgSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNpbmNlIFZUSSBpcyBtZW50aW9uZWQsIGBJUFY2X1ZUSWAuCgpIb2xkIG9uLCBJIHN1c3BlY3QgYGlwNl90dW5uZWwuY2AgbWlnaHQgYmUgY29tcGlsZWQgZm9yIG90aGVyIHJlYXNvbnMgYXMgd2VsbCwgYnV0IGBJUFY2X1RVTk5FTGAgaXMgaXRzIG1haW4gdHJpZ2dlci4gSXQmIzM5O3MgYmVzdCB0byBjb25maXJtIHRoaXMgYW5kIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdHVubmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9NDE9b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJUHY0IE1ha2VmaWxlKioKClllcy4gKlRoYXQmIzM5O3MgdGhlIGRpcmVjdGlvbiBJIG5lZWQgdG8gZ28gaW4gdG8gZmlndXJlIG91dCB0aGlzIGlzc3VlLiogTGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBndXQgdGVsbHMgbWUgdGhlIGtleSBpcyBsaWtlbHkgaW4gYG5ldC9pcHY0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3J1Y2lhbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NCBzdGFjayBhcmUgZGVmaW5lZC4gKlRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZSouIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgcmVsYXRlZCBtb2R1bGVzIHRvIHNlZSB3aGVyZSB0aGluZ3MgbWlnaHQgYmUgZmFsbGluZyBhcGFydCwgcGVyaGFwcyBpbiB0ZXJtcyBvZiBsaW5raW5nLCBjb25maWd1cmF0aW9uLCBvciBkZXBlbmRlbmN5IHJlc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTE1LVx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTY6XHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNy1cdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICYjNDM7PSBpcF90dW5uZWwub1xubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfaXB2NC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjEzMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOZXR3b3JrIFR1bm5lbCBDb25maWd1cmF0aW9ucyoqCgpSaWdodCwgZ290IGl0LiBUaGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhcmU6IGBORVRLSVRgLCBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgYE5FVF9JUFZUSWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9WVElgLiBTZWVtcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIHNldCBvZiB0dW5uZWwgdHlwZXMsIGNvdmVyaW5nIElQdjQgYW5kIElQdjYgdmFyaWF0aW9ucy4KCk5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgd2UgYXJlbiYjMzk7dCB1c2luZyB0aGUgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdmFyaWFibGUgaW4gYW4gdW5leHBlY3RlZCBwbGFjZS4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB1bmludGVuZGVkIGludGVyYWN0aW9ucyBpbiB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfbGltaXRfaGVhZHJvb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTYyOT1pbnQgc2tiX3R1bm5lbF9jaGVja19wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmVuY2FwX2RzdCxcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNjMxLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjYzMjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTYzMy17XG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTY0NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDcte1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjY0ODpcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDktXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE5LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzIwOlx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMjEtXHRtdHUgLT0gdF9obGVuICYjNDM7IChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTExMjI9c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTExNDEtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE0MjpcdFx0XHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE0My1cdFx0XHRcdFx0XHRcdCAgIHRfaGxlbik7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE0NzQ9c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTUyNC1cdFx0aWYgKHRkZXYpIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTI1Olx0XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0Mztcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTI2LVx0XHRcdFx0XHRcdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7XG4tLVxubmV0L2lwdjYvc2l0LmM9MTA5NT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xMTMzLVx0fVxubmV0L2lwdjYvc2l0LmM6MTEzNDpcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pO1xubmV0L2lwdjYvc2l0LmMtMTEzNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzE2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFR1bm5lbCBIZWFkcm9vbSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgaGVhZHJvb20gbGltaXRhdGlvbnMgZm9yIGEgZmV3IHR1bm5lbCB0eXBlczogbmV0a2l0LCBpcCB0dW5uZWxzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gYWRkcmVzcy4gVGhlIGNoYW5nZSBzZWVtcyBzb3VuZCwgc28gSSYjMzk7bGwgYmUgbWFya2luZyB0aGlzIGFzIFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgdG91Y2hlZDogYE5FVEtJVGAsIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQVlRJYCwgYElQVjZfR1JFYCwgYElQVjZfVFVOTkVMYCwgYElQVjZfU0lUYCwgYW5kIGBJUFY2X1ZUSWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBhcmVhcyB0byBmb2N1cyBvbi4KCk15IGF0dGVudGlvbiBpcyBiZWluZyBkcmF3biB0byBhIHByZXR0eSBsb25nIGxpc3Qgb2Ygc3ltYm9scyByZWxhdGVkIHRvIHRoZSBuZXcgYW5kIGNoYW5nZSBsaW5rcywgYW5kIHR1bm5lbCBjb250cm9sOiBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AsIGFuZCBvbiB0aHJvdWdoIHNldmVyYWwgbW9yZSBmb3IgR1JFLCBFUlNQQU4sIFZUSSwgSVBJUCwgYW5kIHRoZWlyIElQdjYgY291bnRlcnBhcnRzLCBhbG9uZyB3aXRoIHRoZSB2YXJpb3VzIHR1bm5lbCBjb250cm9sIG9wZXJhdGlvbnMuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgc2VlIHRoYXQgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gIGlzIGFsc28gbW9kaWZpZWQgdG8gdXNlIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBkaWcgaW50byB0aG9zZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX2Fkal9oZWFkcm9vbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NjMyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTY0NC1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo2NDU6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDYtXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3MT12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjUzLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjU0Olx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIGhlYWRyb29tKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTY1NS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz02Njk9dm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg0NS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg0NjpcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtODQ3LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMDk3PWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMjcyLVx0XHRcdCYjNDM7IGRzdC1cdTAwM2VoZWFkZXJfbGVuICYjNDM7IHQtXHUwMDNlaGxlbjtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxMjczOlx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzQ3CgkJCQkJCQlvdXRwdXQ6IDM3NgoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIZWFkcm9vbSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYCBpcyB1c2VkIGluIHNldmVyYWwgdHJhbnNtaXQgKGB4bWl0YCkgZnVuY3Rpb25zOiBgaXBfbWRfdHVubmVsX3htaXRgLCBgaXBfdHVubmVsX3htaXRgLCBhbmQgYGlwNl90bmxfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSB0aG9zZSBgeG1pdGAgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGhlYWRyb29tIGxpbWl0YXRpb25zIGR1cmluZyAqYm90aCogY29uZmlndXJhdGlvbiAobmV3bGluaywgY2hhbmdlbGluaywgaW9jdGwpICphbmQqIHRyYW5zbWlzc2lvbiAoeG1pdCkuCgpGdXp6aW5nIHRoZSBgeG1pdGAgZnVuY3Rpb25zIGRpcmVjdGx5ICpjb3VsZCogYmUgZnJ1aXRmdWwsIGJ1dCBhcyBob3QtcGF0aCBmdW5jdGlvbnMsIHRoZXkgbWlnaHQgbm90IGJlIHRoZSBiZXN0IHRhcmdldCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdOKAmXMgZ3VpZGFuY2UuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvICYjMzQ7QXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuJiMzNDsgVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBkaXJlY3QgZnV6emluZyBvZiBob3QgcGF0aHMgaXMgcHJvbmUgdG8gaW1iYWxhbmNlcyBhbmQgaW5lZmZpY2llbnQgdGVzdCBjb3ZlcmFnZS4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHByb21wdCBhZHZpc2VzIGFnYWluc3QgZGlyZWN0bHkgZnV6emluZyBob3QtcGF0aCBmdW5jdGlvbnMsIGFuZCB0aGUgYHhtaXRgIGZ1bmN0aW9ucyBhcmUgaG90LXBhdGgsIEnigJlsbCBhdm9pZCBpbmNsdWRpbmcgdGhlbS4gVGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIOKAkyBgbmV3bGlua2AsIGBjaGFuZ2VsaW5rYCwgYW5kIGBpb2N0bGAg4oCTIGFyZSBpZGVhbCB0YXJnZXRzLCBhcyB0aGV5IGFyZSBub3QgaG90LXBhdGggYW5kIHJlcHJlc2VudCB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoZSBlcXVhdGlvbi4KCkxldOKAmXMgcmV2aWV3IHRoZSBwcm92aWRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGFyZSB0aGVyZToKCmBuZXRraXRfbmV3X2xpbmtgCmBuZXRraXRfY2hhbmdlX2xpbmtgCmBpcGdyZV9uZXdsaW5rYApgaXBncmVfY2hhbmdlbGlua2AKYGVyc3Bhbl9uZXdsaW5rYApgZXJzcGFuX2NoYW5nZWxpbmtgCmB2dGlfbmV3bGlua2AKYHZ0aV9jaGFuZ2VsaW5rYApgaXBpcF9uZXdsaW5rYApgaXBpcF9jaGFuZ2VsaW5rYApgaXA2Z3JlX25ld2xpbmtgCmBpcDZncmVfY2hhbmdlbGlua2AKYGlwNmVyc3Bhbl9uZXdsaW5rYApgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgCmBpcDZfdG5sX25ld2xpbmtgCmBpcDZfdG5sX2NoYW5nZWxpbmtgCmBpcGlwNl9uZXdsaW5rYApgaXBpcDZfY2hhbmdlbGlua2AKYGlwZ3JlX3R1bm5lbF9jdGxgCmB2dGlfdHVubmVsX2N0bGAKYGlwaXBfdHVubmVsX2N0bGAKYGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGVgCmBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYApgaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlYAoKVGhpcyBsb29rcyBsaWtlIGEgcm9idXN0IGxpc3QgY292ZXJpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBtYWtpbmcgaXQgYSBzb3VuZCBiYXNpcyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSeKAmWxsIHF1aWNrbHkgY2hlY2sgaWYgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gIGlzIHVzZWQgYW55d2hlcmUgKmVsc2UqLiBObywgaXQmIzM5O3Mgb25seSBpbiB0aG9zZSB0aHJlZSB0cmFuc21pdCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6CgpgTkVUS0lUYApgTkVUX0lQSVBgCmBORVRfSVBHUkVgCmBORVRfSVBWVElgCmBJUFY2X0dSRWAKYElQVjZfVFVOTkVMYApgSVBWNl9TSVRgCmBJUFY2X1ZUSWAKCkFuZCB0aGUgZGVwZW5kZW5jaWVzPyBgTkVUX0lQX1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIGFuZCBgTkVUX0lQVlRJYC4gYElQVjZgIGlzIHJlcXVpcmVkIGZvciBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBgSVBWNl9TSVRgLCBhbmQgYElQVjZfVlRJYC4gR29vZCwgdGhpcyBjb25maXJtcyB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLgoKVGhlcmVmb3JlLCBnaXZlbiBteSBhbmFseXNpcyBhbmQgY29uc2lkZXJhdGlvbnMgb2YgdGhlIHByb21wdCYjMzk7cyBzdWdnZXN0aW9ucywgSSYjMzk7bGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBhbmFseXNpcyB3YXJyYW50cyBmdXp6aW5nIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEtJVCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQVlRJJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVlRJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0a2l0X25ld19saW5rJiMzNDssCiAgICAmIzM0O25ldGtpdF9jaGFuZ2VfbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX25ld2xpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7dnRpX25ld2xpbmsmIzM0OywKICAgICYjMzQ7dnRpX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXBfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGdyZV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O3Z0aV90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwaXBfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDssCiAgICAmIzM0O2lwNl90bmxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYXhpbXVtIGhlYWRyb29tIGxpbWl0IGZvciBuZXRraXQgYW5kIElQIHR1bm5lbHMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0dW5uZWwgZGV2aWNlcyB2aWEgbmV0bGluayAobmV3bGluay9jaGFuZ2VsaW5rKSBhbmQgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUS0lUJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBWVEkmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9WVEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRraXRfbmV3X2xpbmsmIzM0OywKICAgICYjMzQ7bmV0a2l0X2NoYW5nZV9saW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV3bGluayYjMzQ7LAogICAgJiMzNDtlcnNwYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDt2dGlfbmV3bGluayYjMzQ7LAogICAgJiMzNDt2dGlfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7dnRpX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7aXBpcF90dW5uZWxfY3RsJiMzNDssCiAgICAmIzM0O2lwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OywKICAgICYjMzQ7aXA2X3RubF9zaW9jZGV2cHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1heGltdW0gaGVhZHJvb20gbGltaXQgZm9yIG5ldGtpdCBhbmQgSVAgdHVubmVscyB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHR1bm5lbCBkZXZpY2VzIHZpYSBuZXRsaW5rIChuZXdsaW5rL2NoYW5nZWxpbmspIGFuZCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb24gZW50cnkgcG9pbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTY6NTkuODEwNjUxNTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI5MjQwMzk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUS0lUXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBWVElcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVlRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0a2l0X25ld19saW5rXCIsXG4gICAgXCJuZXRraXRfY2hhbmdlX2xpbmtcIixcbiAgICBcImlwZ3JlX25ld2xpbmtcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwidnRpX25ld2xpbmtcIixcbiAgICBcInZ0aV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwX25ld2xpbmtcIixcbiAgICBcImlwaXBfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fbmV3bGlua1wiLFxuICAgIFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNl90bmxfbmV3bGlua1wiLFxuICAgIFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwNl9uZXdsaW5rXCIsXG4gICAgXCJpcGlwNl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJ2dGlfdHVubmVsX2N0bFwiLFxuICAgIFwiaXBpcF90dW5uZWxfY3RsXCIsXG4gICAgXCJpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcDZfdG5sX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWF4aW11bSBoZWFkcm9vbSBsaW1pdCBmb3IgbmV0a2l0IGFuZCBJUCB0dW5uZWxzIHRvIHByZXZlbnQgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdHVubmVsIGRldmljZXMgdmlhIG5ldGxpbmsgKG5ld2xpbmsvY2hhbmdlbGluaykgYW5kIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29uZmlndXJhdGlvbiBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU2OjU5LjgxMDY1ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjA2MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVhMjczMTQ4YmNlNDUxZmY2NzJmMWI1M2Y1MDY2MDQzNTUxNmE2YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzo1Njo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRraXQuYyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXFxuaW5kZXggYTM5MzFjZDgyMTMyMS4uZDhlOWNlMWM2NTlkMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXFxuQEAgLTI1LDYgKzI1LDggQEBcXG4gI2RlZmluZSBORVRLSVRfTlVNX1JYX1FVRVVFU19SRUFMIDFcXG4gI2RlZmluZSBORVRLSVRfTlVNX1RYX1FVRVVFU19SRUFMIDFcXG4gXFxuKyNkZWZpbmUgTkVUS0lUX0hFQURST09NX01BWCA1MTJcXG4rXFxuIHN0cnVjdCBuZXRraXQge1xcbiBcXHRfX2NhY2hlbGluZV9ncm91cF9iZWdpbihuZXRraXRfZmFzdHBhdGgpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqcGVlcjtcXG5AQCAtMTI0NCw3ICsxMjQ2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGtpdF9wb2xpY3lbSUZMQV9ORVRLSVRfTUFYICsgMV0gPSB7XFxuIFxcdFtJRkxBX05FVEtJVF9NT0RFXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX0wzKSxcXG4gXFx0W0lGTEFfTkVUS0lUX1BPTElDWV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtJRkxBX05FVEtJVF9QRUVSX1BPTElDWV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLVxcdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuK1xcdFtJRkxBX05FVEtJVF9IRUFEUk9PTV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMTYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBORVRLSVRfSEVBRFJPT01fTUFYKSxcXG4gXFx0W0lGTEFfTkVUS0lUX1RBSUxST09NXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4gXFx0W0lGTEFfTkVUS0lUX1NDUlVCXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTkVUS0lUX1NDUlVCX0RFRkFVTFQpLFxcbiBcXHRbSUZMQV9ORVRLSVRfUEVFUl9TQ1JVQl1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuaW5kZXggZDcwOGI2NmU1NWNkYS4uODVlMzQ1NWNlYTI1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcXG5AQCAtNjI5LDggKzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxcbiBpbnQgc2tiX3R1bm5lbF9jaGVja19wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmVuY2FwX2RzdCxcXG4gXFx0XFx0XFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuIHtcXG4gXFx0Lyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWRcXG4gXFx0ICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuXFxuQEAgLTY0MCw2ICs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGhlYWRyb29tIFxcdTAwM2UgbWF4X2FsbG93ZWQpXFxuIFxcdFxcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XFxuIFxcbitcXHRyZXR1cm4gaGVhZHJvb207XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbit7XFxuK1xcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcXG4rXFxuIFxcdGlmIChoZWFkcm9vbSBcXHUwMDNlIFJFQURfT05DRShkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXFxuIFxcdFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXFxuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXFxuQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRtdHUgPSBtaW4odGRldi1cXHUwMDNlbXR1LCBJUF9NQVhfTVRVKTtcXG4gXFx0fVxcbiBcXG4tXFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gKyBobGVuO1xcbitcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gKyBobGVuKTtcXG4gXFx0bXR1IC09IHRfaGxlbiArIChkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwKTtcXG4gXFxuIFxcdGlmIChtdHUgXFx1MDAzYyBJUFY0X01JTl9NVFUpXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9ncmUuYyBiL25ldC9pcHY2L2lwNl9ncmUuY1xcbmluZGV4IGI4NDMxMTZlOWI3MDMuLjA0YWMwMDdlYmNjODcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X2dyZS5jXFxuQEAgLTExMzcsOCArMTEzNywxMCBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZGV2KSB7XFxuLVxcdFxcdFxcdHVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHRfaGxlbjtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IGRzdF9sZW47XFxuK1xcbitcXHRcXHRcXHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB0X2hsZW4pO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHQtXFx1MDAzZWRldi1cXHUwMDNlaGVhZGVyX29wcylcXG4gXFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkc3RfbGVuO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBiZjhlNDBhZjYwYjA4Li40MDM5OTUyNzNjYmFlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0xNTIyLDggKzE1MjIsOSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbiBcXHRcXHRcXHR0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHQtXFx1MDAzZW5ldCwgcC1cXHUwMDNlbGluayk7XFxuIFxcbiBcXHRcXHRpZiAodGRldikge1xcbi1cXHRcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxuLVxcdFxcdFxcdFxcdHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSArIHRfaGxlbjtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dF9obGVuKTtcXG4gXFx0XFx0XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVxcdTAwM2VtdHUsIElQNl9NQVhfTVRVKTtcXG4gXFxuIFxcdFxcdFxcdG10dSA9IG10dSAtIHRfaGxlbjtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xcbmluZGV4IGEzOGIyNGZiODM4NDIuLjE5YjdmYThkMWEyYTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcXG4rKysgYi9uZXQvaXB2Ni9zaXQuY1xcbkBAIC0xMTMxLDcgKzExMzEsNyBAQCBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZW10dSwgbXR1KTtcXG4gXFx0XFx0aGxlbiA9IHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcXG4gXFx0fVxcbi1cXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XFxuK1xcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWwgKnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjAwLjI0NzU0MTEwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMjQ4NzE0MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRLSVRcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUFZUSVwiLFxuICAgIFwiSVBWNl9HUkVcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NJVFwiLFxuICAgIFwiSVBWNl9WVElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRraXRfbmV3X2xpbmtcIixcbiAgICBcIm5ldGtpdF9jaGFuZ2VfbGlua1wiLFxuICAgIFwiaXBncmVfbmV3bGlua1wiLFxuICAgIFwiaXBncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZXJzcGFuX25ld2xpbmtcIixcbiAgICBcImVyc3Bhbl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJ2dGlfbmV3bGlua1wiLFxuICAgIFwidnRpX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXBfbmV3bGlua1wiLFxuICAgIFwiaXBpcF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZncmVfbmV3bGlua1wiLFxuICAgIFwiaXA2Z3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNmVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gICAgXCJpcDZfdG5sX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXA2X25ld2xpbmtcIixcbiAgICBcImlwaXA2X2NoYW5nZWxpbmtcIixcbiAgICBcImlwZ3JlX3R1bm5lbF9jdGxcIixcbiAgICBcInZ0aV90dW5uZWxfY3RsXCIsXG4gICAgXCJpcGlwX3R1bm5lbF9jdGxcIixcbiAgICBcImlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGVcIixcbiAgICBcImlwNl90bmxfc2lvY2RldnByaXZhdGVcIixcbiAgICBcImlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYXhpbXVtIGhlYWRyb29tIGxpbWl0IGZvciBuZXRraXQgYW5kIElQIHR1bm5lbHMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0dW5uZWwgZGV2aWNlcyB2aWEgbmV0bGluayAobmV3bGluay9jaGFuZ2VsaW5rKSBhbmQgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWEyNzMxNDhiY2U0NTFmZjY3MmYxYjUzZjUwNjYwNDM1NTE2YTZhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NTY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRraXQuYyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXG5pbmRleCBhMzkzMWNkODIxMzIxLi5kOGU5Y2UxYzY1OWQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0a2l0LmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXG5AQCAtMjUsNiArMjUsOCBAQFxuICNkZWZpbmUgTkVUS0lUX05VTV9SWF9RVUVVRVNfUkVBTCAxXG4gI2RlZmluZSBORVRLSVRfTlVNX1RYX1FVRVVFU19SRUFMIDFcbiBcbisjZGVmaW5lIE5FVEtJVF9IRUFEUk9PTV9NQVggNTEyXG4rXG4gc3RydWN0IG5ldGtpdCB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9iZWdpbihuZXRraXRfZmFzdHBhdGgpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKnBlZXI7XG5AQCAtMTI0NCw3ICsxMjQ2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGtpdF9wb2xpY3lbSUZMQV9ORVRLSVRfTUFYICsgMV0gPSB7XG4gXHRbSUZMQV9ORVRLSVRfTU9ERV1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBORVRLSVRfTDMpLFxuIFx0W0lGTEFfTkVUS0lUX1BPTElDWV1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0lGTEFfTkVUS0lUX1BFRVJfUE9MSUNZXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLVx0W0lGTEFfTkVUS0lUX0hFQURST09NXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG4rXHRbSUZMQV9ORVRLSVRfSEVBRFJPT01dXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UxNixcbitcdFx0XHRcdFx0XHRcdCBORVRLSVRfSEVBRFJPT01fTUFYKSxcbiBcdFtJRkxBX05FVEtJVF9UQUlMUk9PTV1cdFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxuIFx0W0lGTEFfTkVUS0lUX1NDUlVCXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE5FVEtJVF9TQ1JVQl9ERUZBVUxUKSxcbiBcdFtJRkxBX05FVEtJVF9QRUVSX1NDUlVCXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBORVRLSVRfU0NSVUJfREVGQVVMVCksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5pbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbkBAIC02MjksOCArNjI5LDcgQEAgc3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXG4gXHRcdFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4ge1xuIFx0Lyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWRcbiBcdCAqIHdpbGwgb3ZlcmZsb3cgaGVhZGVyIG9mZnNldHMgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLlxuQEAgLTY0MCw2ICs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgbWF4X2FsbG93ZWQpXG4gXHRcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XG4gXG4rXHRyZXR1cm4gaGVhZHJvb207XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3tcbitcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbitcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgUkVBRF9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xuIFx0fVxuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xuIFx0bXR1IC09IHRfaGxlbiArIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4gXG4gXHRpZiAobXR1IFx1MDAzYyBJUFY0X01JTl9NVFUpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4wNGFjMDA3ZWJjYzg3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC0xMTM3LDggKzExMzcsMTAgQEAgc3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldikge1xuLVx0XHRcdHVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbitcdFx0XHR1bnNpZ25lZCBpbnQgZHN0X2xlbjtcbitcbitcdFx0XHRkc3RfbGVuID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcbitcdFx0XHRcdFx0XHRcdCAgIHRfaGxlbik7XG4gXG4gXHRcdFx0aWYgKHQtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMpXG4gXHRcdFx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZHN0X2xlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGJmOGU0MGFmNjBiMDguLjQwMzk5NTI3M2NiYWUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE1MjIsOCArMTUyMiw5IEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xuLVx0XHRcdFx0dGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKyB0X2hsZW47XG4rXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXG4rXHRcdFx0XHRcdFx0XHRcdFx0dGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gK1xuK1x0XHRcdFx0XHRcdFx0XHRcdHRfaGxlbik7XG4gXHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xuIFxuIFx0XHRcdG10dSA9IG10dSAtIHRfaGxlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcbisrKyBiL25ldC9pcHY2L3NpdC5jXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbXR1KTtcbiBcdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4gXHR9XG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjAwLjI0NzU0MjE5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDkzMDM1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIZWFkcm9vbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGhlYWRyb29tIGxpbWl0cyB3aXRoaW4gYSBmZXcgdHVubmVsaW5nIHByb3RvY29scy4gSXQgc2VlbXMgbGlrZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGBORVRLSVRfSEVBRFJPT01fTUFYYCBhbmQgYXJlIGNhcHBpbmcgYElGTEFfTkVUS0lUX0hFQURST09NYCB0byBpdCwgYW5kIHRoZSBuZXcgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSgpYCBmdW5jdGlvbiBpcyBiZWluZyBhcHBsaWVkIGluIHNldmVyYWwgcGxhY2VzOiBgaXBfdHVubmVsYCwgYGlwNl9ncmVgLCBgaXA2X3R1bm5lbGAsIGFuZCBgc2l0YC4gVGhpcyBtYWtlcyBzZW5zZTsgZXhjZXNzIGhlYWRyb29tIGNhbiBiZSBhIG5hc3R5IHNvdXJjZSBvZiBwcm9ibGVtcywgYW5kIGNhcHBpbmcgaXQgaXMgYSBnb29kIHByZXZlbnRhdGl2ZSBtZWFzdXJlLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZm9jdXMgb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIExldCdzIHNlZS4uLlxuXG4qICAgRm9yIGBuZXRraXRgLCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBmaWxlIGlzIGBkcml2ZXJzL25ldC9uZXRraXQuY2AgYW5kIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfTkVUS0lUYC4gU2ltcGxlIGVub3VnaC5cbiogICBgaXBfdHVubmVsYCdzIGNvZGUgcmVzaWRlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsLmNgLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09ORklHX05FVF9JUElQYCwgYENPTkZJR19ORVRfSVBHUkVgLCBhbmQgc28gb24uIFJpZ2h0LCBzbyBpdCBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyB0dW5uZWwgdHlwZS5cbiogICBgaXA2X2dyZWAgaXMgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfSVBWNl9HUkVgLlxuKiAgIGBpcDZfdHVubmVsYCwgc2ltaWxhcmx5LCBpcyBmb3VuZCBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBhbmQgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfVFVOTkVMYC5cbiogICBBbmQgZmluYWxseSwgYHNpdGAgaXMgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2l0LmNgLCBjb250cm9sbGVkIGJ5IGBDT05GSUdfSVBWNl9TSVRgLlxuXG5Pa2F5LCBJJ2xsIG5lZWQgdG8gZ28gYW5kIGV4YW1pbmUgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZXNlIG9wdGlvbnMgbm93IHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGZ1bGx5LiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0IGZvciBkaWdnaW5nIGludG8gdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzUwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MDYuNDU2ODQ4Mzk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTAzMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRLSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTQ1Mz1jb25maWcgTkxNT05cXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDYyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDYzOmNvbmZpZyBORVRLSVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cXHRib29sIFxcXCJCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzowNi41MDI5NTc1NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc5Njk1ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGJlc2lkZXMgdGhlIG9uZXMgSSd2ZSBhbHJlYWR5IGV4YW1pbmVkLiBUaGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCB3b3VsZCBiZSB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIElQdjQgYW5kIElQdjYuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsLiBTbywgSSdsbCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIGlzIGluIHRoZXJlLiBJIGJldCB0aGV5J2xsIGhhdmUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzowOS43ODI2NTU3NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMzM2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MDkuODI5ODk0NTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2ODc3MzEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNvbnNpZGVyaW5nIElQdjYgVHVubmVsaW5nIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi5JJ20gbXVsbGluZyBvdmVyIElQdjYgdHVubmVsaW5nIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG1lbnRhbCBnZWFycyBhcmUgdHVybmluZyBhcm91bmQgYElQVjZfU0lUYCBhbmQgYElQVjZfVFVOTkVMYC4gT2YgY291cnNlLCB0aGlzIGlzIGp1c3QgYSBxdWljayByZXZpZXcgb2YgdGhlIG9idmlvdXMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uY2VwdCBJIG5lZWQgdG8gYWRkcmVzcyBpcyB0aGUgbWVjaGFuaXNtIGZvciBlbmNhcHN1bGF0aW5nIElQdjYgcGFja2V0cyB3aXRoaW4gSVB2NCBwYWNrZXRzLCBvciBwb3RlbnRpYWxseSB3aXRoaW4gYW5vdGhlciB0cmFuc3BvcnQgcHJvdG9jb2wgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgcmlnaHQ/IEknbSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBudWFuY2UgYmV0d2VlbiB0aGUgdHdvLiBgSVBWNl9TSVRgIGlzIHRoZSBcIlNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uXCIgcHJvdG9jb2wuIEl0J3MgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCwgb2Z0ZW4gdGhvdWdodCBvZiBhcyBhIHN0YXRpYyB0dW5uZWwuIE5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnksIGRvZXMgaXQgcmVxdWlyZSBleHBsaWNpdCBjb25maWd1cmF0aW9uIGF0IGJvdGggdHVubmVsIGVuZHBvaW50cz8gVGhhdCB3b3VsZCBpbXBseSBhIGZpeGVkIHR1bm5lbCBkZXN0aW5hdGlvbiwgeWVhaD8gQW5kIHdoYXQgYWJvdXQgdGhlIG92ZXJoZWFkPyBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBtYWtpbmcgYSBzZWxlY3Rpb24gZm9yIGEgY3VycmVudCBwcm9qZWN0LiBJcyB0aGVyZSBhIGJldHRlciBhcHByb2FjaD8gTWF5YmUgdGhlcmUncyBhIHJlYXNvbiB0byB1c2UgYElQVjZfVFVOTkVMYCBvdmVyIGl0LiBgSVBWNl9UVU5ORUxgIHByb2JhYmx5IGVuY29tcGFzc2VzIGEgYnJvYWRlciByYW5nZSBvZiBvcHRpb25zLCBhbGxvd2luZyBmb3IgZHluYW1pYyB0dW5uZWwgZXN0YWJsaXNobWVudCBvciBkaWZmZXJlbnQgZW5jYXBzdWxhdGlvbiBtZXRob2RzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGRldGFpbHMsIGJ1dCBteSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRoYXQgYElQVjZfVFVOTkVMYCBpcyBwcm9iYWJseSBtb3JlIGZsZXhpYmxlLiBPa2F5LCBJJ2xsIHJldmlldyBteSBub3RlcyBvbiB0aGlzIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMga2V5IHRvIHNlbGVjdGluZyB0aGUgbW9zdCBlZmZpY2llbnQgdHJhbnNpdGlvbiBtZXRob2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoxMy40OTg2NzA2MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5Mzk1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfU0lUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoxMy41NDM2MTg0MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5MTQ2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6XG5cbioqRXhhbWluaW5nIElQdjQgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIGFnYWluLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NCB0dW5uZWxpbmcuIEknbSBub3RpbmcgdGhlIHByZXNlbmNlIG9mIGBORVRfSVBJUGAgYW5kIGBORVRfSVBHUkVgLiBUaGVzZSBhcmUsIG9mIGNvdXJzZSwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5bWJvbHMgdGhhdCBjb250cm9sIHdoZXRoZXIgc3VwcG9ydCBmb3IgSVBJUCAoSVAtaW4tSVApIGFuZCBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSB0dW5uZWxzLCByZXNwZWN0aXZlbHksIGFyZSBjb21waWxlZCBpbnRvIHRoZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2suIFNvLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggdG8gZW5hYmxlLCBhcyB0aGVzZSB3aWxsIGFmZmVjdCBrZXJuZWwgc2l6ZSBhbmQgcmVzb3VyY2UgdXNhZ2UuIEkga25vdyB0aGUgbnVhbmNlcyBvZiB1c2luZyB0aGVzZSwgaW5jbHVkaW5nIHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYXNzZXNzaW5nIHRoZSBJUHY0IHR1bm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDMxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MTYuNTMyNzY3MzkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc5MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQSVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTYxLVxcbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxcbm5ldC9pcHY0L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUDogdHVubmVsaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoxNi41Nzc1Njc0MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4OTQzMzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIElQR1JFKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIGBORVRfSVBHUkVgLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIHR1bm5lbHMsIHJpZ2h0PyBUaGUgY2xhc3NpYywgUkZDIDI3ODQgYW5kIGFsbCB0aGF0LiBJdCdzIGFuIElQIHByb3RvY29sLCBzbyB0aGUgaW1wbGljYXRpb24gaXMgTGF5ZXIgMyBlbmNhcHN1bGF0aW9uLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSB3YXkgdG8gdHJhbnNwb3J0IHBhY2tldHMgdGhhdCBtaWdodCBiZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV0d29yaydzIG5hdGl2ZSBwcm90b2NvbHMgb3IgdG9wb2xvZ2llcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYXJvdW5kIHNjZW5hcmlvcyB3aGVyZSB5b3UgbmVlZCB0byBnZXQgYXJvdW5kIG5ldHdvcmsgcmVzdHJpY3Rpb25zLCBtYXliZSB0dW5uZWxpbmcgSVB2NiBvdmVyIGFuIElQdjQgbmV0d29yaywgb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MgdGhhdCB3b3VsZG4ndCBub3JtYWxseSB0YWxrIHRvIGVhY2ggb3RoZXIgZGlyZWN0bHkuXG5cbkknbSBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgLSB0aGUgYWRkaXRpb25hbCBJUCBoZWFkZXIgZm9yIGVuY2Fwc3VsYXRpb24gaXRzZWxmLiBUaGF0IGFkZHMgdG8gdGhlIHBhY2tldCBzaXplLCBpbXBhY3RpbmcgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS4gVGhpcyBhbHNvIG1lYW5zIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCBwbGFuZSDigJMgd2hhdCByb3V0aW5nIHByb3RvY29sIGlzIGJlaW5nIHVzZWQgb3ZlciB0aGlzIHR1bm5lbD8gU3RhdGljIHJvdXRlcz8gRHluYW1pYywgbGlrZSBPU1BGIG9yIEJHUD8gQW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGZyb250IGFuZCBjZW50ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGluaGVyZW50IGluIGFueSB0dW5uZWwgLSBub3Qgb25seSBzaG91bGQgaXQgYmUgZW5jcnlwdGVkLCBidXQgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGFjY2VzcyBjb250cm9scyBhbmQgcG90ZW50aWFsIERvUyBhdHRhY2tzLiBUaGUgZmFjdCB0aGF0IHRoZSBHUkUgdHVubmVsIGl0c2VsZiBkb2Vzbid0IG9mZmVyIGVuY3J5cHRpb24gcmlnaHQgb3V0IG9mIHRoZSBib3ggbWVhbnMgSSdtIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhhdCBleHRyYSBsYXllciBpcyBiZWluZyBpbXBsZW1lbnRlZC4gSXMgaXQgSVBTZWMgb24gdG9wLCBvciBzb21lIG90aGVyIHNvbHV0aW9uP1xuXG5GdW5jdGlvbmFsbHksIEkgc3RhcnQgdG8gYW5hbHl6ZSBteSBvcHRpb25zLiBXaGF0IGFyZSB0aGUgYWR2YW50YWdlcyBvZiB1c2luZyBHUkU/IFRoZSBkaXNhZHZhbnRhZ2VzPyBXaGF0IGFyZSB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIHNwZWNpZmljIG5ldHdvcmsgZW52aXJvbm1lbnQ/IElzIGl0IGEgcG9pbnQtdG8tcG9pbnQgc2l0dWF0aW9uLCBvciBhIG11bHRpLXBvaW50IHRvcG9sb2d5PyBUaGUgY2hvaWNlIGlzIG1hZGUgYmFzZWQgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgdGhlIG5lY2Vzc2l0eSBmb3IgdHVubmVsaW5nIGluIGdlbmVyYWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wYWN0IG9uIG5ldHdvcmsgZGlhZ25vc3RpY3MuIFBhY2tldCBjYXB0dXJlcyBhcmUgYWx3YXlzIGdvaW5nIHRvIGJlIHBhcnQgb2YgbXkgdG9vbHNldC5cblxuSSdtIGFzc2Vzc2luZyBpdHMgc3VpdGFiaWxpdHkgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIGFuZCBpdHMgaW5oZXJlbnQgbGltaXRhdGlvbnMuIEkgY29uc2lkZXIgaWYgb3RoZXIgdHVubmVsaW5nIG1lY2hhbmlzbXMgbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0ZS4gVWx0aW1hdGVseSwgSSdtIGFscmVhZHkgbWVudGFsbHkgd29ya2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHN0ZXBzLCBjaGVja2luZyBmb3IgcG90ZW50aWFsIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzLCBhbmQgZm9ybWluZyBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Qgb2YgdGhpbmdzIHRvIHZlcmlmeSBpbiBhIGxpdmUgZGVwbG95bWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MjEuMzY3MDAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg1MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE3OS1cXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXFxubmV0L2lwdjQvS2NvbmZpZy0xODEtXFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgZGVtdWx0aXBsZXhlclxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0xOTMtXFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgdHVubmVscyBvdmVyIElQXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXFxubmV0L2lwdjQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzoyMS40MTY4NjQyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMjM1MDUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhlc2UgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgaW5kaWNhdGVzIHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHRvdWNoZWQ6IGBuZXRraXQuY2AsIGBpcF90dW5uZWwuY2AsIGBpcDZfZ3JlLmNgLCBgaXA2X3R1bm5lbC5jYCwgYW5kIGBzaXQuY2AuIFJpZ2h0LCBzbyBub3RoaW5nIGRpcmVjdGx5IGNoYW5nZWQgaW4gdGhlIGBuZXRraXRgIGZ1bmN0aW9ucy4gVGhlIGBuZXRraXRfcG9saWN5YCBhcnJheSBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoaXMgY2hhbmdlIGlzIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIGJ1dCBpbmRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIG5ldGxpbmsgcGFyc2VyIHdvcmtzLiBOb3RlZC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIG90aGVyIGZpbGVzLiBTcGVjaWZpY2FsbHksIGBpcF90dW5uZWxfYmluZF9kZXZgLCBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAsIGBpcDZfdG5sX2xpbmtfY29uZmlnYCwgYW5kIGBpcGlwNl90dW5uZWxfYmluZF9kZXZgIC0gYWxsIGtleSBmdW5jdGlvbnMgZm9yIHR1bm5lbCBhbmQgaW50ZXJmYWNlIG1hbmFnZW1lbnQuIEkgc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIG9yIG5vdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIHN0YXRpY2FsbHkgLSBgaXBfdHVubmVsX2JpbmRfZGV2YCBoYXMgYmVlbiBsaXN0ZWQgYXMgYSBmdW5jdGlvbiBtb2RpZmllZCwgc28gSSdsbCBjaGVjayBgbmV0L2lwdjQvaXBfdHVubmVsLmNgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MjUuNDI5MjE3NDk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA1MjM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfYmluZF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmM9MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqX19pcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI3OS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoyODA6c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yODEte1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0Mi1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6XFx0bXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGRldik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzQ0LVxcdGVyciA9IGRldl9zZXRfbXR1KGRldiwgbXR1KTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTg2Mj1zdGF0aWMgdm9pZCBpcF90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04ODgtXFx0XFx0dC1cXHUwMDNlZndtYXJrID0gZndtYXJrO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg4OTpcXHRcXHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04OTAtXFx0XFx0aWYgKHNldF9tdHUpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTI1PWludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaXBfdG5sX25ldF9pZCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTUtXFx0XFx0aXRuLVxcdTAwM2VmYl90dW5uZWxfZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExNTY6XFx0XFx0aXRuLVxcdTAwM2VmYl90dW5uZWxfZGV2LVxcdTAwM2VtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoaXRuLVxcdTAwM2VmYl90dW5uZWxfZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTU3LVxcdFxcdGlwX3R1bm5lbF9hZGQoaXRuLCBuZXRkZXZfcHJpdihpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYpKTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTU9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMjQtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIyNTpcXHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjI2LVxcdGlmICh0YltJRkxBX01UVV0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MjUuNDczMjc1OTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzM2OTE0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUCBUdW5uZWwgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcF90dW5uZWxfYmluZF9kZXZgLiBUaGF0IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHN0YXRpY2FsbHkgZGVmaW5lZCwgYW5kIEknbSBzZWVpbmcgaXQncyBpbnZva2VkIGJ5IGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zOiBgaXBfdHVubmVsX2NyZWF0ZWAsIGBpcF90dW5uZWxfdXBkYXRlYCwgYGlwX3R1bm5lbF9pbml0X25ldGAsIGFuZCBgaXBfdHVubmVsX25ld2xpbmtgLiBUaGF0J3MgdGhlIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyB0byBjb25zaWRlci5cblxuTm93LCBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGBpcF90dW5uZWxfbmV3bGlua2AuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUgbWlnaHQgYmUgZXhwb3J0ZWQgZm9yIGV4dGVybmFsIHVzZS4gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhhdCwgc28gbGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gZG91YmxlLWNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzAuOTA2OTY5OTY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3OTEwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzAuOTUxOTUzOTUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjIyOTgxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkxpbmsgQ29uZmlndXJhdGlvbiBhbmQgUm91dGluZyBmb3IgSVAgVHVubmVscyoqXG5cblJpZ2h0LCBzbyBgaXBfdHVubmVsX25ld2xpbmtgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZS4gSXQncyB0aGUgY29yZSBwcmltaXRpdmUgZm9yIGNyZWF0aW5nIG5ldyBJUCB0dW5uZWwgaW50ZXJmYWNlcywgc28gSSBuZWVkIHRvIGtlZXAgaXQgaW4gbWluZCBhcyBJIHdvcmsuIEJ1dCBub3cgSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGJyb2FkZXI6IHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZT8gSSdtIGN1cmlvdXMgYWJvdXQgaG93IHJvdXRlcyBhcmUgaGFuZGxlZCBhcyB0aGVzZSB0dW5uZWxzIGFyZSBzZXQgdXAuIExldCBtZSBkaWcgaW50byB0aGUgcmVsYXRlZCBjb2RlYmFzZSBhbmQgY29uc2lkZXIgYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgLiBJcyB0aGlzIGFsc28gZXhwb3J0ZWQ/IEl04oCZcyBwcm9iYWJseSBhIGZ1bmN0aW9uIGludm9sdmVkIHdpdGggY29uZmlndXJpbmcgdGhlIHJvdXRpbmcgZm9yIEdSRSB0dW5uZWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdOKAmXMgYSBuZWNlc3NhcnkgZnVuY3Rpb24gYXMgd2VsbC4gQXJlIHRoZXJlIG90aGVyIGFuYWxvZ291cyByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQ/IEFuZCB3aGF0IGFyZSB0aGUgYnJvYWRlciByb3V0aW5nIGltcGxpY2F0aW9ucyBvZiBjcmVhdGluZyBhbmQgbWFuYWdpbmcgdGhlc2UgdHVubmVscyBpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIG9mIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIHJvdXRpbmcgY29uZmlnLCBhcyB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiB0aGUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1NzozNC40MTQyNTU1NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjQwNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xMDg4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjEtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjExMjI6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXFx0XFx0XFx0XFx0XFx0IGludCB0X2hsZW4pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTE4ND1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTg2LVxcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTg3OlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODgtfVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNTI9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1NC1cXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NTpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmVyc3Bhbl9jYWxjX2hsZW4odCkpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjU2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzQuNDU4NTAxMTcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzI1NTg0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlN0YXRpYyBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgdGhlIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnYCBhbmQgYGlwNmVyc3Bhbl90bmxfbGlua19jb25maWdgIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIHN0YXRpY2FsbHkuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byAqd2h5KiB0aGV5J3JlIHN0YXRpYyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuIFRoaXMgaXNuJ3QgbmVjZXNzYXJpbHkgYSBiYWQgdGhpbmcsIGJ1dCBpdCBkb2VzIG1lYW4gdGhlcmUncyBhIHNwZWNpZmljLCBwb3RlbnRpYWxseSBwcmUtZGV0ZXJtaW5lZCBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIGJlaGluZCB0aGF0IHN0YXRpYyBpbXBsZW1lbnRhdGlvbiDigJMgaXMgaXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIHJlcXVpcmVtZW50IG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIHByb3RvY29sLCBhIHNpbXBsaWNpdHkgdHJhZGUtb2ZmLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhY2UsIGxpa2VseSBsb29raW5nIGF0IHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGRhdGEgc3RydWN0dXJlcywgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBiZWhhdmlvciByZWxhdGVkIHRvIHRob3NlIHN0YXRpYyBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBob3cgdGhlc2Ugc3RhdGljIHZhbHVlcyBhcmUgdXNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjM4LjEzMTA2MjY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA2NDA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZncmVfdG5sX2xpbmtfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9Nzk9c3RhdGljIHZvaWQgaXA2Z3JlX3R1bm5lbF9saW5rKHN0cnVjdCBpcDZncmVfbmV0ICppZ24sIHN0cnVjdCBpcDZfdG5sICp0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6ODA6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy04MS1zdGF0aWMgdm9pZCBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MzE1PXN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqaXA2Z3JlX3R1bm5lbF9sb2NhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTM1Mi1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MzUzOlxcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsIDEpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0zNTQtXFx0aXA2Z3JlX3R1bm5lbF9saW5rKGlnbiwgbnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTkxNz1zdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTA4Ny1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTA4ODpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTA4OS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTEyMjpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMy1cXHRcXHRcXHRcXHRcXHQgaW50IHRfaGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTY3PXN0YXRpYyBpbnQgaXA2Z3JlX2NhbGNfaGxlbihzdHJ1Y3QgaXA2X3RubCAqdHVubmVsKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODMtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjExODQ6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODUte1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTg2OlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTg3OlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTExODgtfVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTEyMTM9c3RhdGljIGludCBpcDZncmVfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyMTYtXFx0aXA2Z3JlX3RubF9jb3B5X3RubF9wYXJtKHQsIHApO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMjE3OlxcdGlwNmdyZV90bmxfbGlua19jb25maWcodCwgc2V0X210dSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyMTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTk3OT1zdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAwMi1cXHRpZiAoIWVycikge1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDAzOlxcdFxcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsICF0YltJRkxBX01UVV0pO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDA0LVxcdFxcdGlwNmdyZV90dW5uZWxfbGlua19tZChpZ24sIG50KTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjUyPXN0YXRpYyB2b2lkIGlwNmVyc3Bhbl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjUzLXtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NDpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1NTpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmVyc3Bhbl9jYWxjX2hsZW4odCkpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjU2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6MzguMTgyMTMyNTg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk5NjQyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgSVA2R1JFIEludGVyZmFjZSBDcmVhdGlvbiBQcm9jZXNzKipcblxuUmlnaHQsIHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgYGlwNmdyZV9uZXdsaW5rYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMsIGlzbid0IGl0PyBUaGUgZW50cnkgcG9pbnQuIEl0J3MgdGhlIHN0YXJ0aW5nIGd1biBmb3IgYnJpbmdpbmcgdXAgYSBuZXcgR1JFIHR1bm5lbCB3aXRoIElQdjYgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBrZXJuZWwncyBkYXRhIHN0cnVjdHVyZXMgYW5kIGZsb3cuIEkga25vdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yLCBhdCBhIGhpZ2ggbGV2ZWwsIGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgbmV0bGluayBtZXNzYWdlLCBpbml0aWFsaXppbmcgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUsIHNldHRpbmcgdXAgdGhlIGFzc29jaWF0ZWQgcHJvdG9jb2wgaGFuZGxlciwgYW5kIGJpbmRpbmcgaXQgYWxsIHRvZ2V0aGVyLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHRoZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwcm9wYWdhdGVzLCB3aGF0IGhvb2tzIGFuZCBjYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQsIGFuZCB3aGF0IGVycm9yIGNoZWNraW5nIGlzIGRvbmUgYXQgdGhpcyBpbml0aWFsIHN0YWdlLiBVbHRpbWF0ZWx5LCB0aGlzIHBvaW50IGlzIGNyaXRpY2FsLiBHZXQgdGhpcyB3cm9uZywgYW5kIHRoZSBlbnRpcmUgR1JFIElQdjYgdHVubmVsIGltcGxlbWVudGF0aW9uIHdpbGwgZmFsbCBhcGFydCBhdCB0aGUgc2VhbXMuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscy4gSSBjYW4gZ3Vlc3MgSSB3aWxsIGJlIG5lZWRpbmcgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBhcmd1bWVudCBoYW5kbGluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBjb21lIGludG8gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo0MS40NDIwOTk1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MDc4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xOTEyPXN0YXRpYyBib29sIGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTQ0LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTQ1OnN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmtfY29tbW9uKHN0cnVjdCBuZXQgKmxpbmtfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTQ2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk3OC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTk3OTpzdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5ODAtXFx0XFx0XFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwMDAtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwMDE6XFx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjAwMi1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyMjA9c3RhdGljIGludCBpcDZlcnNwYW5fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDItXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNDM6XFx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI0NC1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTctXFx0LnZhbGlkYXRlXFx0PSBpcDZncmVfdHVubmVsX3ZhbGlkYXRlLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjk4OlxcdC5uZXdsaW5rXFx0PSBpcDZncmVfbmV3bGluayxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5OS1cXHQuY2hhbmdlbGlua1xcdD0gaXA2Z3JlX2NoYW5nZWxpbmssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjMwNj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzEyLVxcdC52YWxpZGF0ZVxcdD0gaXA2Z3JlX3RhcF92YWxpZGF0ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMxMzpcXHQubmV3bGlua1xcdD0gaXA2Z3JlX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTQtXFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo0MS40ODg3MTI2MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjYwMzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVB2NiBHUkUgTmV3bGluayBDYWxsYmFjayoqXG5cbkFscmlnaHQsIHNvIGBpcDZncmVfbmV3bGlua2AuLi4gdGhhdCdzIGEgKm5ld2xpbmsqIGNhbGxiYWNrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBzbyB3aGF0IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT9cIiBJdCdzIGRlZmluaXRlbHkgYSBwb2ludCB3aGVyZSBhIG5ldyBJUHY2IEdSRSB0dW5uZWwgaXMgYmVpbmcgc2V0IHVwLCBjcmVhdGVkLCBvciBjb25maWd1cmVkLiBUaGUga2V5IHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT9cblxuQW5kIHRoYXQgbGluZSBvZiB0aGlua2luZywgcXVpY2tseSBsZWFkcyBtZSB0byB0aGUgb2J2aW91cyBmaWxlOiBgaXA2X3R1bm5lbC5jYC4gVGhhdCdzIHdoZXJlIEkgKmV4cGVjdCogdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NiB0dW5uZWxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZXdsaW5rYCBjYWxsIGlzIHVzZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciB0dW5uZWwtcmVsYXRlZCBmdW5jdGlvbnMsIGFuZCB3aGF0IHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgbGlrZWx5IG1hbmlwdWxhdGluZy4gU28sIGxldCBtZSBnbyBoYXZlIGEgbG9vayBhdCBgaXA2X3R1bm5lbC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo0NC43NDEzMTg0MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjczODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfbGlua19jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDM2PWlwNl90bmxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE0NzQ6c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTQ3NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU1MT1pcDZfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjItXFx0ZHN0X2NhY2hlX3Jlc2V0KFxcdTAwMjZ0LVxcdTAwM2Vkc3RfY2FjaGUpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTYzOlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjQtfVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5NzQ9c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk4MC1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTgxOlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5ODItXFx0aWYgKHQtXFx1MDAzZXBhcm1zLmNvbGxlY3RfbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjQ0Ljc4Mjk5NzA0OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgzODg2MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBmb2N1c2luZyBvbiB0aG9zZSBrZXJuZWwgZnVuY3Rpb25zOlxuXG4qKktlcm5lbCBGdW5jdGlvbiBDb25zaWRlcmF0aW9uczogYGlwNl90bmxfZGV2X2luaXRgIGFuZCBgaXA2X3RubF9jaGFuZ2VgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgd29ya2luZ3Mgb2YgSVB2NiB0dW5uZWxpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgbXkgbWluZCBpcyBkcmF3biB0byB0d28gY3J1Y2lhbCBmdW5jdGlvbnM6IGBpcDZfdG5sX2Rldl9pbml0YCBhbmQgYGlwNl90bmxfY2hhbmdlYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYGlwNl90bmxfZGV2X2luaXRgIGFzIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBhIHR1bm5lbCBkZXZpY2UuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgaXMgZXN0YWJsaXNoZWQg4oCTIHNldHRpbmcgdXAgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW5nIHJlc291cmNlcywgYW5kIGdldHRpbmcgdGhlIHR1bm5lbCBpbnRlcmZhY2UgcmVhZHkgZm9yIHRyYWZmaWMuIEknbSBjb25zaWRlcmluZyB3aGF0IGFzcGVjdHMgb2YgdGhlIHR1bm5lbCBhcmUgc2V0IHVwIGF0IHRoaXMgcG9pbnQ6IHRoZSBsaW5rLWxheWVyIHBhcmFtZXRlcnMsIHJvdXRpbmcgdGFibGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VzLiBJJ20gd29uZGVyaW5nIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGVzcGVjaWFsbHkgaWYgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgZGV2aWNlIGNyZWF0aW9uLlxuXG5NeSB0aG91Z2h0cyB0aGVuIHNoaWZ0IHRvIGBpcDZfdG5sX2NoYW5nZWAuIFRoaXMsIEkgYXNzdW1lLCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyBhbiBleGlzdGluZyB0dW5uZWwgZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYW55IGNoYW5nZSB0byB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24gY291bGQgdHJpZ2dlciBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEknbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIHRvIHRoZSB0dW5uZWwncyBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzLCBNVFUsIG9yIGVuY2Fwc3VsYXRpb24gbWV0aG9kLiBXaGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBhIHNlYW1sZXNzIHRyYW5zaXRpb24gd2l0aG91dCBkaXNydXB0aW5nIG9uZ29pbmcgdHJhZmZpYz8gQXJlIHRoZXJlIHByb3BlciBsb2NraW5nIHByaW1pdGl2ZXMgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIHN0YXRlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2VsbCBpdCBoYW5kbGVzIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLiBBbHNvLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhbmQgdGhlIGZsb3cgY29udHJvbC4gV2hhdCBraW5kIG9mIHZhbGlkYXRpb24gaGFwcGVucyB0byBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgdmFsaWQsIGFuZCBkbyB0aGV5IGFsaWduIHdpdGggZXN0YWJsaXNoZWQgbmV0d29yayBwb2xpY2llcyBvciBzZWN1cml0eSBydWxlcz8gSSdtIGFzc2Vzc2luZyB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2Ygc3RhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIHNlY3VyaXR5LiBJdCdzIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIG91ciB3b3JrOyBJIG5lZWQgdG8gZW5zdXJlIHRoZXkncmUgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk0MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjUwLjA2Njg4NTMzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNzgzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9kZXZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jPTc0PXN0YXRpYyB1MzIgSEFTSChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIxLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIyKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgwLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo4MTpzdGF0aWMgaW50IGlwNl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgyLXN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4Nzk6XFx0Lm5kb19pbml0XFx0PSBpcDZfdG5sX2Rldl9pbml0LFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODgwLVxcdC5uZG9fdW5pbml0XFx0PSBpcDZfdG5sX2Rldl91bmluaXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTkwMz1zdGF0aWMgdm9pZCBpcDZfdG5sX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5MjYtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5Mjc6ICogaXA2X3RubF9kZXZfaW5pdF9nZW4gLSBnZW5lcmFsIGluaXRpYWxpemVyIGZvciBhbGwgdHVubmVsIGRldmljZXNcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTkyOC0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTMxPXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5MzI6aXA2X3RubF9kZXZfaW5pdF9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTkzMy17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk2OS0vKipcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk3MDogKiBpcDZfdG5sX2Rldl9pbml0IC0gaW5pdGlhbGl6ZXIgZm9yIGFsbCBub24gZmFsbGJhY2sgdHVubmVsIGRldmljZXNcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3MS0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTczLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTc0OnN0YXRpYyBpbnQgaXA2X3RubF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTc1LXtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk3Ni1cXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE5Nzc6XFx0aW50IGVyciA9IGlwNl90bmxfZGV2X2luaXRfZ2VuKGRldik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5NzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjUwLjEwOTk2ODg2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjU2MjA2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBUdW5uZWwgRGV2aWNlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGBpcDZfdG5sX2Rldl9pbml0YCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBOZXR3b3JrIERldmljZSBPcGVyYXRvciAoTkRPKSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgYG5kb19pbml0YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgaXTigJlzIHRoZSBzdGFuZGFyZCB3YXkgd2UncmUgc2V0dGluZyB1cCB0aGUgZm91bmRhdGlvbiBmb3IgSVB2NiB0dW5uZWwgZGV2aWNlcy4gQnV0LCB0aGF0IGNvbm5lY3Rpb24gbWFrZXMgbWUgdGhpbmsuLi4gd2hhdCdzIHRoZSBicm9hZGVyIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGljaCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhZmZlY3RlZCB0byBzZWUgaG93IHRoaXMgaW1wYWN0cyBteSBhcmVhIG9mIGV4cGVydGlzZS5cblxuTXkgY29uY2VybiBpcyB3aGF0J3MgaGFwcGVuaW5nIGluIGBzaXQuY2AuIElzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb2xsb3dpbmcgdGhlIFJGQyBzdGFuZGFyZHM/IFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgSVB2Ni1pbi1JUHY0IHR1bm5lbCBjb2RlIHdpdGggdGhlIGJyb2FkZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNsYXNoZXMgb3IgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvciwgZ2l2ZW4gdGhhdCBgc2l0LmNgIGhhbmRsZXMgYSBkaWZmZXJlbnQgc3BlY2lmaWMgdHlwZSBvZiB0dW5uZWwgdGhhbiB0aGUgbW9yZSBnZW5lcmFsIHNldHVwPyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgZml0IHRvZ2V0aGVyIHRvIGVuc3VyZSBubyB1bmV4cGVjdGVkIHByb2JsZW1zIGFyaXNlLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1Nzo1My43NjYxNzgxOThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODg5Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXA2X3R1bm5lbF9iaW5kX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zaXQuYz0xMDY0PXN0YXRpYyBuZXRkZXZfdHhfdCBzaXRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTEwOTQtXFxubmV0L2lwdjYvc2l0LmM6MTA5NTpzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9zaXQuYy0xMDk2LXtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTExMzc9c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsICp0LFxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTE1Ni1cXHRcXHR0LVxcdTAwM2Vmd21hcmsgPSBmd21hcms7XFxubmV0L2lwdjYvc2l0LmM6MTE1NzpcXHRcXHRpcGlwNl90dW5uZWxfYmluZF9kZXYodC1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9zaXQuYy0xMTU4LVxcdH1cXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTE0NDM9c3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTQ1MC1cXG5uZXQvaXB2Ni9zaXQuYzoxNDUxOlxcdGlwaXA2X3R1bm5lbF9iaW5kX2RldihkZXYpO1xcbm5ldC9pcHY2L3NpdC5jLTE0NTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU3OjUzLjgwODA3Mzc0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAzNjEzODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUCBUdW5uZWwgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYGlwaXA2X3R1bm5lbF9pbml0YCBpcyBnb2luZyB0byBiZSBhbmFsb2dvdXMgdG8gYG5kb19pbml0YC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoYXQgbGluayBpbiBteSBoZWFkLiBOb3csIGxldCdzIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIGFuZCBmaW5kIHRoZSBgbmV3bGlua2AgZnVuY3Rpb25zIGZvciBhbGwgdGhlc2UgdHVubmVscy4gSSd2ZSBnb3QgYSBnb29kIG1lbnRhbCBtYXAgb2YgdGhpcywgc28gbGV0J3Mgc3RhcnQgam90dGluZyB0aGVtIGRvd24gZm9yIGVhY2ggZmlsZS5cblxuRm9yIHRoZSBJUHY0IHR1bm5lbHMgaW4gYGlwX3R1bm5lbC5jYCwgaXQncyBkZWZpbml0ZWx5IGBpcF90dW5uZWxfbmV3bGlua2AuIFRoZW4sIGRpZ2dpbmcgaW50byBJUHY2IHR1bm5lbHMsIGluIGBpcDZfZ3JlLmNgLCBJJ20gc2VlaW5nIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZlcnNwYW5fbmV3bGlua2AuIE92ZXIgaW4gYGlwNl90dW5uZWwuY2AsIHRoZSBmdW5jdGlvbiBpcyBgaXA2X3RubF9uZXdsaW5rYC4gQW5kIGZvciBgc2l0LmNgPyBBaCwgeWVzLCBpdCdzIGBpcGlwNl9uZXdsaW5rYC5cblxuUmlnaHQsIGxldCdzIG5vdyBkcmlsbCBkb3duIGFuZCBleGFtaW5lIGBpcF90dW5uZWxfbmV3bGlua2Agd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR1bm5lbHMgYXJlIHRydWx5IHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6NTcuOTExNjkwNTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc3OTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTc6NTcuOTU1NDc0ODE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk1Njc5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcF90dW5uZWxfbmV3bGlua2AgRXhwb3J0KipcblxuQWxyaWdodCwgc28gYGlwX3R1bm5lbF9uZXdsaW5rYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc291cmNlIGNvZGUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBhcyBpcyBhbHdheXMgdGhlIGNhc2Ugd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsLWxldmVsIGZ1bmN0aW9ucy4gVGhlIGZpcnN0LCBhbmQgbW9zdCBjcml0aWNhbCwgcXVlc3Rpb24gaXM6ICoqd2hvJ3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIGZ1bmN0aW9uPyoqIEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBpbXBhY3QsIGFuZCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgYSBrZXkgZmlyc3Qgc3RlcCBpbiBhc3Nlc3NpbmcgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgd2hhdCdzIHJlbHlpbmcgb24gYGlwX3R1bm5lbF9uZXdsaW5rYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBiZWluZyB1c2VkLiBJcyB0aGlzIGZ1bmN0aW9uIGNyaXRpY2FsLCBpcyBpdCByYXJlbHkgdXNlZCwgb3IgaXMgaXQgYSBmb3VuZGF0aW9uPyBUaGlzIHJlcXVpcmVzIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIGJyb2FkZXIgY29kZSBiYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjAxLjA5NTA0NTM2NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwOTExODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTE0MDk9c3RhdGljIGludCBpcGdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI1LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQyNjpcXHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVxcdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcXHUwMDI2cCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI3LVxcdFxcdFxcdFxcdCBmd21hcmspO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ2LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ0NzpcXHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVxcdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcXHUwMDI2cCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ4LVxcdFxcdFxcdFxcdCBmd21hcmspO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTk1OmludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5Ni1cXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyNDc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDgtXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz01Nzc9c3RhdGljIGludCB2dGlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNTg2LVxcdHZ0aV9uZXRsaW5rX3Bhcm1zKGRhdGEsIFxcdTAwMjZwYXJtcywgXFx1MDAyNmZ3bWFyayk7XFxubmV0L2lwdjQvaXBfdnRpLmM6NTg3OlxcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXFx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsXFxubmV0L2lwdjQvaXBfdnRpLmMtNTg4LVxcdFxcdFxcdFxcdCBcXHUwMDI2cGFybXMsIGZ3bWFyayk7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NDY0PXN0YXRpYyBpbnQgaXBpcF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDgyLVxcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcXHUwMDI2cCwgXFx1MDAyNnQtXFx1MDAzZWNvbGxlY3RfbWQsIFxcdTAwMjZmd21hcmspO1xcbm5ldC9pcHY0L2lwaXAuYzo0ODM6XFx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBpcC5jLTQ4NC1cXHRcXHRcXHRcXHQgZndtYXJrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MDEuMTM5MTQyMzYzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDI3MTAxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cyBhbmQgd2hlcmUgdG8gZ28gbmV4dCwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIFR1bm5lbCBJbnRlcmZhY2UgQ3JlYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIG15IG1lbnRhbCBjaGVja2xpc3Qgbm93IHNheXMgdG8gZm9jdXMgb24gdGhlIGludGVyZmFjZSBjcmVhdGlvbiBlbnRyeSBwb2ludHMuIEknbSB0aGlua2luZywgYGlwZ3JlX25ld2xpbmtgLCBgZXJzcGFuX25ld2xpbmtgLCBgdnRpX25ld2xpbmtgLCBhbmQgYGlwaXBfbmV3bGlua2AgYXJlIHRoZSBpbml0aWFsIHN1c3BlY3RzIGZvciBHUkUsIEVSU1BBTiwgVlRJIGFuZCBJUElQIHR1bm5lbCBpbnRlcmZhY2VzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHNvbWV0aGluZyBzaW1pbGFyOyBuYW1lbHksIHNpbmNlIElQdjYgdHVubmVsaW5nIGlzIG9mdGVuIGJ1aWx0IG9uIHNpbWlsYXIgcHJpbmNpcGxlcywgSSdsbCBob25lIGluIG9uIGBpcDZfdG5sX25ld2xpbmtgLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIGZpbGUuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgc2ltaWxhcml0aWVzLCBhbmQgdXN1YWxseSBwcm92aWRlcyBhIGNsZWFuIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBuZXcgbGluayB0eXBlcyBhcmUgc2V0IHVwIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjA0LjU4MTg1NTEyNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxNzk0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjAyND1zdGF0aWMgdm9pZCBpcDZfdG5sX25ldGxpbmtfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwNjItXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIwNjM6c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjA2NC1cXHRcXHRcXHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIyNjE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjctXFx0LnZhbGlkYXRlXFx0PSBpcDZfdG5sX3ZhbGlkYXRlLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY4OlxcdC5uZXdsaW5rXFx0PSBpcDZfdG5sX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNjktXFx0LmNoYW5nZWxpbmtcXHQ9IGlwNl90bmxfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MDQuNjM1MDQyNDIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDAyNzU5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQdjYgVHVubmVsIEludGVyZmFjZSBDcmVhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZywgYW5kIG15IG1pbmQgaGFzIHpvbmVkIGluIG9uIGBpcGlwNl9uZXdsaW5rYCB3aXRoaW4gYG5ldC9pcHY2L3NpdC5jYC4gVGhhdCBmdW5jdGlvbi4gSXQncyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBuZXcgSVB2Ni1pbi1JUHY0IHR1bm5lbCBpbnRlcmZhY2VzLCB0aGUgU0lUIChTaW1wbGUgSW50ZXJuZXQgVHJhbnNpdGlvbikgdHVubmVscy4gSeKAmW0gemVyb2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBiZWNhdXNl4oCmIHdlbGwsIEknbSBwcm9iYWJseSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHVubmVsIGludGVyZmFjZSBicmluZy11cCwgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBJUHY2IG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTWF5YmUgdGhlcmUncyBhIHNwZWNpZmljIGlzc3VlIG1hbmlmZXN0aW5nLCBsaWtlIGEgZmFpbHVyZSB0byBhc3NpZ24gYWRkcmVzc2VzLCByb3V0aW5nIHByb2JsZW1zIHNwZWNpZmljIHRvIHRoZXNlIHR1bm5lbHMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgSSdtIHRyeWluZyB0byBkaWFnbm9zZSBhdCB0aGUga2VybmVsIGxldmVsLiBLbm93aW5nIHRoZSBjb2RlYmFzZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlIGVycm9yIHBhdGhzIHdlbGwtZGVmaW5lZD8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBjb25mbGljdHMgd2l0aCBleGlzdGluZyBpbnRlcmZhY2VzLCBvciBtaXNjb25maWd1cmVkIHBhcmFtZXRlcnM/XG4qICAgKipQYXJhbWV0ZXIgVmFsaWRhdGlvbjoqKiBIb3cgcm9idXN0IGlzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSB0dW5uZWwncyBwYXJhbWV0ZXJzPyBJcyB0aGVyZSBhIHJpc2sgb2YgY3JlYXRpbmcgaW5jb25zaXN0ZW50IHR1bm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGludHJvZHVjZSByb3V0aW5nIGxvb3BzIG9yIG90aGVyIG9kZCBiZWhhdmlvcnM/IElzIHRoZXJlIGEgcmlzayBvZiBsZWFraW5nIHJlc291cmNlcz9cbiogICAqKkNvbmN1cnJlbmN5OioqIEdpdmVuIHRoZSBtdWx0aS10aHJlYWRlZCBuYXR1cmUgb2YgdGhlIGtlcm5lbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGludGVyZmFjZSBjcmVhdGlvbiBvciBjb25maWd1cmF0aW9uIHN0ZXBzLiBBcmUgcHJvcGVyIGxvY2tzIGhlbGQgd2hlbiBuZWNlc3Nhcnk/XG4qICAgKipJbnRlcmFjdGlvbiB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtczoqKiBIb3cgZG9lcyBgaXBpcDZfbmV3bGlua2AgaW50ZXJhY3Qgd2l0aCB0aGUgcm91dGluZyB0YWJsZT8gRG9lcyBpdCByZWdpc3RlciBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHJvdXRlIGNvbmZsaWN0cyBvciBibGFja2hvbGluZz9cbiogICAqKlNlY3VyaXR5OioqIEFyZSB0aGVyZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBoZXJlPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIG1pc3VzZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgc2VjdXJpdHkgY29uc3RyYWludHMgaW1wb3NlZD9cblxuVGhpcyBwb2ludHMgbWUgaW4gdGhlIGRpcmVjdGlvbiBvZiBleGFtaW5pbmcgdGhlIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiBjb2RlLCBpbmNsdWRpbmcgaG93IHRoZSB0dW5uZWwncyBlbmRwb2ludHMgYXJlIHNldCB1cCwgaG93IHRoZSBNVFUgaXMgbmVnb3RpYXRlZCwgYW5kIGhvdyBJUHY2IGFkZHJlc3NpbmcgaXMgYXNzaWduZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MDkuNjc1MzIxMTA5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM1ODczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwNl9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NpdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NpdC5jPTE1MTQ9c3RhdGljIGJvb2wgaXBpcDZfbmV0bGlua182cmRfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTU0OC1cXG5uZXQvaXB2Ni9zaXQuYzoxNTQ5OnN0YXRpYyBpbnQgaXBpcDZfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L3NpdC5jLTE1NTAtXFx0XFx0XFx0IHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNzcxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBzaXRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE3NzctXFx0LnZhbGlkYXRlXFx0PSBpcGlwNl92YWxpZGF0ZSxcXG5uZXQvaXB2Ni9zaXQuYzoxNzc4OlxcdC5uZXdsaW5rXFx0PSBpcGlwNl9uZXdsaW5rLFxcbm5ldC9pcHY2L3NpdC5jLTE3NzktXFx0LmNoYW5nZWxpbmtcXHQ9IGlwaXA2X2NoYW5nZWxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjA5LjcxOTY4NDU5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA0OTEzNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipUdW5uZWwgSGVhZHJvb20gQWRqdXN0bWVudHMgLSBTY29wZSBhbmQgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgY29kZSBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBoYW5kbGUgdGhlIGNoYW5nZXMgdG8gdHVubmVsIGhlYWRyb29tLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGVkZ2UgY2FzZXMuIEkndmUgaWRlbnRpZmllZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMg4oCTIHRoZSBmdW5jdGlvbnMgd2hlcmUgbmV3IHR1bm5lbCBsaW5rcyBhcmUgY3JlYXRlZCDigJMgYW5kIHRoZXNlIGFyZTogYGlwZ3JlX25ld2xpbmtgLCBgZXJzcGFuX25ld2xpbmtgLCBgdnRpX25ld2xpbmtgLCBgaXBpcF9uZXdsaW5rYCwgYGlwNmdyZV9uZXdsaW5rYCwgYGlwNmVyc3Bhbl9uZXdsaW5rYCwgYGlwNl90bmxfbmV3bGlua2AsIGFuZCBgaXBpcDZfbmV3bGlua2AuIFRoZXNlIHNlZW0gdG8gY292ZXIgdGhlIHN0YW5kYXJkIHR1bm5lbCB0eXBlcywgYW5kIHRoZXknbGwgbGlrZWx5IGJlIHRoZSBmb2N1cyBvZiB0aGUgaW5pdGlhbCBhZGp1c3RtZW50cy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaGF2ZSBJIGNhcHR1cmVkIGFsbCB0aGUgcmVsZXZhbnQgbGluayBjcmVhdGlvbnM/IEkgbmVlZCB0byB0aGluayBpZiB0aGVyZSBhcmUgb3RoZXIgcGxhY2VzIHdoZXJlIHR1bm5lbHMgYXJlIGNvbmZpZ3VyZWQgKHJhdGhlciB0aGFuIGNyZWF0ZWQpLCB3aGljaCBtaWdodCBhbHNvIGJlIGFmZmVjdGVkLlxuXG5Ob3csIHJlZ2FyZGluZyBgbmV0a2l0LmNgLCBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBhIHNpbWlsYXIgYG5ldGtpdF9uZXdfbGlua2AgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVxdWl2YWxlbnQgdGhhdCB3b3VsZCBhbHNvIG5lZWQgdG8gYmUgbW9kaWZpZWQuIEl0J3MgbGlrZWx5IHRoYXQgYSBjb21tb24gaW50ZXJmYWNlIHdvdWxkIGJlIHVzZWQgdGhlcmUgdG8gYWJzdHJhY3QgdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGFuZCBlbnN1cmUgY29uc2lzdGVuY3kuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZSBpbiB0aGF0IG1vZHVsZSBhbmQgbWFrZSBzdXJlIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBtb2RpZmljYXRpb25zLiBJIG11c3QgZW5zdXJlIHRoaXMgYW5kIG90aGVyIHBvdGVudGlhbCBjYWxscyBhcmUgaWRlbnRpZmllZCwgb3IgdGhlIGNoYW5nZXMgd29uJ3QgYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoxMy45MjQ2MDI5MzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDU1ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGtpdF9uZXdfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz01MTE9c3RhdGljIGludCBuZXRraXRfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtNTI0LVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjUyNTpzdGF0aWMgaW50IG5ldGtpdF9uZXdfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTUyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM9MTI1OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbmV0a2l0X2xpbmtfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTI2My1cXHQuc2V0dXBcXHRcXHQ9IG5ldGtpdF9zZXR1cCxcXG5kcml2ZXJzL25ldC9uZXRraXQuYzoxMjY0OlxcdC5uZXdsaW5rXFx0PSBuZXRraXRfbmV3X2xpbmssXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTI2NS1cXHQuZGVsbGlua1xcdD0gbmV0a2l0X2RlbF9saW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoxMy45NzI2NzA1MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM5NzY5MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBUdW5uZWxpbmcgQ29kZSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhlIGNoYW5nZSByZWZlcmVuY2VzIGBuZXRraXRfbmV3X2xpbmtgLCBzbyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgY29kZSB0b3VjaGVzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gLCBzbyBJIHNob3VsZCBwcm9iYWJseSBsb2NhdGUgdGhhdCBkZWZpbml0aW9uIGluIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBBaGEsIGl0J3MgYSBzdGF0aWMgaW5saW5lLCBnb3QgaXQuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gZXhwYW5kIGJleW9uZCBqdXN0IGBuZXRraXRfbmV3X2xpbmtgLiBHaXZlbiB0aGlzIGFuZCB0aGUgaW5saW5lIG5hdHVyZSBvZiB0aGF0IGZ1bmN0aW9uLCBJIG5lZWQgdG8gaWRlbnRpZnkgKmFsbCogdGhlIG5ld2xpbmstcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGFmZmVjdGVkLiBUaGF0IHdvdWxkIGJlIGBpcGdyZV9uZXdsaW5rYCwgYGVyc3Bhbl9uZXdsaW5rYCwgYHZ0aV9uZXdsaW5rYCwgYGlwaXBfbmV3bGlua2AsIGBpcDZncmVfbmV3bGlua2AsIGBpcDZlcnNwYW5fbmV3bGlua2AsIGBpcDZfdG5sX25ld2xpbmtgLCBhbmQgYGlwaXA2X25ld2xpbmtgLiBPZiBjb3Vyc2UsIGxldCdzIGluY2x1ZGUgYG5ldGtpdF9uZXdfbGlua2AgaW4gdGhpcyBsaXN0LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBpcF90dW5uZWxfYmluZF9kZXZgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXBfdHVubmVsX25ld2xpbmtgLCBgaXBfdHVubmVsX3VwZGF0ZWAsIGFuZCBgaXBfdHVubmVsX2luaXRfbmV0YC4gYGlwX3R1bm5lbF91cGRhdGVgIGlzIGFsc28gY2FsbGVkIGZyb20gYGlwX3R1bm5lbF9jaGFuZ2VsaW5rYC4gVGhhdCBzaWduaWZpY2FudGx5IGJyb2FkZW5zIHRoZSBzY29wZSEgU28gSSBuZWVkIHRvIGNvbnNpZGVyIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYHZ0aV9jaGFuZ2VsaW5rYCwgYGlwaXBfY2hhbmdlbGlua2AsIGBpcDZncmVfY2hhbmdlbGlua2AsIGBpcDZlcnNwYW5fY2hhbmdlbGlua2AsIGBpcDZfdG5sX2NoYW5nZWxpbmtgLCBgaXBpcDZfY2hhbmdlbGlua2AsIGFuZCBmaW5hbGx5LCB0aGUgcG90ZW50aWFsIGBuZXRraXRfY2hhbmdlX2xpbmtgIGlmIGl0IGV4aXN0cy4gVGltZSB0byB2ZXJpZnkgaWYgdGhhdCBleGlzdHMsIG9mIGNvdXJzZS4gVGhpcyBicm9hZGVyIGludmVzdGlnYXRpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoxOS4yMTI0NDIwNTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg3Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGtpdF9jaGFuZ2VfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz0xMDY4PXN0YXRpYyB2b2lkIG5ldGtpdF9kZWxfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTA4OS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYzoxMDkwOnN0YXRpYyBpbnQgbmV0a2l0X2NoYW5nZV9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMTA5MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz0xMjU5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBuZXRraXRfbGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy0xMjY1LVxcdC5kZWxsaW5rXFx0PSBuZXRraXRfZGVsX2xpbmssXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MTI2NjpcXHQuY2hhbmdlbGlua1xcdD0gbmV0a2l0X2NoYW5nZV9saW5rLFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTEyNjctXFx0LmdldF9saW5rX25ldFxcdD0gbmV0a2l0X2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MTkuMjU2NzM0ODkxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDkzMjI2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEludGVyZmFjZSBDaGFuZ2UqKlxuXG5SaWdodCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AuIFRoYXQncyB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyB3ZSBzaG91bGQgemVybyBpbiBvbiBob3cgdGhlIHR1bm5lbGluZyBhc3BlY3RzIG9mIGEgbGluayBjaGFuZ2UgYXJlIGhhbmRsZWQuIFNvLCB0aGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIGFuZCBpdCBsaXZlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsLmNgLiBMZXQncyBzZWUgaG93IHRoYXQncyBpbXBsZW1lbnRlZC4gR290dGEgdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIHR1bm5lbCBsaW5rJ3MgY2hhcmFjdGVyaXN0aWNzIGFyZSBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODoyMi40NjYwNjAzMThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjI5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyNDc9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX25ld2xpbmspO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDgtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0OTppbnQgaXBfdHVubmVsX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjUwLVxcdFxcdFxcdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwgX191MzIgZndtYXJrKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI4NC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI4NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfY2hhbmdlbGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MjIuNTExMjk3MDA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MTAwNjg0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgR1JFIHR1bm5lbHMgYXJlIGhhbmRsZWQgaW4gdGhlIElQdjQgc3RhY2suIEknbSBmb2N1c2luZyBvbiB0aGUgYGlwZ3JlX2NoYW5nZWxpbmtgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIHdoZW4gdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhIEdSRSBsaW5rIGNoYW5nZS4gSXQncyB0aGUga2V5IGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyB0byBtb2RpZmljYXRpb25zIG9mIGEgR1JFIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBldmVudHMgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCBvcGVyYXRpb25zIGl0IGlzIHBlcmZvcm1pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MzEuMjIxMzY4NDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDI5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDUwLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTE6c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ1Mi1cXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTY3ND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2ODEtXFx0Lm5ld2xpbmtcXHQ9IGlwZ3JlX25ld2xpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY4MjpcXHQuY2hhbmdlbGlua1xcdD0gaXBncmVfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjgzLVxcdC5kZWxsaW5rXFx0PSBpcF90dW5uZWxfZGVsbGluayxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE2ODk9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2OTYtXFx0Lm5ld2xpbmtcXHQ9IGlwZ3JlX25ld2xpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY5NzpcXHQuY2hhbmdlbGlua1xcdD0gaXBncmVfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk4LVxcdC5kZWxsaW5rXFx0PSBpcF90dW5uZWxfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MzEuMjc1NDA5Nzk3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODc5ODg3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgZXJzcGFuX2NoYW5nZWxpbmtgIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXJzcGFuX2NoYW5nZWxpbmtgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIEVSU1BBTiAoRW5jYXBzdWxhdGVkIFJlbW90ZSBTUEFOKSBhcmNoaXRlY3R1cmUuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBjb3JlIHB1cnBvc2UgaXMgd2l0aGluIHRoZSBkYXRhIHBsYW5lIG1hbmFnZW1lbnQuIElzIGl0IHByaW1hcmlseSBmb2N1c2VkIG9uIGNvbmZpZ3VyYXRpb24gdXBkYXRlcywgaGFuZGxpbmcgbGluayBzdGF0ZSBjaGFuZ2VzLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBNeSBpbml0aWFsIHN1c3BpY2lvbiBpcyB0aGF0IGl04oCZcyBpbnZvbHZlZCBpbiBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIEVSU1BBTiBjb25maWd1cmF0aW9uIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgbmV0d29yayB0b3BvbG9neSBvciBsaW5rIHN0YXR1cy5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcy4gRG9lcyBpdCBoYW5kbGUgbGluayB1cC9kb3duIGV2ZW50cz8gIEhvdyBkb2VzIGl0IGludGVyZmFjZSB3aXRoIHRoZSBjb250cm9sIHBsYW5lLCBpZiBhdCBhbGw/ICBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBzdGFuZGFsb25lIG1vZHVsZSwgb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbXBvbmVudHMuIEknbSB3b25kZXJpbmcgaWYgaXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgb3Igc3RhdGUgdmFyaWFibGVzIHRvIG1hbmFnZSBFUlNQQU4gY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IHRoZXNlIGFyZS4gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVudCBhY2Nlc3NlcyB0byBzaGFyZWQgcmVzb3VyY2VzLCBjb25zaWRlcmluZyB0aGUgaW5oZXJlbnQgZHluYW1pYyBuYXR1cmUgb2YgbmV0d29yayBsaW5rcz9cblxuV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgbG9nZ2luZyBvciBlcnJvciByZXBvcnRpbmcgd2hlbiBpdCBlbmNvdW50ZXJzIHByb2JsZW1zPyAgU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgcm9idXN0IG1lY2hhbmlzbXMgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmVzIGR1cmluZyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgb3IgbGluayBzdGF0ZSB0cmFuc2l0aW9ucz8gVGhhdCdzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyB1bmludGVycnVwdGVkIG5ldHdvcmsgdmlzaWJpbGl0eS4gSSdtIGFsc28gY2hlY2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zOyBpcyB0aGVyZSBhbnkgcmlzayBvZiB1bmF1dGhvcml6ZWQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBvciBkb2VzIHRoZSBmdW5jdGlvbiBwcm9wZXJseSB2YWxpZGF0ZSBpbnB1dCBhbmQgcGVybWlzc2lvbnM/XG5cbkZpbmFsbHksIGFuZCB0aGlzIGlzIGNydWNpYWwsIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QuICBEb2VzIGl0IGludHJvZHVjZSBhbnkgc2lnbmlmaWNhbnQgbGF0ZW5jeSBvciByZXNvdXJjZSBvdmVyaGVhZCwgYW5kIGlmIHNvLCBob3cgY2FuIGl0IGJlIG9wdGltaXplZD8gIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBwYXJ0aWN1bGFybHkgaWYgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJlcXVlbnRseSBkdWUgdG8gbGluayBmbGFwcGluZyBvciByYXBpZCBjaGFuZ2VzIGluIHRoZSBuZXR3b3JrLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGZ1bGx5IGFwcHJlY2lhdGUgaXRzIGVmZmljaWVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODozNS42NjM0MDE5MDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjY5NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyc3Bhbl9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTE0NTE9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDgyLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0ODM6c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzA0PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBlcnNwYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MTEtXFx0Lm5ld2xpbmtcXHQ9IGVyc3Bhbl9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MTI6XFx0LmNoYW5nZWxpbmtcXHQ9IGVyc3Bhbl9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MTMtXFx0LmRlbGxpbmtcXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODozNS43MDkwNzc5N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkxMjMxMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOlxuXG4qKlZUSSBDaGFuZ2VsaW5rIENvbmNlcm5zKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVmlydHVhbCBUdW5uZWwgSW50ZXJmYWNlIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYG5ldC9pcHY0L2lwX3Z0aS5jYCBmaWxlLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGUgYHZ0aV9jaGFuZ2VsaW5rYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBoYXMgbGlrZWx5IGJlZW4gdGhlIGZvY3VzIG9mIG15IGF0dGVudGlvbiBkdWUgdG8gY2VydGFpbiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgb24gd2hhdCBpdHMgcHVycG9zZSBpcy4gV2hhdCBkYXRhIGRvZXMgaXQgbmVlZCB0byBhbHRlcj8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgdGhhdCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3Igd2hlbiBsaW5raW5nIGEgVlRJIHRvIG90aGVyIGludGVyZmFjZXMuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZSwgSSBjYW4ndCBsZWF2ZSB0aGlzIGFsb25lIHVudGlsIEknbSBzdXJlIEkgaGF2ZSBpdCBhbGwgc29ydGVkIGluIG15IGhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6MzguOTAwMzExNzM3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMzMTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2dGlfY2hhbmdlbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF92dGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF92dGkuYz01Nzc9c3RhdGljIGludCB2dGlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNTkwLVxcbm5ldC9pcHY0L2lwX3Z0aS5jOjU5MTpzdGF0aWMgaW50IHZ0aV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfdnRpLmMtNTkyLVxcdFxcdFxcdCAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmM9NjQ5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB2dGlfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTY1Ni1cXHQubmV3bGlua1xcdD0gdnRpX25ld2xpbmssXFxubmV0L2lwdjQvaXBfdnRpLmM6NjU3OlxcdC5jaGFuZ2VsaW5rXFx0PSB2dGlfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcF92dGkuYy02NTgtXFx0LmRlbGxpbmsgICAgICAgID0gaXBfdHVubmVsX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjM4Ljk0MzY0OTgwNVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNDQ1MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gbmV0d29yayBjb2RlLCBzcGVjaWZpY2FsbHkgSVB2NCB0dW5uZWxzLiBNeSBtaW5kIGhhcyBqdXN0IGp1bXBlZCB0byBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgaXBpcF9jaGFuZ2VsaW5rYCB3aXRoaW4gYG5ldC9pcHY0L2lwaXAuY2AuIFRoaXMgc3VnZ2VzdHMgSSdtIGVpdGhlciBkZWJ1Z2dpbmcsIHJldmlld2luZywgb3IgcGVyaGFwcyBleHRlbmRpbmcgdGhlIElQdjQtaW4tSVB2NCAoSVBJUCkgdHVubmVsIGZ1bmN0aW9uYWxpdHkuIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgdHVubmVscyBhcmUgY29uZmlndXJlZCBvciBtb2RpZmllZCBhdCBhIGxpbmsgbGV2ZWwuIEkgbWlnaHQgYmUgbG9va2luZyBhdCBob3cgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBpbXBhY3QgdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLCBvciBjb252ZXJzZWx5LCBob3cgYWRqdXN0bWVudHMgdG8gdGhlIElQSVAgdHVubmVsIGl0c2VsZiBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBleGFtaW5pbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gbGluayBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlcyBmb3IgdGhlIHR1bm5lbC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIHR1bm5lbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NDIuMDI1MDk4MDE5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBpcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00ODYtXFxubmV0L2lwdjQvaXBpcC5jOjQ4NzpzdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwaXAuYy00ODgtXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTYwMT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBpcF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTYwOC1cXHQubmV3bGlua1xcdD0gaXBpcF9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwaXAuYzo2MDk6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwaXBfY2hhbmdlbGluayxcXG5uZXQvaXB2NC9pcGlwLmMtNjEwLVxcdC5kZWxsaW5rXFx0PSBpcF90dW5uZWxfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NDIuMDY5MjY3ODI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzY2NTk2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSVB2NiBHUkUgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgSVB2NiBHUkUgc2V0dXAuLi4gc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBhYm91dCB3aGVyZSB0aGUgbGluayBjaGFuZ2VzIGhhcHBlbi4gSSBpbW1lZGlhdGVseSB0aGluayBvZiBgaXA2Z3JlX2NoYW5nZWxpbmtgIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aG9zZSBldmVudHMsIGFuZCBpdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgbG9naWMgdG8gdXBkYXRlIG9yIGFkanVzdCBhbnl0aGluZyByZWxhdGVkIHRvIElQdjYgR1JFIHR1bm5lbHMgd2hlbiB0aGUgdW5kZXJseWluZyBsaW5rIHN0YXRlIGNoYW5nZXMuIEknbGwgbmVlZCB0byByZXZpc2l0IHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODo0NC44MDU5MzEzODFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjAwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9MjAxMD1zdGF0aWMgc3RydWN0IGlwNl90bmwgKlxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDExOmlwNmdyZV9jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDEyLVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcF9wLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNDMtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNDQ6c3RhdGljIGludCBpcDZncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDQ1LVxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTQtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNTU6XFx0dCA9IGlwNmdyZV9jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIHRiLCBkYXRhLCBcXHUwMDI2cCwgZXh0YWNrKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1Ni1cXHRpZiAoSVNfRVJSKHQpKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjY9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNzctXFx0aWduID0gbmV0X2dlbmVyaWModC1cXHUwMDNlbmV0LCBpcDZncmVfbmV0X2lkKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI3ODpcXHR0ID0gaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgdGIsIGRhdGEsIFxcdTAwMjZwLCBleHRhY2spO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjc5LVxcdGlmIChJU19FUlIodCkpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI5MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5OC1cXHQubmV3bGlua1xcdD0gaXA2Z3JlX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyOTk6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzAwLVxcdC5kZWxsaW5rXFx0PSBpcDZncmVfZGVsbGluayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMzA2PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTMtXFx0Lm5ld2xpbmtcXHQ9IGlwNmdyZV9uZXdsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMzE0OlxcdC5jaGFuZ2VsaW5rXFx0PSBpcDZncmVfY2hhbmdlbGluayxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxNS1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NDQuODUwMTM3ODU5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjA4NTY4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBpcDZlcnNwYW5fY2hhbmdlbGlua2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYGlwNmVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb246IHdoYXQgc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgSVAgdHVubmVsIGFyZSBiZWluZyBtb2RpZmllZD8gSXMgaXQgdGhlIE1UVSwgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBlbmNhcHN1bGF0aW9uIHR5cGUsIHRoZSBmbG93IGxhYmVscywgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIFwiY2hhbmdlXCIgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dW5uZWwgdHlwZSDigJMgbGlrZWx5IGBzdHJ1Y3QgZXJzcGFuX2RldmAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFuZCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhvc2Ugc3RydWN0dXJlcyB0byBhbnRpY2lwYXRlIHdoYXQgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC5cblxuVGhlIFwiY2hhbmdlbGlua1wiIGFzcGVjdCBpbXBsaWVzIGEgcmVjb25maWd1cmF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIGR5bmFtaWMgY2hhbmdlcyBiYXNlZCBvbiBuZXR3b3JrIGV2ZW50cywgdXNlci1pbml0aWF0ZWQgYWRqdXN0bWVudHMsIG9yIHBlcmhhcHMgYSBjb25zZXF1ZW5jZSBvZiByb3V0aW5nIHByb3RvY29sIHVwZGF0ZXM/IFRoZSBjb250ZXh0IGlzIGNyaXRpY2FsIGhlcmUuIElzIHRoaXMgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrIGRpcmVjdGx5LCBvciBpcyBpdCBpbnZva2VkIGJ5IGEgdXNlci1zcGFjZSB1dGlsaXR5IGxpa2UgYGlwYD8gVGhlIHNvdXJjZSBvZiB0aGUgY2FsbCBpcyByZWxldmFudCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMuXG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgcG90ZW50aWFsIGVycm9yIHBhdGhzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHJlcXVlc3RlZCBjaGFuZ2UgaXMgaW52YWxpZCwgb3IgY29uZmxpY3RzIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIHJlc291cmNlIGFsbG9jYXRpb24gaXNzdWVzIGludm9sdmVkLCBsaWtlIGluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBmbG93IGxhYmVscyBvciBNVFUgY2hhbmdlcyB0aGF0IHdvdWxkIGJyZWFrIGV4aXN0aW5nIGNvbm5lY3Rpb25zPyBFcnJvciBoYW5kbGluZyBuZWVkcyB0byBiZSByb2J1c3QsIGFuZCBJJ2xsIHdhbnQgdG8gcmV2aWV3IHRoZSBjb2RlIGZvciBwcm9wZXIgY2hlY2tzIGFuZCBlcnJvciByZXBvcnRpbmcuIEFsc28sIHdoYXQga2luZCBvZiBsb2NraW5nIGlzIHVzZWQgYXJvdW5kIHRoaXMgZnVuY3Rpb24sIGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBvbmUga2VybmVsIGNvbnRleHQ/XG5cbkkgYWxzbyB3b25kZXIgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGJsb2NraW5nIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGludHJvZHVjZSBsYXRlbmN5LCBvciBkb2VzIGl0IGF0dGVtcHQgdG8gbWluaW1pemUgZGlzcnVwdGlvbiB3aXRoIGF0b21pYyB1cGRhdGVzIG9yIGRlZmVycmVkIGNoYW5nZXM/IElmIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmUtZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwsIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIG92ZXJoZWFkIG9mIHRoZSB0dW5uZWwgc2V0dXAsIGluY2x1ZGluZyB0aGUgZXhjaGFuZ2Ugb2YgY29udHJvbCBwYWNrZXRzIGFuZCByZS1lc3RhYmxpc2htZW50IG9mIGFueSBhc3NvY2lhdGVkIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBvciB0dW5uZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjQ5LjIxMDk5OTc4NloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMDQ5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0yMjU4PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI2NS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI2NjpzdGF0aWMgaW50IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNjctXFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMjA9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmVyc3Bhbl90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMyNy1cXHQubmV3bGlua1xcdD0gaXA2ZXJzcGFuX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMjg6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzI5LVxcdC5nZXRfc2l6ZVxcdD0gaXA2Z3JlX2dldF9zaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODo0OS4yNTYwMTE1OTNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NDA1NzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzpcblxuKipXb3JraW5nIHdpdGggSVB2NiBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGRpdmluZyBpbnRvIHRoZSBgaXA2X3RubF9jaGFuZ2VsaW5rYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoYXQgZnVuY3Rpb24gaXMga2V5IGZvciBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhbiBJUHY2IHR1bm5lbCBpbnRlcmZhY2UsIGFuZCBhcyBhIHJlc3VsdCBJIHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggbGluayBjaGFuZ2VzLiBJJ20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhvdyBpdCBoYW5kbGVzIGNoYW5nZXMgaW4gTVRVLCBhZGRyZXNzIGFzc2lnbm1lbnQsIG9yIG90aGVyIHJlbGV2YW50IHBhcmFtZXRlcnMgZm9yIHR1bm5lbCBpbnRlcmZhY2VzLiBJIGFsc28gd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgc3VjaCBhcyB0aGUgcm91dGluZyB0YWJsZSB1cGRhdGVzIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvdG9jb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjUyLjIxMDA3MjM1NVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MjExNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2Mz1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDQ6c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2MT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjI2OC1cXHQubmV3bGlua1xcdD0gaXA2X3RubF9uZXdsaW5rLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjY5OlxcdC5jaGFuZ2VsaW5rXFx0PSBpcDZfdG5sX2NoYW5nZWxpbmssXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXFx0LmRlbGxpbmtcXHQ9IGlwNl90bmxfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTg6NTIuMjU1NTAyMDAyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTkyNzAyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6XG5cbioqRGlnZ2luZyBpbnRvIElQdjYgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IElQdjYgdHVubmVsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGxpbmsgY2hhbmdlcywgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGlwaXA2X2NoYW5nZWxpbmtgIHdpdGhpbiBgbmV0L2lwdjYvc2l0LmNgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGgsIHNheSwgYSB0dW5uZWwgaW50ZXJmYWNlIG92ZXIgYSBwaHlzaWNhbCBpbnRlcmZhY2UgdGhhdCdzIGdvbmUgZG93biBhbmQgY29tZSBiYWNrIHVwLCBvciB3aG9zZSBjb25maWd1cmF0aW9uIGhhcyBvdGhlcndpc2UgYWx0ZXJlZCwgbGlrZSBhIE1UVSBjaGFuZ2UuIEkga25vdyBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZSBgaXBpcDZfY2hhbmdlbGlua2AgZnVuY3Rpb24gYWZmZWN0cyB0aGUgdHVubmVsJ3Mgc3RhdGUsIHRoZSByb3V0aW5nIHNldHVwLCB0aGUgbmVpZ2hib3IgZGlzY292ZXJ5LCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJlYXMgd2hlbiBhbiB1bmRlcmx5aW5nIGxpbmsgaXMgcmVjb25maWd1cmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMgdGhhdCB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtb2RpZmllcyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEknbSB3b25kZXJpbmcsIGNvdWxkIHRoZXJlIGJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1pc3NlZCB1cGRhdGVzPyBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgd2hlbiBpbnRlcmZhY2VzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBzaXQgZHJpdmVyIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1ODo1NS42NTQ3NzYyNTdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODU4MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXA2X2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTU0OT1zdGF0aWMgaW50IGlwaXA2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE2MDAtXFxubmV0L2lwdjYvc2l0LmM6MTYwMTpzdGF0aWMgaW50IGlwaXA2X2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvaXB2Ni9zaXQuYy0xNjAyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNzcxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBzaXRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE3NzgtXFx0Lm5ld2xpbmtcXHQ9IGlwaXA2X25ld2xpbmssXFxubmV0L2lwdjYvc2l0LmM6MTc3OTpcXHQuY2hhbmdlbGlua1xcdD0gaXBpcDZfY2hhbmdlbGluayxcXG5uZXQvaXB2Ni9zaXQuYy0xNzgwLVxcdC5nZXRfc2l6ZVxcdD0gaXBpcDZfZ2V0X3NpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU4OjU1LjcwODY0NDE1NFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTYyODEyMzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBhbmQgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHR1bm5lbCBjb25maWd1cmF0aW9uIGFuZCBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkndmUgZ290IGEgcHJldHR5IGdvb2QgZ3Jhc3Agb24gdGhpcyBhbHJlYWR5LCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGAqX25ld2xpbmtgIGFuZCBgKl9jaGFuZ2VsaW5rYCBzeW1ib2xzIGZvciB2YXJpb3VzIHR1bm5lbCB0eXBlczogYG5ldGtpdGAsIGBpcGdyZWAsIGBlcnNwYW5gLCBgdnRpYCwgYGlwaXBgLCBgaXA2Z3JlYCwgYGlwNmVyc3BhbmAsIGBpcDZfdG5sYCwgYW5kIGBpcGlwNmAuIFRoZXNlIGxpa2VseSByZXByZXNlbnQgdGhlIGVudHJ5IHBvaW50cyBmb3IgY3JlYXRpbmcgYW5kIG1vZGlmeWluZyB0aGVzZSB0dW5uZWwgaW50ZXJmYWNlcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgY2FsbCByZWxhdGlvbnNoaXBzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBpcF90dW5uZWxfYmluZF9kZXZgIGZ1bmN0aW9uIHRvIHNlZSBpdHMgdXNhZ2UsIHNpbmNlIGl0IGhhcyBzdWNoIGNsZWFyIGxpbmtzIHRvIGEgbnVtYmVyIG9mIGltcG9ydGFudCBmdW5jdGlvbnM6IGBpcF90dW5uZWxfY3JlYXRlYCwgYGlwX3R1bm5lbF91cGRhdGVgLCBgaXBfdHVubmVsX2luaXRfbmV0YCwgYW5kIGBpcF90dW5uZWxfbmV3bGlua2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgdXNlIHdpdGhpbiBgaXBfdHVubmVsX2luaXRfbmV0YCBtZWFucyBpdCdzIGFsc28gY2FsbGVkIHdoZW4gYSBuZXcgbmV0d29yayBuYW1lc3BhY2UgaXMgY3JlYXRlZCwgd2hpY2ggaXMgY3JpdGljYWwuXG5cbk1vdmluZyBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZWAgYW5kIG90aGVyIGZ1bmN0aW9ucy4gYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIGdldHMgY2FsbGVkIGZyb20gYGlwNmdyZV90bmxfbGlua19jb25maWdgIGFuZCBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AuIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnYCBpcyBjYWxsZWQgZnJvbSBgaXA2Z3JlX3R1bm5lbF9sb2NhdGVgLCBgaXA2Z3JlX3RubF9jaGFuZ2VgICh3aGljaCBpcywgaW4gdHVybiwgbGlua2VkIHRvIGBpcDZncmVfY2hhbmdlbGlua2ApLCBhbmQgZGlyZWN0bHkgZnJvbSBgaXA2Z3JlX25ld2xpbmtgLiAgYGlwNmVyc3Bhbl90bmxfbGlua19jb25maWdgIGlzIGNhbGxlZCBmcm9tIGBpcDZlcnNwYW5fdG5sX2NoYW5nZWAgYW5kIGBpcDZlcnNwYW5fbmV3bGlua2AuIFRoaXMgaGVscHMgbWUgbWFwIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgb2YgdGhlIDYtb3Zlci02IHR1bm5lbHMuXG5cbkxldCdzIGRyaWxsIGRvd24gZXZlbiBmdXJ0aGVyLiBgaXA2X3RubF9saW5rX2NvbmZpZ2AgaXMgY29ubmVjdGVkIHRvICBgaXA2X3RubF9jaGFuZ2VgICh3aGljaCBpcyBjYWxsZWQgdmlhIHRoZSBpb2N0bCBhbmQgY2hhbmdlIGxpbmsgcGF0aCkgYW5kIGBpcDZfdG5sX2Rldl9pbml0YC4gVGhlIGRldiBpbml0IHBhdGggaXMgZnJvbSB0aGUgbmV3IGxpbmsgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2VgLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuLiBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpcyBjYWxsZWQgZnJvbSBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgYW5kIGBpcGlwNl90dW5uZWxfaW5pdGAuICBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgY29ubmVjdHMgdG8gdGhlIGlvY3RsIGNhbGwsIHdoaWNoIGlzIHZlcnkgY29tbW9uLlxuXG5TaW5jZSB0aGUgaW9jdGxzIGFyZSBjcml0aWNhbCBmb3IgY29udHJvbGxpbmcgdGhlc2UgdHVubmVscywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBJL08gY29udHJvbCBjYWxscy4gIEkgbmVlZCB0byBhZGQgYGlwNmdyZV90dW5uZWxfaW9jdGxgLCBgaXA2X3RubF9pb2N0bGAsIGBpcGlwNl90dW5uZWxfaW9jdGxgLCBhbmQgYGlwX3R1bm5lbF9pb2N0bGAgdG8gdGhlIHJldmlldyBsaXN0LlxuXG5UaW1lIHRvIGhlYWQgaW50byBgbmV0L2lwdjQvaXBfdHVubmVsLmNgIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3R1bm5lbF9pb2N0bGAuIFRoaXMgc2hvdWxkIGdpdmUgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdHVubmVsIGNvbnRyb2wgaW50ZXJmYWNlcyBhY3R1YWxseSBvcGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTowNC4yNzE0NTk3MThaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTg3NDk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjA0LjMxNjA1NzUyNloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIyNDAzMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIElPQ1RMKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaXBfdHVubmVsX2lvY3RsYCBpc24ndCBzaG93aW5nIHVwPyBUaGF0J3MgZGVmaW5pdGVseSB1bmV4cGVjdGVkLiBJJ20gcHJldHR5IHN1cmUgSSd2ZSB1c2VkIHRoYXQgYmVmb3JlLCBvciBhdCBsZWFzdCBzb21ldGhpbmcgc2ltaWxhciBpbiB0aGF0IHNwYWNlLiBMZXQncyBub3QgYXNzdW1lIGFueXRoaW5nOyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgaXMgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gVGhhdCBmaWxlJ3MgdGhlIGhlYXJ0IG9mIElQIHR1bm5lbCBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwsIHNvIGlmIHRoaXMgSU9DVEwgaXMgZG9jdW1lbnRlZCBhbnl3aGVyZSwgb3IsIG1vcmUgaW1wb3J0YW50bHksICppbXBsZW1lbnRlZCogYW55d2hlcmUsIGl0J2xsIGJlIHRoZXJlLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSBpdHMgcHJlc2VuY2UgYW5kIGJlaGF2aW91ci4gSSB3aWxsIGxvb2sgZm9yIGFueSBzaWduIG9mIHRoaXMgZnVuY3Rpb24sIGl0cyB1c2FnZSwgb3IgYW55IHBvdGVudGlhbCByZXBsYWNlbWVudHMsIHRvIGRldGVybWluZSBpZiBJIGFtIGhhdmluZyBhIG1vbWVudCwgb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxOTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTowNy41Mzg0NjM0NjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTIyMTM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MDcuNTgzOTk4MzQ5WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzMxNjI4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQIFR1bm5lbCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVAgdHVubmVsaW5nIHNpdHVhdGlvbiBhbmQgcXVpY2tseSByZWFsaXplIHRoZSBgaXBfdHVubmVsLmNgIG1vZHVsZSBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2luZyBgaW9jdGxgLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgd2hhdCB0aGUgY29udHJvbCBwbGFuZSBpbnRlcmFjdGlvbiBsb29rcyBsaWtlLiBJdCdzIGxpa2VseSB1c2luZyBhIGRpZmZlcmVudCBtZXRob2QgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpdm90IG92ZXIgdG8gYGlwX2dyZS5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBjb250cm9sIHBhdGggb3IgdGhlIGFic3RyYWN0aW9uIHRoYXQgKmRvZXMqIGxldmVyYWdlIGEgbWV0aG9kIGZvciBzZXR0aW5nIHVwIGFuZCBtYW5hZ2luZyB0aGUgR1JFIHR1bm5lbHMgYXQgdGhlIG5ldHdvcmsgbGF5ZXIsIGxpa2VseSBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgc2ltaWxhciBtZWNoYW5pc20uIEknbSBrZWVuIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSBrZXkgbWFuYWdlbWVudCwgVFRMIG92ZXJyaWRlcywgYW5kIHByb3RvY29sIHR5cGUgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MTAuNzU3MTYzMzE3WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxNzEyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjEwLjgwMzM4NjY4NFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAzNzYyNjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkluaXRpYWwgUmVhY3Rpb24gdG8gYGlwaXAuY2AqKlxuXG5Pa2F5LCBgaXBpcC5jYC4uLiB3aGF0J3MgdGhpcyBhYm91dD8gTXkgaW50ZXJuYWwgcmFkYXIgaXMgaW1tZWRpYXRlbHkgcGluZ2luZy4gSSBzZWUgdGhhdCBmaWxlbmFtZSBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyB0dW5uZWxzLCBlbmNhcHN1bGF0aW9uLCBwcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCBJUC1pbi1JUCBvciBhIHNpbWlsYXIgcHJvdG9jb2wuIFRoZSAnYycgZXh0ZW5zaW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgQyBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGZvciBhIG5ldHdvcmsgc3RhY2sgb3IgYSB1dGlsaXR5LiBJcyB0aGlzIGEga2VybmVsIG1vZHVsZSwgYSB1c2VyLXNwYWNlIGRhZW1vbiwgb3IgYSBsaWJyYXJ5PyBUaGUgaW1tZWRpYXRlIGNvbnRleHQgaXMgbWlzc2luZyBidXQgdGhpcyBpcyB3aGVyZSBJJ2Qgc3RhcnQuIE15IG1pbmQganVtcHMgdG8gcG9zc2liaWxpdGllczogaXMgdGhpcyBwYXJ0IG9mIGEgVlBOIGltcGxlbWVudGF0aW9uLCBzb21lIGZvcm0gb2YgbmV0d29yayB2aXJ0dWFsaXphdGlvbiwgb3IgcGVyaGFwcyBhIGNvbXBvbmVudCBvZiBhbiBvdmVybGF5IG5ldHdvcmsgc29sdXRpb24/IERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIEknbSBtb3JlIGN1cmlvdXMgYWJvdXQgaG93IHRoaW5ncyBhcmUgaGFuZGxlZDogSVAgZnJhZ21lbnRhdGlvbiwgaGVhZGVyIG1hbmlwdWxhdGlvbiwgTVRVIGNvbnNpZGVyYXRpb25zIGFuZCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy4gSSdtIGVhZ2VyIHRvIGdldCB0aGUgZnVsbGVyIHBpY3R1cmUgdG8gYXNzZXNzIGl0cyBxdWFsaXR5IGFuZCBhcHBsaWNhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MTQuOTA3MTUyMTY3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA3NTgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTI4Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTMyNS1cXG5uZXQvaXB2NC9pcGlwLmM6MzI2OnN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxcbm5ldC9pcHY0L2lwaXAuYy0zMjcte1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTM0MT1pcGlwX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzQ0LVxcdFxcdGlmIChwLVxcdTAwM2VpcGgudmVyc2lvbiAhPSA0IHx8XFxubmV0L2lwdjQvaXBpcC5jOjM0NTpcXHRcXHQgICAgIWlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbChwLVxcdTAwM2VpcGgucHJvdG9jb2wpIHx8XFxubmV0L2lwdjQvaXBpcC5jLTM0Ni1cXHRcXHQgICAgcC1cXHUwMDNlaXBoLmlobCAhPSA1IHx8IChwLVxcdTAwM2VpcGguZnJhZ19vZmYgXFx1MDAyNiBodG9ucyh+SVBfREYpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MTQuOTU3MjM1NTc0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTM0MTIwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29udHJvbCBGbG93OiBgaXBpcF90dW5uZWxfY3RsYCBhbmQgYG5kb19zaW9jZGV2cHJpdmF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlcyBhbmQgdGhlIHdheSB0aGluZ3MgdHlwaWNhbGx5IHdvcmsgaW4gbmV0d29ya2luZyBrZXJuZWwgbW9kdWxlcywgaXMgdGhhdCB0aGUgZnVuY3Rpb24gYGlwaXBfdHVubmVsX2N0bGAgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBgbmRvX3Npb2NkZXZwcml2YXRlYCBuZXRkZXYgb3BlcmF0aW9uIGhhbmRsZXIuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIGVudHJ5IHBvaW50LCByaWdodD8gYG5kb19zaW9jZGV2cHJpdmF0ZWAgaXMgdGhlIFN3aXNzIEFybXkga25pZmUgZm9yIGRlYWxpbmcgd2l0aCBkZXZpY2Utc3BlY2lmaWMgaW9jdGxzIGFuZCBjb250cm9sIG9wZXJhdGlvbnMuIElmIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdHVubmVsaW5nLCBzZXR0aW5nIHVwLCB0ZWFyaW5nIGRvd24sIGFuZCBjb25maWd1cmluZyB0aGUgdHVubmVsIGl0c2VsZiB3b3VsZCBiZSB0aGUga2luZCBvZiBcInByaXZhdGVcIiBvcGVyYXRpb24gdGhhdCBuZWF0bHkgZml0cyB3aXRoaW4gdGhlIHNjb3BlIG9mIHdoYXQgYG5kb19zaW9jZGV2cHJpdmF0ZWAgaGFuZGxlcy4gU28sIHRoYXQncyB3aGVyZSBJJ2Qgc3RhcnQgbG9va2luZyDigJMgdHJhY2luZyBiYWNrIGNhbGxzIGZyb20gYGlwaXBfdHVubmVsX2N0bGAgdG8gY29uZmlybSB0aGF0IGRpcmVjdCBsaW5rLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwYXRoLCBhbmQgYW55IGRldmlhdGlvbiBmcm9tIHRoYXQgd291bGQgYmUsIGF0IGxlYXN0IGluaXRpYWxseSwgYSBzdXJwcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OToxOC40NzA2NDk2NjJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODc3MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBfdHVubmVsX2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTM0MD1zdGF0aWMgaW50XFxubmV0L2lwdjQvaXBpcC5jOjM0MTppcGlwX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsIGludCBjbWQpXFxubmV0L2lwdjQvaXBpcC5jLTM0Mi17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcF9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM4Ny1cXHQubmRvX2dldF9pZmxpbmsgPSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcGlwLmM6Mzg4OlxcdC5uZG9fdHVubmVsX2N0bFxcdD0gaXBpcF90dW5uZWxfY3RsLFxcbm5ldC9pcHY0L2lwaXAuYy0zODktXFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjE4LjUxNDUzMjk0WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTcxMzY3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgR1JFIElQdjYgVHVubmVsIENvbnRyb2wgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IEdSRSBJUHY2IHR1bm5lbHMgYXJlIGNvbnRyb2xsZWQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCBgbmRvX3R1bm5lbF9jdGxgIGlzIGludm9sdmVkIHNvbWVob3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhhdCBhbmQgdGhlIHR1bm5lbCBtYW5hZ2VtZW50LlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSBgaXA2Z3JlX3R1bm5lbF9pb2N0bGAgZnVuY3Rpb24uIFRoYXQncyBkZWZpbmVkIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLiBMZXQncyBzZWUgd2hhdCB0aGUgaW9jdGwgaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29udHJvbCBwbGFuZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgcGxhbmUgZm9yIHRoZXNlIHR1bm5lbHMsIGFuZCB0aGlzIHNlZW1zIGxpa2UgdGhlIGRpcmVjdCB3YXkgdG8gZG8gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3NTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OToyMi43MTE2NzMzOTdaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDgxMDA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZncmVfdHVubmVsX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MjIuNzU4MTYxNTE0WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDgyNzQzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IEdSRSBUdW5uZWwgQ29udHJvbCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZG9fdHVubmVsX2N0bGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgIGZpbGUuIEknbSB0aGlua2luZywgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgY29udHJvbGxpbmcgdGhlIEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uIChHUkUpIHR1bm5lbHMsIHNwZWNpZmljYWxseSB0aG9zZSBvcGVyYXRpbmcgd2l0aCBJUHY2IGVuY2Fwc3VsYXRpb24sIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb25zIGZvciB0aGVzZSB0dW5uZWxzLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbmV0ZGV2aWNlIG9wZXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgaG93IHRyYWZmaWMgaXMgc2hhcGVkLCBob3cgdHVubmVsIGVuZHBvaW50cyBhcmUgY29uZmlndXJlZCwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBjb250cm9sIGZvciBJUHY2IHRyYWZmaWMgdGhyb3VnaCBHUkUgdHVubmVscyBpbiB0aGUgTGludXgga2VybmVsLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgTkRPIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBhbmQgaWYgYW55IHF1aXJrcyBhcmUgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OToyNi40NjY0MzkxNzFaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjA2MTU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZG9fdHVubmVsX2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjI2LjUxMjY1NTc1OFoiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc2MDgxMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgaXA2X2dyZS5jYCBmb3IgYGlvY3RsYCBJbnNwZWN0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYGlvY3RsYCB1c2FnZSB3aXRoaW4gdGhlIElQdjYgR1JFIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gYG5ldC9pcHY2L2lwNl9ncmUuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBHUkUgb3ZlciBJUHY2IGZ1bmN0aW9uYWxpdHksIGFuZCB0aGVyZWZvcmUsIHdoZXJlIGFueSBwb3RlbnRpYWwgYGlvY3RsYCBpbnRlcmFjdGlvbnMgd291bGQgYmUgZGVmaW5lZCBvciB1c2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCwgc28gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMgaGVyZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjI5Ljg4ODc0MDQ0NFoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDM4MTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MjkuOTMzODUyMjAyWiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDA5NTcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBxdWljayB0YWtlIG9uIHdoYXQgSSd2ZSBqdXN0IGJlZW4gbG9va2luZyBhdC5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgSVB2NiBHUkUgQ29kZSoqXG5cbkFscmlnaHQsIHNvIEkgd2FzIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBpcDZfZ3JlLmNgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmVuJ3QgYW55IGlvY3RsIGNhbGxzIGluIHRoZXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCBvbiB0aGlzIGZyb250LiBJIHdhcyBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgY2FsbHMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy5cblxuTm93LCB0aG91Z2gsIG15IGF0dGVudGlvbiBoYXMgc2hpZnRlZC4gU2luY2UgSSBjb3VsZG4ndCBmaW5kIGFueSBpb2N0bCdzIGluIHRoYXQgZmlyc3QgZmlsZSwgbXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGBpcDZfdG5sX2lvY3RsYCB3aGljaCByZXNpZGVzIGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBMZXQncyBzZWUgaWYgdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBpb2N0bCBjYWxscyBhcmUgaW1wbGVtZW50ZWQsIG9yIGlmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgcmFiYml0IGhvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MzIuOTM0ODEyODlaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDY0OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNjExPWlwNl90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0gKnUsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMxLSAqIERlc2NyaXB0aW9uOlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNjMyOiAqICAgaXA2X3RubF9pb2N0bCgpIGlzIHVzZWQgZm9yIG1hbmFnaW5nIElQdjYgdHVubmVsc1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNjMzLSAqICAgZnJvbSB1c2Vyc3BhY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjMyLjk4MjMyMDgwOFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUxOTE3MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQncyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBVc2FnZSBDb250ZXh0KipcblxuUmlnaHQsIHNvIEkndmUgZ290IHRoaXPigKYgd2hhdGV2ZXIgaXQgaXPigKYgaW4gZnJvbnQgb2YgbWUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoZXJlIGRvZXMgdGhpcyBhY3R1YWxseSAqc2hvdyB1cCo/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBhcHBsaWNhdGlvbnMsIHRoZSBlbnZpcm9ubWVudHMgaXQncyBkZXBsb3llZCBpbiwgdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMgaXQgaW50ZXJhY3RzIHdpdGguIEFyZSB3ZSB0YWxraW5nIHRoZW9yZXRpY2FsIG1vZGVscywgcHJvZHVjdGlvbiBzeXN0ZW1zLCByZXNlYXJjaCBwcm90b3R5cGVzPyBFYWNoIGNvbnRleHQgZGljdGF0ZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGFzc3VtcHRpb25zLCBsaW1pdGF0aW9ucywgYW5kLCBmcmFua2x5LCB3aGF0J3MgKmltcG9ydGFudCouIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGFuZCB0aGUgdXNhZ2UgaXMgd2hlcmUgdGhvc2UgZGV0YWlscyBiZWNvbWUgdGFuZ2libGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcywgZWRnZSBjYXNlcywgc2NhbGFiaWxpdHkgY29uY2VybnMuLi4gVGhpcyBcIndoZXJlIGl0J3MgdXNlZFwiIHF1ZXN0aW9uIGlzIHRoZSBqdW1waW5nLW9mZiBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZSBpbnRvIGl0cyB1dGlsaXR5IGFuZCBzaWduaWZpY2FuY2UuIEZyb20gaGVyZSwgSSBjYW4gc3RhcnQgdG8gZGlzc2VjdCBpdHMgZWZmZWN0aXZlbmVzcyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHN0cmVuZ3RocyBhbmQgd2Vha25lc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTozNS45MzQyNDA0NloiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NTIzMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kb190dW5uZWxfY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MzUuOTc5OTk5Nzk3WiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEyNzM1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgS2VybmVsIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlwNl90bmxfaW9jdGxgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3MgcGluZ2luZyBpbiB0aGUgYmFjayBvZiBteSBoZWFkLiBJJ20gd29uZGVyaW5nLi4uIGNvdWxkIGl0IGJlIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUsIHRoZSB3YXkgaXQncyBoYW5kbGluZyB0aGlzLCBpcyBhY3R1YWxseSByZWx5aW5nIG9uIHRoZSBgbmRvX3Npb2NkZXZwcml2YXRlYCBtZWNoYW5pc20gdW5kZXIgdGhlIGhvb2Q/IEl0IGZlZWxzIGxpa2UgdGhlcmUncyBhIHBvdGVudGlhbCBvdmVybGFwIG9yLCBwZXJoYXBzIG1vcmUgYWNjdXJhdGVseSwgYSBoaWRkZW4gZGVwZW5kZW5jeS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaGVyZSBhbmQgdHJhY2UgdGhlIGNvZGUgcGF0aCB0byBiZSBzdXJlLiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZSBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGlzIHdhcyBjbGVhcmVyLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBsb29rIGZvciBhIHBvdGVudGlhbCBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6MzkuMTMxMjc3NjY3WiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcwNTUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfdG5sX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTYxMT1pcDZfdG5sX3Bhcm1fdG9fdXNlcihzdHJ1Y3QgaXA2X3RubF9wYXJtICp1LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTYzMS0gKiBEZXNjcmlwdGlvbjpcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTYzMjogKiAgIGlwNl90bmxfaW9jdGwoKSBpcyB1c2VkIGZvciBtYW5hZ2luZyBJUHY2IHR1bm5lbHNcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTYzMy0gKiAgIGZyb20gdXNlcnNwYWNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTozOS4xNzU5OTI3NzRaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMDg2MjQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBJUHY2IFR1bm5lbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIElQdjYgdHVubmVsaW5nIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyBzb21ldGhpbmcgbWlnaHQgYmUgZ29pbmcgc2lkZXdheXMgd2l0aCB0aGUgZW5jYXBzdWxhdGlvbiBvciBkZWNhcHN1bGF0aW9uIGxvZ2ljLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBsaW5lIDE2MzIgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gc2hvdWxkIGJlIGRlYWxpbmcgd2l0aCBbaW5zZXJ0IG15IHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QsIGVnLiBHUkUgdHVubmVscywgc2l0IHR1bm5lbHMsIG9yIGlwaXAgdHVubmVsc10uIEknbGwgbmVlZCB0byBmb2N1cyBvbiBob3cgaXQgaGFuZGxlcyBbc3BlY2lmaWMgYXNwZWN0IG9mIHR1bm5lbGluZ10uIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgaGVhZGVyIG1hbmlwdWxhdGlvbnMsIG9yIHBlcmhhcHMgYW4gaXNzdWUgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgSVB2NiBzdGFjayBhbmQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UuIE1heWJlIGEgbWlzc2VkIGVycm9yIGNoZWNrIG9yIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvciB1bmRlciBoZWF2eSBsb2FkLiBJIHdhbnQgdG8gc2VlIGhvdyBwYWNrZXRzIGFyZSBjcmVhdGVkL21hbmlwdWxhdGVkLiBJJ2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgUkZDcyBhbmQgcG90ZW50aWFsbHkgc29tZSBuZXR3b3JrIGNhcHR1cmVzIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTU4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6NDIuNzA2ODU4MzQxWiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYzMDpcXHQgKlxcbjE2MzE6XFx0ICogRGVzY3JpcHRpb246XFxuMTYzMjpcXHQgKiAgIGlwNl90bmxfaW9jdGwoKSBpcyB1c2VkIGZvciBtYW5hZ2luZyBJUHY2IHR1bm5lbHNcXG4xNjMzOlxcdCAqICAgZnJvbSB1c2Vyc3BhY2UuXFxuMTYzNDpcXHQgKlxcbjE2MzU6XFx0ICogICBUaGUgcG9zc2libGUgY29tbWFuZHMgYXJlIHRoZSBmb2xsb3dpbmc6XFxuMTYzNjpcXHQgKiAgICAgJVNJT0NHRVRUVU5ORUw6IGdldCB0dW5uZWwgcGFyYW1ldGVycyBmb3IgZGV2aWNlXFxuMTYzNzpcXHQgKiAgICAgJVNJT0NBRERUVU5ORUw6IGFkZCB0dW5uZWwgbWF0Y2hpbmcgZ2l2ZW4gdHVubmVsIHBhcmFtZXRlcnNcXG4xNjM4OlxcdCAqICAgICAlU0lPQ0NIR1RVTk5FTDogY2hhbmdlIHR1bm5lbCBwYXJhbWV0ZXJzIHRvIHRob3NlIGdpdmVuXFxuMTYzOTpcXHQgKiAgICAgJVNJT0NERUxUVU5ORUw6IGRlbGV0ZSB0dW5uZWxcXG4xNjQwOlxcdCAqXFxuMTY0MTpcXHQgKiAgIFRoZSBmYWxsYmFjayBkZXZpY2UgXFxcImlwNnRubDBcXFwiLCBjcmVhdGVkIGR1cmluZyBtb2R1bGVcXG4xNjQyOlxcdCAqICAgaW5pdGlhbGl6YXRpb24sIGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBvdGhlciB0dW5uZWwgZGV2aWNlcy5cXG4xNjQzOlxcdCAqXFxuMTY0NDpcXHQgKiBSZXR1cm46XFxuMTY0NTpcXHQgKiAgIDAgb24gc3VjY2VzcyxcXG4xNjQ2OlxcdCAqICAgJS1FRkFVTFQgaWYgdW5hYmxlIHRvIGNvcHkgZGF0YSB0byBvciBmcm9tIHVzZXJzcGFjZSxcXG4xNjQ3OlxcdCAqICAgJS1FUEVSTSBpZiBjdXJyZW50IHByb2Nlc3MgaGFzbid0ICVDQVBfTkVUX0FETUlOIHNldFxcbjE2NDg6XFx0ICogICAlLUVJTlZBTCBpZiBwYXNzZWQgdHVubmVsIHBhcmFtZXRlcnMgYXJlIGludmFsaWQsXFxuMTY0OTpcXHQgKiAgICUtRUVYSVNUIGlmIGNoYW5naW5nIGEgdHVubmVsJ3MgcGFyYW1ldGVycyB3b3VsZCBjYXVzZSBhIGNvbmZsaWN0XFxuMTY1MDpcXHQgKiAgICUtRU5PREVWIGlmIGF0dGVtcHRpbmcgdG8gY2hhbmdlIG9yIGRlbGV0ZSBhIG5vbmV4aXN0aW5nIGRldmljZVxcbjE2NTE6XFx0ICoqL1xcbjE2NTI6XFx0XFxuMTY1MzpcXHRzdGF0aWMgaW50XFxuMTY1NDpcXHRpcDZfdG5sX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxcbjE2NTU6XFx0XFx0XFx0ICAgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxcbjE2NTY6XFx0e1xcbjE2NTc6XFx0XFx0aW50IGVyciA9IDA7XFxuMTY1ODpcXHRcXHRzdHJ1Y3QgaXA2X3RubF9wYXJtIHA7XFxuMTY1OTpcXHRcXHRzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gcDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjQyLjcwNjk3MDA5MloiLCJTZXEiOjgzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg4MjExNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJJ20gcmVmbGVjdGluZyBvbiB0aGUgaW5pdGlhbCBwcm9tcHQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaXA2X3RubF9zaW9jZGV2cHJpdmF0ZWAqKlxuXG5BbHJpZ2h0LCB0aGF0IGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYC4uLiB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWV0aGluZyBpbiBteSBtZW50YWwgbGlicmFyeS4gSSdtIHByZXR0eSBzdXJlIHRoYXQncyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBwcml2YXRlIGlvY3RsIG9wZXJhdGlvbiB3aXRoaW4gdGhlIElQdjYgdHVubmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseS4gR2l2ZW4gdGhlIG5hbWUsIGl0IHNjcmVhbXMgXCJ0dW5uZWxcIiBhbmQgdGhlIFwic2lvY1wiIHN1Z2dlc3RzIHNvY2tldCBpbnRlcmZhY2UgY29udHJvbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBoYW5kbGluZyBzb21lIHZlbmRvci1zcGVjaWZpYyBvciBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gdGhlc2UgdHVubmVscy5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gbXkgdGhvdWdodHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSB0aGUgYHNpdC5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCdzIHdoZXJlIHRoZSBTSVQgKFNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uKSBkcml2ZXIgbGl2ZXMsIGFuZCB0aGF0J3MgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgdGhpbmdzIGxpa2UgaW9jdGwgY2FsbHMgcmVsYXRlZCB0byBJUHY2IHR1bm5lbHMuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcGxhY2UgdG8gcHV0IHRoZSBpb2N0bCBkZWZpbml0aW9ucyBhbmQgaGFuZGxlcnMgZm9yIGFueXRoaW5nIHRvIGRvIHdpdGggSVB2NiB0dW5uZWxsaW5nLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHVzZSBvZiB0aGUgcmVsYXRlZCBpZGVudGlmaWVyIHdpdGhpbiB0aGF0IHNvdXJjZSBmaWxlLiBJdCB3b3VsZCBiZSBteSBwcmltZSBwbGFjZSB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjQ2Ljc5NTE4NjAyNVoiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDg5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTM2OD1zdGF0aWMgaW50XFxubmV0L2lwdjYvc2l0LmM6MTM2OTppcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxubmV0L2lwdjYvc2l0LmMtMTM3MC1cXHRcXHRcXHQgICAgdm9pZCBfX3VzZXIgKmRhdGEsIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xMzc2LVxcdGNhc2UgU0lPQ0RFTFRVTk5FTDpcXG5uZXQvaXB2Ni9zaXQuYzoxMzc3OlxcdFxcdHJldHVybiBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoZGV2LCBpZnIsIGRhdGEsIGNtZCk7XFxubmV0L2lwdjYvc2l0LmMtMTM3OC1cXHRjYXNlIFNJT0NHRVRQUkw6XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xMzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcDZfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0MDAtXFx0Lm5kb19zdGFydF94bWl0XFx0PSBzaXRfdHVubmVsX3htaXQsXFxubmV0L2lwdjYvc2l0LmM6MTQwMTpcXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxcbm5ldC9pcHY2L3NpdC5jLTE0MDItXFx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjQ2Ljg0MjI0MTU4MloiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkyMTM3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJUHY2IFR1bm5lbCBEcml2ZXIgSXNzdWVzKipcblxuUmlnaHQsIGxldCdzIHNlZS4gSSd2ZSBnb3QgYGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgYW5kIGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYCBmbGFnZ2VkIGluIG15IG1pbmQuIFNvdW5kcyBsaWtlIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBwcm9ibGVtcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gcHJpdmF0ZSBkZXZpY2UgY29udHJvbCBpb2N0bHMgd2l0aGluIElQdjYgdHVubmVsIGRyaXZlcnMuIEl0J3MgYSBiaXQgb2YgYSBodW5jaCwgYnV0IHRoZXNlIHNwZWNpZmljIHN5bWJvbHMganVtcCBvdXQgYXMgYSBzdGFydGluZyBwb2ludC5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgaXBfdHVubmVsLmNgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHR1bm5lbCBkcml2ZXIgZnVuY3Rpb25hbGl0eSBpcyBob3VzZWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgc2lvY2RldnByaXZhdGVgIGhhbmRsaW5nIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGFueSB1bnVzdWFsIGFjY2VzcyBwYXR0ZXJucywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhbGxvdyBmb3IgaW1wcm9wZXIgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgdHVubmVsIGluc3RhbmNlcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBkdXJpbmcgaW9jdGwgY2FsbHMuIFRoYXQgZmlsZSBpcyBwcm9iYWJseSBteSBiZXN0IGxlYWQgdG8gaW52ZXN0aWdhdGUgdGhlc2UgZmxhZ2dlZCBzeW1ib2xzLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBwcml2YXRlIGlvY3RsJ3MgaGFuZGxpbmcgd2l0aGluIGFuIElQdjYgdHVubmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDAwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjUwLjIzNDM4MjE0OFoiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MjM1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmM9MTA0MD1FWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcGFybV90b191c2VyKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQxLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNDI6aW50IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDQzLVxcdFxcdFxcdCAgICAgdm9pZCBfX3VzZXIgKmRhdGEsIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDU0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6NTAuMjgxMzE5MDY1WiIsIlNlcSI6ODcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTIzNDkzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIEV4cG9ydCoqXG5cbkFscmlnaHQsIHNvIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIGlzIGV4cG9ydGVkLCBodWg/IEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgZmxhZyBpbiBteSBtaW5kLiBFeHBvcnRlZCBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBcInByaXZhdGVcIiBpbiB0aGUgbmFtZSwgYWx3YXlzIHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gVGhleSdyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMsIG9yIG1heWJlIGp1c3QgYXJlYXMgd2hlcmUgZnV0dXJlIGNoYW5nZXMgY291bGQgcmlwcGxlIG91dCB1bmV4cGVjdGVkbHkuXG5cbk15IG5leHQgc3RlcCwgb2J2aW91c2x5LCBpcyB0byBwaW4gZG93biB3aGVyZSB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSwgaXRzIGltcGFjdCwgYW5kIHdoZXRoZXIgaXQncyBhZGhlcmluZyB0byBlc3RhYmxpc2hlZCBpbnRlcmZhY2VzLiBJJ2xsIGJlIHNpZnRpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzLCBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhbmQgd2h5IGl0J3MgYmVlbiBleHBvc2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgd2hldGhlciBJIG5lZWQgdG8gdGFrZSBmdXJ0aGVyIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo1OTo1My4zNzM2NzEzNDlaIiwiU2VxIjo4OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzc1Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9OTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4Ny1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGlwZ3JlX3htaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTg4OlxcdC5uZG9fc2lvY2RldnByaXZhdGVcXHQ9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcXG5uZXQvaXB2NC9pcF9ncmUuYy05ODktXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNDA9RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0MS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDQyOmludCBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0My1cXHRcXHRcXHQgICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1NC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2lvY2RldnByaXZhdGUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNTYtXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz00MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2dGlfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTQyMC1cXHQubmRvX3N0YXJ0X3htaXRcXHQ9IHZ0aV90dW5uZWxfeG1pdCxcXG5uZXQvaXB2NC9pcF92dGkuYzo0MjE6XFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcXG5uZXQvaXB2NC9pcF92dGkuYy00MjItXFx0Lm5kb19jaGFuZ2VfbXR1XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0zODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzgzLVxcdC5uZG9fc3RhcnRfeG1pdFxcdD0gaXBpcF90dW5uZWxfeG1pdCxcXG5uZXQvaXB2NC9pcGlwLmM6Mzg0OlxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjQvaXBpcC5jLTM4NS1cXHQubmRvX2NoYW5nZV9tdHUgPSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NTk6NTMuNDIxNDUyNzE2WiIsIlNlcSI6ODksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTUzODQ2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSVAgVHVubmVsIERldmljZSBDb250cm9sIC0gQSBRdWljayBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSB0aGlua2luZyBhYm91dCBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYC4uLiByaWdodCwgdGhhdCdzIHRoZSBjb250cm9sIGludGVyZmFjZSwgdGhlIHN5c3RlbSBjYWxsLCBmb3Igc2V0dGluZyB1cCBhbmQgbWFuYWdpbmcgdGhlc2UgSVAgdHVubmVscy4gU28sIGl0J3MgdXNlZCBieSB0aGUgbWFqb3IgcGxheWVyczogYGlwZ3JlYCAoR1JFIHR1bm5lbHMpLCBgdnRpYCAoVmlydHVhbCBUdW5uZWwgSW50ZXJmYWNlIC0gYSBrZXkgY29tcG9uZW50IGZvciBWUE5zLCBlc3BlY2lhbGx5IGluIG9sZGVyIHNldHVwcywgSSB0aGluayksIGFuZCBvZiBjb3Vyc2UsIGBpcGlwYCAodGhlIGJhc2ljIElQLWluLUlQIGVuY2Fwc3VsYXRpb24pLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZXkgYWxsIG5lZWQgYSB3YXkgdG8gcGFzcyBwcml2YXRlLCBkZXZpY2Utc3BlY2lmaWMgZGF0YSB0byB0aGUga2VybmVsIGZvciBjb25maWd1cmF0aW9uLCBhbmQgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGF0IG1lY2hhbmlzbS5cblxuQnV0LCBhIHRob3VnaHQgZW1lcmdlczsgd2hhdCBhYm91dCBgaXA2Z3JlYD8gSSBjYW4ndCBxdWl0ZSByZWNhbGwgaWYgaXQgdXNlcyB0aGUgc2FtZSBpbnRlcmZhY2U7IEkgYXNzdW1lIHNvLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBjYXNlLiBUaGUgdW5kZXJseWluZyB0dW5uZWwgaW1wbGVtZW50YXRpb25zLCB3aGlsZSBkaWZmZXJlbnQgYmVjYXVzZSBvZiBJUHY2IGhlYWRlcnMsIHByb2JhYmx5IHN0aWxsIGxldmVyYWdlIGBpcF90dW5uZWxfc2lvY2RldnByaXZhdGVgIGZvciB0aGUgY29yZSBzZXR1cCBhbmQgY29udHJvbCBvcGVyYXRpb25zLiBJJ2QgaGF0ZSB0byBiZSB3cm9uZyBoZXJlIGFuZCBJJ20gcHJldHR5IHN1cmUgSSBkaWQgYSBzaW1pbGFyIGluc3BlY3Rpb24gb24gdGhhdCBhIGZldyB5ZWFycyBhZ28uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQxMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjU3LjEzNjg0MDczMloiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTg3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTUtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNTY6c3RhdGljIGludCBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTE0MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xNDE3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXA2Z3JlX3R1bm5lbF94bWl0LFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxNDE4OlxcdC5uZG9fc2lvY2RldnByaXZhdGVcXHQ9IGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTktXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcDZfdG5sX2NoYW5nZV9tdHUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjU5OjU3LjE4NDYwMzA3OVoiLCJTZXEiOjkxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE0Mjc3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgR1JFIFR1bm5lbCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgcmVsYXRlZCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgc2hvdWxkIG1hcCBvdXQgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgYW5kIGludGVyYWN0IHdpdGggdHVubmVscyB0byBnZXQgdGhlIGZ1bGwgdmlldy5cblxuSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgYGlwZ3JlX25ld2xpbmtgLCBgaXBncmVfY2hhbmdlbGlua2BcbiogICBgZXJzcGFuX25ld2xpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgXG4qICAgYHZ0aV9uZXdsaW5rYCwgYHZ0aV9jaGFuZ2VsaW5rYFxuKiAgIGBpcGlwX25ld2xpbmtgLCBgaXBpcF9jaGFuZ2VsaW5rYFxuKiAgIGBpcDZncmVfbmV3bGlua2AsIGBpcDZncmVfY2hhbmdlbGlua2BcbiogICBgaXA2ZXJzcGFuX25ld2xpbmtgLCBgaXA2ZXJzcGFuX2NoYW5nZWxpbmtgXG4qICAgYGlwNl90bmxfbmV3bGlua2AsIGBpcDZfdG5sX2NoYW5nZWxpbmtgXG4qICAgYGlwaXA2X25ld2xpbmtgLCBgaXBpcDZfY2hhbmdlbGlua2BcbiogICBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2BcbiogICBgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlYFxuKiAgIGBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlYFxuKiAgIGBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYFxuKiAgIGBpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVgXG4qICAgYGlwaXBfdHVubmVsX2N0bGBcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgaXBpcF90dW5uZWxfY3RsYC4uLiBpc24ndCB0aGF0IGp1c3QgYSB3cmFwcGVyIGZvciBgbmRvX3R1bm5lbF9jdGxgIGZvciB0aGUgYGlwaXBgIHR1bm5lbCB0eXBlPyBUaGF0J3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoZXJlJ3MgYSBjb21tb24gY29udHJvbCBwYXRoLCBgbmRvX3R1bm5lbF9jdGxgLCBhbmQgdGhlIHR1bm5lbC1zcGVjaWZpYyByb3V0aW5lcyB3b3VsZCBob29rIGludG8gaXQuXG5cbk5vdywgdGhlIG5hdHVyYWwgcXVlc3Rpb24gaXM6IEFyZSB0aGVyZSBvdGhlciB0dW5uZWwgdHlwZXMgdXNpbmcgdGhlIGBuZG9fdHVubmVsX2N0bGAgbWVjaGFuaXNtPyBLbm93aW5nIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDYyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjAyLjQ5ODg4NTEyOVoiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTc2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX3R1bm5lbF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05OTEtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYzo5OTI6XFx0Lm5kb190dW5uZWxfY3RsXFx0XFx0PSBpcGdyZV90dW5uZWxfY3RsLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5My19O1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA0Mj1pbnQgaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0OS1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDUwOlxcdGVyciA9IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3R1bm5lbF9jdGwoZGV2LCBcXHUwMDI2cCwgY21kKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDUxLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2ICFpcF90dW5uZWxfcGFybV90b191c2VyKGRhdGEsIFxcdTAwMjZwKSlcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jPTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZ0aV9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNDI0LVxcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwX3Z0aS5jOjQyNTpcXHQubmRvX3R1bm5lbF9jdGxcXHQ9IHZ0aV90dW5uZWxfY3RsLFxcbm5ldC9pcHY0L2lwX3Z0aS5jLTQyNi19O1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0zODctXFx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXFxubmV0L2lwdjQvaXBpcC5jOjM4ODpcXHQubmRvX3R1bm5lbF9jdGxcXHQ9IGlwaXBfdHVubmVsX2N0bCxcXG5uZXQvaXB2NC9pcGlwLmMtMzg5LVxcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQ3OD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnYpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDk0LVxcbm5ldC9pcHY0L2lwbXIuYzo0OTU6XFx0aWYgKCF0dW5uZWxfZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fdHVubmVsX2N0bClcXG5uZXQvaXB2NC9pcG1yLmMtNDk2LVxcdFxcdGdvdG8gb3V0O1xcbm5ldC9pcHY0L2lwbXIuYzo0OTc6XFx0ZXJyID0gdHVubmVsX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3R1bm5lbF9jdGwodHVubmVsX2RldiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBtci5jLTQ5OC1cXHRcXHRcXHRTSU9DQUREVFVOTkVMKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy01MTQtXFx0XFx0ZGV2X2Nsb3NlKG5ld19kZXYpO1xcbm5ldC9pcHY0L2lwbXIuYzo1MTU6XFx0XFx0dHVubmVsX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3R1bm5lbF9jdGwodHVubmVsX2RldiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBtci5jLTUxNi1cXHRcXHRcXHRcXHRTSU9DREVMVFVOTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTQ6MDA6MDIuNTQ3Nzg4MzQ2WiIsIlNlcSI6OTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTk4OTEzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFR1bm5lbCBDb250cm9sIEZvY3VzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoaXMgZG93biwgYW5kIGl0IGxvb2tzIGxpa2UgYGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgdWx0aW1hdGVseSBmdW5uZWxzIGl0cyB3YXkgdG8gYG5kb190dW5uZWxfY3RsYC4gUmlnaHQsIHNvIHRoYXQncyB0aGUgY29tbW9uIGludGVyZmFjZS4gTm93LCB0aGUgcmVhbCBoZWF2eSBsaWZ0aW5nLCB0aGUgYWN0dWFsIGRldmljZS1zcGVjaWZpYyBoYW5kbGluZywgdGhhdCdzIGJlaW5nIGRvbmUgYnkgYGlwZ3JlX3R1bm5lbF9jdGxgLCBgdnRpX3R1bm5lbF9jdGxgLCBhbmQgYGlwaXBfdHVubmVsX2N0bGAuIEl0IG1ha2VzIG1vcmUgc2Vuc2UsIGZyb20gYSBjbGFyaXR5IGFuZCBmb2N1cyBwZXJzcGVjdGl2ZSwgdG8gcHV0IHRob3NlIGRldmljZS1zcGVjaWZpYyBoYW5kbGVycyBhcyB0aGUgZm9jYWwgcG9pbnRzLiBMZXQncyBtYWtlIHRoYXQgYWRqdXN0bWVudCBhbmQgdXBkYXRlIHRoZSBzeW1ib2wgbGlzdCBhY2NvcmRpbmdseS4gQW5kIGFzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgSVB2NiBzaWRlIG9mIHRoaW5ncy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AgaXMgYmVoYXZpbmcgc2ltaWxhcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDowNi4yMDc2ODIzNzVaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjI3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM4PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTUtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNTY6c3RhdGljIGludCBpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNTctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTE0MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xNDE3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXA2Z3JlX3R1bm5lbF94bWl0LFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxNDE4OlxcdC5uZG9fc2lvY2RldnByaXZhdGVcXHQ9IGlwNmdyZV90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE0MTktXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcDZfdG5sX2NoYW5nZV9tdHUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjA2LjI1ODMxNTgxMloiLCJTZXEiOjk1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM1MTQ4MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGluayBIYW5kbGVyKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRpcmVjdCBoYW5kbGVyIG9mIHNvbWUgc29ydCwgcHJvYmFibHkgcmVsYXRlZCB0byBuZXR3b3JrIGxpbmtzLiBUaGUga2V5IGhlcmUsIHRoZSBcImZvY3VzIHN5bWJvbHNcIiBhcyB0aGV5J3JlIGNhbGxlZCwgYXJlIGFsbCB0aGVzZSBmdW5jdGlvbnMgd2l0aCBgbmV3bGlua2AgYW5kIGBjaGFuZ2VsaW5rYCBhdCB0aGUgZW5kLCBhbG9uZyB3aXRoIGEgZmV3IGNvbnRyb2wgYW5kIHByaXZhdGUgaW50ZXJmYWNlIGNhbGxzLiAgV2UndmUgZ290IGEgbG90IG9mIHRoZW0sIGNvdmVyaW5nIGEgdmFyaWV0eSBvZiB0dW5uZWxpbmcgcHJvdG9jb2xzOiBuZXRraXQsIGdyZSwgZXJzcGFuLCB2dGksIGlwaXAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy4gVGhhdCdzIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgc2V0LlxuXG5OZXh0LCB3ZSBzaG91bGQgY2hlY2sgd2hhdCBjb25maWd1cmF0aW9ucyB3aWxsIGNvbXBpbGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBXZSBoYXZlIGEgc2V0IG9mIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byBsb29rIGF0IC0gYE5FVEtJVGAsIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBgSVBWNl9TSVRgLCBhbmQgYElQVjZfVlRJYCBhbmQgYE5FVF9JUFZUSWAuIFNpbmNlIGBORVRfSVBWVElgIGlzIHByZXNlbnQsIGl0IGxvb2tzIGxpa2UgdGhhdCBpcyB0aGUgY29ycmVjdCBvbmUgdG8gZmluZCB0aGUgdnRpIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuR2l2ZW4gdGhhdCBgTkVUX0lQVlRJYCBjb25maWcgaXMgdXNlZCBmb3IgdnRpLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBzZXR0aW5ncyBvZiB0aGUgdHVubmVsLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSAtIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGUgdG8gdGhlIGNvZGUgYW5kIHdoYXQgdGhleSBhY3R1YWxseSBlbmFibGUuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyB3aG9sZSB0aGluZyBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDoxMS41OTM0NjY3OFoiLCJTZXEiOjk2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMjE5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUFZUSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MjY4PWNvbmZpZyBTWU5fQ09PS0lFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDMtXFxubmV0L2lwdjQvS2NvbmZpZzozMDQ6Y29uZmlnIE5FVF9JUFZUSVxcbm5ldC9pcHY0L0tjb25maWctMzA1LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQOiB0dW5uZWxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjExLjYzODQ5NDc1OFoiLCJTZXEiOjk3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY4NjcxMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFR1bm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB5ZXMsIGRlZmluaXRlbHksIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTkVUX0lQVlRJYCBoZXJlLiBUaGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYXkuXG5cblJpZ2h0LCBzbyBgaXBfdHVubmVsLmNgIGdldHMgYnVpbHQgd2hlbiBgTkVUX0lQX1RVTk5FTGAgaXMgZW5hYmxlZC4gQW5kIGBORVRfSVBfVFVOTkVMYCBpcywgaW4gdHVybiwgc2VsZWN0ZWQgYnkgYSBudW1iZXIgb2Ygb3RoZXIgY29uZmlncyBsaWtlIGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBhbmQgb2YgY291cnNlLCBgTkVUX0lQVlRJYCDigJMgdGhlIG9uZSB3ZSdyZSBpbnRlcmVzdGVkIGluLiBUaGVuIHdlIGhhdmUgYGlwNl90dW5uZWwuY2AgYnVpbHQgYnkgYElQVjZfVFVOTkVMYC4gYGlwNl9ncmUuY2Agd2hlbiBgSVBWNl9HUkVgIGlzIGVuYWJsZWQuIEFuZCBgc2l0LmNgIHdpdGggYElQVjZfU0lUYCBlbmFibGVkLiBGaW5hbGx5LCBgbmV0a2l0LmNgIGlzIGNvbXBpbGVkIHdoZW4gYE5FVEtJVGAgaXMgZW5hYmxlZC5cblxuU28sIHN1bW1pbmcgaXQgdXAsIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbWUgdG8gbWluZCBhcmU6IGBORVRLSVRgLCBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgYE5FVF9JUFZUSWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCwgd2hpbGUgaXQncyBub3QgZXhwbGljaXRseSBpbiB0aGUgb3JpZ2luYWwgdGV4dCwgSSdtIGFzc3VtaW5nIHRoYXQgc2luY2UgVlRJIGlzIG1lbnRpb25lZCwgYElQVjZfVlRJYC5cblxuSG9sZCBvbiwgSSBzdXNwZWN0IGBpcDZfdHVubmVsLmNgIG1pZ2h0IGJlIGNvbXBpbGVkIGZvciBvdGhlciByZWFzb25zIGFzIHdlbGwsIGJ1dCBgSVBWNl9UVU5ORUxgIGlzIGl0cyBtYWluIHRyaWdnZXIuIEl0J3MgYmVzdCB0byBjb25maXJtIHRoaXMgYW5kIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTAxNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDoxNi44MDcxNjgwMTZaIiwiU2VxIjo5OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODEyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90dW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9NDE9b2JqLSQoQ09ORklHX0lQVjZfU0lUKSArPSBzaXQub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgKz0gaXA2X3R1bm5lbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX0lQVjZfR1JFKSArPSBpcDZfZ3JlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTQ6MDA6MTYuODUzOTg3MjQzWiIsIlNlcSI6OTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTAwNDc4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NCBNYWtlZmlsZSoqXG5cblllcy4gKlRoYXQncyB0aGUgZGlyZWN0aW9uIEkgbmVlZCB0byBnbyBpbiB0byBmaWd1cmUgb3V0IHRoaXMgaXNzdWUuKiBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgaXMgbGlrZWx5IGluIGBuZXQvaXB2NC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY3J1Y2lhbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NCBzdGFjayBhcmUgZGVmaW5lZC4gKlRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlKi4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHJlbGF0ZWQgbW9kdWxlcyB0byBzZWUgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGZhbGxpbmcgYXBhcnQsIHBlcmhhcHMgaW4gdGVybXMgb2YgbGlua2luZywgY29uZmlndXJhdGlvbiwgb3IgZGVwZW5kZW5jeSByZXNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTczNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjE5LjY0NDAzNzc0NVoiLCJTZXEiOjEwMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Nzg4NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNjpcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNy1cXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXFxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTQ6MDA6MTkuNjkwODM0NTcyWiIsIlNlcSI6MTAxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU4NTc2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBOZXR3b3JrIFR1bm5lbCBDb25maWd1cmF0aW9ucyoqXG5cblJpZ2h0LCBnb3QgaXQuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGxvb2tpbmcgYXQgYXJlOiBgTkVUS0lUYCwgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIGBORVRfSVBWVElgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBgSVBWNl9TSVRgLCBhbmQgYElQVjZfVlRJYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBzZXQgb2YgdHVubmVsIHR5cGVzLCBjb3ZlcmluZyBJUHY0IGFuZCBJUHY2IHZhcmlhdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgd2UgYXJlbid0IHVzaW5nIHRoZSBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB2YXJpYWJsZSBpbiBhbiB1bmV4cGVjdGVkIHBsYWNlLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgaW4gdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjEzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjIzLjA0OTQxNDIzWiIsIlNlcSI6MTAyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NjU0MzY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbGltaXRfaGVhZHJvb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD02Mjk9aW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNjMxLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo2MzI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNjMzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD02NDU9c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDcte1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo2NDg6XFx0aGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC02NDktXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxOS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozMjA6XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzIxLVxcdG10dSAtPSB0X2hsZW4gKyAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTEyMj1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTQxLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTQyOlxcdFxcdFxcdGRzdF9sZW4gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20ocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxubmV0L2lwdjYvaXA2X2dyZS5jLTExNDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdF9obGVuKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDc0PXN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTUyNC1cXHRcXHRpZiAodGRldikge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTI1OlxcdFxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tICtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTEwOTU9c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xMTMzLVxcdH1cXG5uZXQvaXB2Ni9zaXQuYzoxMTM0OlxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xcbm5ldC9pcHY2L3NpdC5jLTExMzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNDowMDoyNC44MzU5NjI0NTJaIiwiU2VxIjoxMDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTE4NzYzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUdW5uZWwgSGVhZHJvb20gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0aWdodGVuaW5nIHVwIGhlYWRyb29tIGxpbWl0YXRpb25zIGZvciBhIGZldyB0dW5uZWwgdHlwZXM6IG5ldGtpdCwgaXAgdHVubmVscy4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gYWRkcmVzcy4gVGhlIGNoYW5nZSBzZWVtcyBzb3VuZCwgc28gSSdsbCBiZSBtYXJraW5nIHRoaXMgYXMgV29ydGhGdXp6aW5nPXRydWUuXG5cbk5vdywgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHRvdWNoZWQ6IGBORVRLSVRgLCBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgYE5FVF9JUFZUSWAsIGBJUFY2X0dSRWAsIGBJUFY2X1RVTk5FTGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9WVElgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgYXJlYXMgdG8gZm9jdXMgb24uXG5cbk15IGF0dGVudGlvbiBpcyBiZWluZyBkcmF3biB0byBhIHByZXR0eSBsb25nIGxpc3Qgb2Ygc3ltYm9scyByZWxhdGVkIHRvIHRoZSBuZXcgYW5kIGNoYW5nZSBsaW5rcywgYW5kIHR1bm5lbCBjb250cm9sOiBgbmV0a2l0X25ld19saW5rYCwgYG5ldGtpdF9jaGFuZ2VfbGlua2AsIGFuZCBvbiB0aHJvdWdoIHNldmVyYWwgbW9yZSBmb3IgR1JFLCBFUlNQQU4sIFZUSSwgSVBJUCwgYW5kIHRoZWlyIElQdjYgY291bnRlcnBhcnRzLCBhbG9uZyB3aXRoIHRoZSB2YXJpb3VzIHR1bm5lbCBjb250cm9sIG9wZXJhdGlvbnMuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gSSBzZWUgdGhhdCBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAgaXMgYWxzbyBtb2RpZmllZCB0byB1c2UgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCdzIGRpZyBpbnRvIHRob3NlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjMwLjQ0Nzg0MjA1NFoiLCJTZXEiOjEwNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQzNDMxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX2Fkal9oZWFkcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTYzMj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTY0NC1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NjQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTY0Ni1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3MT12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NTMtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjU0OlxcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBoZWFkcm9vbSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjU1LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NjY5PXZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg0NS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo4NDY6XFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtODQ3LVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTEwOTc9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3Mi1cXHRcXHRcXHQrIGRzdC1cXHUwMDNlaGVhZGVyX2xlbiArIHQtXFx1MDAzZWhsZW47XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEyNzM6XFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyNzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjMyLjMzMjE5MTg1MVoiLCJTZXEiOjEwNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMjQzNTI5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSGVhZHJvb20gQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYCBpcyB1c2VkIGluIHNldmVyYWwgdHJhbnNtaXQgKGB4bWl0YCkgZnVuY3Rpb25zOiBgaXBfbWRfdHVubmVsX3htaXRgLCBgaXBfdHVubmVsX3htaXRgLCBhbmQgYGlwNl90bmxfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSB0aG9zZSBgeG1pdGAgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGhlYWRyb29tIGxpbWl0YXRpb25zIGR1cmluZyAqYm90aCogY29uZmlndXJhdGlvbiAobmV3bGluaywgY2hhbmdlbGluaywgaW9jdGwpICphbmQqIHRyYW5zbWlzc2lvbiAoeG1pdCkuXG5cbkZ1enppbmcgdGhlIGB4bWl0YCBmdW5jdGlvbnMgZGlyZWN0bHkgKmNvdWxkKiBiZSBmcnVpdGZ1bCwgYnV0IGFzIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhleSBtaWdodCBub3QgYmUgdGhlIGJlc3QgdGFyZ2V0IGFjY29yZGluZyB0byB0aGUgcHJvbXB04oCZcyBndWlkYW5jZS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gXCJBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGRpcmVjdCBmdXp6aW5nIG9mIGhvdCBwYXRocyBpcyBwcm9uZSB0byBpbWJhbGFuY2VzIGFuZCBpbmVmZmljaWVudCB0ZXN0IGNvdmVyYWdlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBwcm9tcHQgYWR2aXNlcyBhZ2FpbnN0IGRpcmVjdGx5IGZ1enppbmcgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgdGhlIGB4bWl0YCBmdW5jdGlvbnMgYXJlIGhvdC1wYXRoLCBJ4oCZbGwgYXZvaWQgaW5jbHVkaW5nIHRoZW0uIFRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyDigJMgYG5ld2xpbmtgLCBgY2hhbmdlbGlua2AsIGFuZCBgaW9jdGxgIOKAkyBhcmUgaWRlYWwgdGFyZ2V0cywgYXMgdGhleSBhcmUgbm90IGhvdC1wYXRoIGFuZCByZXByZXNlbnQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGUgZXF1YXRpb24uXG5cbkxldOKAmXMgcmV2aWV3IHRoZSBwcm92aWRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGFyZSB0aGVyZTpcblxuYG5ldGtpdF9uZXdfbGlua2BcbmBuZXRraXRfY2hhbmdlX2xpbmtgXG5gaXBncmVfbmV3bGlua2BcbmBpcGdyZV9jaGFuZ2VsaW5rYFxuYGVyc3Bhbl9uZXdsaW5rYFxuYGVyc3Bhbl9jaGFuZ2VsaW5rYFxuYHZ0aV9uZXdsaW5rYFxuYHZ0aV9jaGFuZ2VsaW5rYFxuYGlwaXBfbmV3bGlua2BcbmBpcGlwX2NoYW5nZWxpbmtgXG5gaXA2Z3JlX25ld2xpbmtgXG5gaXA2Z3JlX2NoYW5nZWxpbmtgXG5gaXA2ZXJzcGFuX25ld2xpbmtgXG5gaXA2ZXJzcGFuX2NoYW5nZWxpbmtgXG5gaXA2X3RubF9uZXdsaW5rYFxuYGlwNl90bmxfY2hhbmdlbGlua2BcbmBpcGlwNl9uZXdsaW5rYFxuYGlwaXA2X2NoYW5nZWxpbmtgXG5gaXBncmVfdHVubmVsX2N0bGBcbmB2dGlfdHVubmVsX2N0bGBcbmBpcGlwX3R1bm5lbF9jdGxgXG5gaXA2Z3JlX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWBcbmBpcDZfdG5sX3Npb2NkZXZwcml2YXRlYFxuYGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZWBcblxuVGhpcyBsb29rcyBsaWtlIGEgcm9idXN0IGxpc3QgY292ZXJpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBtYWtpbmcgaXQgYSBzb3VuZCBiYXNpcyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJ4oCZbGwgcXVpY2tseSBjaGVjayBpZiBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAgaXMgdXNlZCBhbnl3aGVyZSAqZWxzZSouIE5vLCBpdCdzIG9ubHkgaW4gdGhvc2UgdGhyZWUgdHJhbnNtaXQgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcblxuYE5FVEtJVGBcbmBORVRfSVBJUGBcbmBORVRfSVBHUkVgXG5gTkVUX0lQVlRJYFxuYElQVjZfR1JFYFxuYElQVjZfVFVOTkVMYFxuYElQVjZfU0lUYFxuYElQVjZfVlRJYFxuXG5BbmQgdGhlIGRlcGVuZGVuY2llcz8gYE5FVF9JUF9UVU5ORUxgIGlzIHNlbGVjdGVkIGJ5IGBORVRfSVBJUGAsIGBORVRfSVBHUkVgLCBhbmQgYE5FVF9JUFZUSWAuIGBJUFY2YCBpcyByZXF1aXJlZCBmb3IgYElQVjZfR1JFYCwgYElQVjZfVFVOTkVMYCwgYElQVjZfU0lUYCwgYW5kIGBJUFY2X1ZUSWAuIEdvb2QsIHRoaXMgY29uZmlybXMgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSBhbmFseXNpcyBhbmQgY29uc2lkZXJhdGlvbnMgb2YgdGhlIHByb21wdCdzIHN1Z2dlc3Rpb25zLCBJJ2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgYW5hbHlzaXMgd2FycmFudHMgZnV6emluZyBvZiB0aGVzZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzNDcsIk91dHB1dFRva2VucyI6Mzc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE0OjAwOjQyLjY1NjU0ODQ4OFoiLCJTZXEiOjEwNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODEzMDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUS0lUXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBWVElcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVlRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0a2l0X25ld19saW5rXCIsXG4gICAgXCJuZXRraXRfY2hhbmdlX2xpbmtcIixcbiAgICBcImlwZ3JlX25ld2xpbmtcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwidnRpX25ld2xpbmtcIixcbiAgICBcInZ0aV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwX25ld2xpbmtcIixcbiAgICBcImlwaXBfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fbmV3bGlua1wiLFxuICAgIFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNl90bmxfbmV3bGlua1wiLFxuICAgIFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwNl9uZXdsaW5rXCIsXG4gICAgXCJpcGlwNl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJ2dGlfdHVubmVsX2N0bFwiLFxuICAgIFwiaXBpcF90dW5uZWxfY3RsXCIsXG4gICAgXCJpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcDZfdG5sX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWF4aW11bSBoZWFkcm9vbSBsaW1pdCBmb3IgbmV0a2l0IGFuZCBJUCB0dW5uZWxzIHRvIHByZXZlbnQgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdHVubmVsIGRldmljZXMgdmlhIG5ldGxpbmsgKG5ld2xpbmsvY2hhbmdlbGluaykgYW5kIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29uZmlndXJhdGlvbiBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUS0lUXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBWVElcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVlRJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0a2l0X25ld19saW5rXCIsXG4gICAgXCJuZXRraXRfY2hhbmdlX2xpbmtcIixcbiAgICBcImlwZ3JlX25ld2xpbmtcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9uZXdsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwidnRpX25ld2xpbmtcIixcbiAgICBcInZ0aV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwX25ld2xpbmtcIixcbiAgICBcImlwaXBfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZlcnNwYW5fbmV3bGlua1wiLFxuICAgIFwiaXA2ZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNl90bmxfbmV3bGlua1wiLFxuICAgIFwiaXA2X3RubF9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGlwNl9uZXdsaW5rXCIsXG4gICAgXCJpcGlwNl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJ2dGlfdHVubmVsX2N0bFwiLFxuICAgIFwiaXBpcF90dW5uZWxfY3RsXCIsXG4gICAgXCJpcDZncmVfdHVubmVsX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcDZfdG5sX3Npb2NkZXZwcml2YXRlXCIsXG4gICAgXCJpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWF4aW11bSBoZWFkcm9vbSBsaW1pdCBmb3IgbmV0a2l0IGFuZCBJUCB0dW5uZWxzIHRvIHByZXZlbnQgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdHVubmVsIGRldmljZXMgdmlhIG5ldGxpbmsgKG5ld2xpbmsvY2hhbmdlbGluaykgYW5kIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29uZmlndXJhdGlvbiBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7t7nn[1] Phase: Succeeded StartedAt: 2026-08-01 14:00:53 +0000 UTC FinishedAt: 2026-08-01 14:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 14:00:53 +0000 UTC FinishedAt: 2026-08-01 14:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2] Phase: Succeeded StartedAt: 2026-08-01 14:00:53 +0000 UTC FinishedAt: 2026-08-01 17:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 14:00:53 +0000 UTC FinishedAt: 2026-08-01 17:43:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 14:00:53 +0000 UTC FinishedAt: 2026-08-01 14:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 14:00:53 +0000 UTC FinishedAt: 2026-08-01 14:00:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow7t7nn/series-workflow7t7nn-convert-artifact-1298579235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 14:01:04 +0000 UTC FinishedAt: 2026-08-01 14:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 14:01:04 +0000 UTC FinishedAt: 2026-08-01 14:17:08 +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:*7bacf245-1468-487c-80d8-8e455f30894f,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-workflow7t7nn/series-workflow7t7nn-convert-artifact-1298579235/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": "5a1eb390-2030-4a15-8547-5722f5871544", "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-workflow7t7nn/series-workflow7t7nn-build-action-3978376081/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 14:01:04 +0000 UTC FinishedAt: 2026-08-01 14:16:58 +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:*7bacf245-1468-487c-80d8-8e455f30894f,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-workflow7t7nn/series-workflow7t7nn-convert-artifact-1298579235/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": "5a1eb390-2030-4a15-8547-5722f5871544", "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-workflow7t7nn/series-workflow7t7nn-build-action-3978376081/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 14:17:08 +0000 UTC FinishedAt: 2026-08-01 14:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 14:17:08 +0000 UTC FinishedAt: 2026-08-01 14:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 14:17:08 +0000 UTC FinishedAt: 2026-08-01 14:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 14:17:08 +0000 UTC FinishedAt: 2026-08-01 14:17:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow7t7nn/series-workflow7t7nn-convert-artifact-3335836506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 14:17:19 +0000 UTC FinishedAt: 2026-08-01 14:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 14:17:19 +0000 UTC FinishedAt: 2026-08-01 14:19:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5a1eb390-2030-4a15-8547-5722f5871544,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-workflow7t7nn/series-workflow7t7nn-build-action-3978376081/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-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 14:19:19 +0000 UTC FinishedAt: 2026-08-01 14:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 14:19:19 +0000 UTC FinishedAt: 2026-08-01 14:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 14:19:19 +0000 UTC FinishedAt: 2026-08-01 14:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 14:19:19 +0000 UTC FinishedAt: 2026-08-01 14:39:09 +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:*7bacf245-1468-487c-80d8-8e455f30894f,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-workflow7t7nn/series-workflow7t7nn-convert-artifact-3335836506/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": "45b040fb-6784-4d39-a50e-980a0676378c", "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-workflow7t7nn/series-workflow7t7nn-build-action-1009262654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 14:19:19 +0000 UTC FinishedAt: 2026-08-01 14:38:58 +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:*7bacf245-1468-487c-80d8-8e455f30894f,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-workflow7t7nn/series-workflow7t7nn-convert-artifact-3335836506/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": "45b040fb-6784-4d39-a50e-980a0676378c", "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-workflow7t7nn/series-workflow7t7nn-build-action-1009262654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 14:39:09 +0000 UTC FinishedAt: 2026-08-01 14:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 14:39:09 +0000 UTC FinishedAt: 2026-08-01 14:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 14:39:09 +0000 UTC FinishedAt: 2026-08-01 14:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 14:39:09 +0000 UTC FinishedAt: 2026-08-01 14:40:58 +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:*45b040fb-6784-4d39-a50e-980a0676378c,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-workflow7t7nn/series-workflow7t7nn-build-action-1009262654/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-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 14:41:08 +0000 UTC FinishedAt: 2026-08-01 17:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 14:41:08 +0000 UTC FinishedAt: 2026-08-01 17:43:42 +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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"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:*5a1eb390-2030-4a15-8547-5722f5871544,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45b040fb-6784-4d39-a50e-980a0676378c,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-workflow7t7nn/series-workflow7t7nn-build-action-3978376081/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-workflow7t7nn/series-workflow7t7nn-build-action-1009262654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 14:41:08 +0000 UTC FinishedAt: 2026-08-01 14:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 14:41:08 +0000 UTC FinishedAt: 2026-08-01 14:41:14 +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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"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-workflow7t7nn/series-workflow7t7nn-convert-artifact-1545314319/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 14:41:08 +0000 UTC FinishedAt: 2026-08-01 14:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 14:41:08 +0000 UTC FinishedAt: 2026-08-01 14:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 14:41:08 +0000 UTC FinishedAt: 2026-08-01 14:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 14:41:18 +0000 UTC FinishedAt: 2026-08-01 17:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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":["netkit_new_link","netkit_change_link","ipgre_newlink","ipgre_changelink","erspan_newlink","erspan_changelink","vti_newlink","vti_changelink","ipip_newlink","ipip_changelink","ip6gre_newlink","ip6gre_changelink","ip6erspan_newlink","ip6erspan_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink","ipgre_tunnel_ctl","vti_tunnel_ctl","ipip_tunnel_ctl","ip6gre_tunnel_siocdevprivate","ip6_tnl_siocdevprivate","ipip6_tunnel_siocdevprivate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETKIT","NET_IPIP","NET_IPGRE","NET_IPVTI","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT","IPV6_VTI"],"series_id":"24c5c8ca-e3b9-405e-8997-6e9d61202074","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 14:41:18 +0000 UTC FinishedAt: 2026-08-01 17:43:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5a1eb390-2030-4a15-8547-5722f5871544,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45b040fb-6784-4d39-a50e-980a0676378c,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-workflow7t7nn/series-workflow7t7nn-build-action-3978376081/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-workflow7t7nn/series-workflow7t7nn-build-action-1009262654/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-workflow7t7nn/series-workflow7t7nn-convert-artifact-1545314319/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,}