Name: series-workflow852fd Phase: Succeeded StartedAt: 2026-08-29 10:38:08 +0000 UTC FinishedAt: 2026-08-29 14:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[0] Phase: Succeeded StartedAt: 2026-08-29 10:38:08 +0000 UTC FinishedAt: 2026-08-29 10:52:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 10:38:08 +0000 UTC FinishedAt: 2026-08-29 10:52:56 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "INET" ], "series_id": "0f0d7907-660f-4af4-b80e-f7f3e5452bcf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tun_chr_ioctl", "__tun_chr_ioctl" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDtfX3R1bl9jaHJfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIGZvciB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgaXQgcmVqZWN0cyBjaGFuZ2luZyB0aGUgZGV2aWNlIHR5cGUgaWYgdGhlIG5ldyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBgZGV2LVx1MDAzZWFkZHJfbGVuYCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFxuXG5UaGlzIGNoYW5nZSBwcmV2ZW50cyBhZGRyZXNzIGxlbmd0aCBtaXNtYXRjaCBpc3N1ZXMgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIG9wZXJhdGluZyBvbiBleGlzdGluZyBgZGV2LVx1MDAzZXVjYCBhbmQgYGRldi1cdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgVFVOIGRyaXZlciYjMzk7cyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlOTY5ZmVhODA2YjA3OTc4ZjM2OGU0OThmOWRmZDBmYmMwMmFjOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCA1YTMwMjcwOWE2OGFhLi5lNWI3NzI5YTk2N2RlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtMzM0MSw2ICYjNDM7MzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbiBcdFx0XHRcdCAgIFwmIzM0O0xpbmt0eXBlIHNldCBmYWlsZWQgYmVjYXVzZSBpbnRlcmZhY2UgaXMgdXBcXG5cJiMzNDspO1xuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cdTAwM2VkZXYpIHx8XG4mIzQzO1x0XHRcdCAgICAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpKSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDtfX3R1bl9jaHJfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIFRVTiBkcml2ZXImIzM5O3MgVFVOU0VUTElOSyBpb2N0bCBoYW5kbGVyIChfX3R1bl9jaHJfaW9jdGwpIHRvIHJlamVjdCBsaW5rIHR5cGUgY2hhbmdlcyB3aXRoIC1FQlVTWSBpZiB0aGUgbmV3IGxpbmsgdHlwZSBoYXMgYSBkaWZmZXJlbnQgYWRkcmVzcyBsZW5ndGggd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBvbiB0aGUgbmV0ZGV2aWNlIGFyZSBub3QgZW1wdHkuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZTk2OWZlYTgwNmIwNzk3OGYzNjhlNDk4ZjlkZmQwZmJjMDJhYzlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTA6NTA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDVhMzAyNzA5YTY4YWEuLmU1Yjc3MjlhOTY3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0zMzQxLDYgJiM0MzszMzQxLDEwIEBAIHN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCW5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi0mZ3Q7ZGV2LAogCQkJCSAgICYjMzQ7TGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxuJiMzNDspOwogCQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJfSBlbHNlIGlmICh0dW5fZ2V0X2FkZHJfbGVuKGFyZykgIT0gdHVuLSZndDtkZXYtJmd0O2FkZHJfbGVuICZhbXA7JmFtcDsKJiM0MzsJCQkgICAoIW5ldGRldl91Y19lbXB0eSh0dW4tJmd0O2RldikgfHwKJiM0MzsJCQkgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tJmd0O2RldikpKSB7CiYjNDM7CQkJcmV0ID0gLUVCVVNZOwogCQl9IGVsc2UgewogCQkJcmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsCiAJCQkJCQkgICAgICAgdHVuLSZndDtkZXYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUdW4gRHJpdmVyIENvZGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY2hhbmdlZC4gSSYjMzk7bGwgc3RhcnQgYnkgaW5zcGVjdGluZyB0aGUgZGlmZiB0byBnZXQgYSBnZW5lcmFsIG92ZXJ2aWV3IG9mIHRoZSBtb2RpZmljYXRpb25zLiBUaGVuLCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBhcm91bmQgYGRyaXZlcnMvbmV0L3R1bi5jYC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgbmV0d29yay1yZWxhdGVkIGlzc3VlcywgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBsZXZlcmFnZSBteSB1c3VhbCB3b3JrZmxvdy4gSSB3aWxsIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQsIHRvIHBpbnBvaW50IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMzNDEgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoYXQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzMwOlx0XHRcdFx0YnJlYWs7XG4zMzMxOlx0XHRcdH1cbjMzMzI6XHRcdFx0V1JJVEVfT05DRSh0dW4tXHUwMDNlZ3JvdXAsIGdyb3VwKTtcbjMzMzM6XHRcdFx0ZG9fbm90aWZ5ID0gdHJ1ZTtcbjMzMzQ6XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldiwgXCYjMzQ7Z3JvdXAgc2V0IHRvICV1XFxuXCYjMzQ7LFxuMzMzNTpcdFx0XHRcdCAgIGZyb21fa2dpZChcdTAwMjZpbml0X3VzZXJfbnMsIGdyb3VwKSk7XG4zMzM2Olx0XHRcdGJyZWFrO1xuMzMzNzpcdFxuMzMzODpcdFx0Y2FzZSBUVU5TRVRMSU5LOlxuMzMzOTpcdFx0XHQvKiBPbmx5IGFsbG93IHNldHRpbmcgdGhlIHR5cGUgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi9cbjMzNDA6XHRcdFx0aWYgKHR1bi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkge1xuMzM0MTpcdFx0XHRcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsXG4zMzQyOlx0XHRcdFx0XHQgICBcJiMzNDtMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXFxuXCYjMzQ7KTtcbjMzNDM6XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4zMzQ0Olx0XHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4zMzQ1Olx0XHRcdFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVx1MDAzZWRldikgfHxcbjMzNDY6XHRcdFx0XHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXHUwMDNlZGV2KSkpIHtcbjMzNDc6XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4zMzQ4Olx0XHRcdH0gZWxzZSB7XG4zMzQ5Olx0XHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4zMzUwOlx0XHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuMzM1MTpcdFx0XHRcdHJldCA9IG5vdGlmaWVyX3RvX2Vycm5vKHJldCk7XG4zMzUyOlx0XHRcdFx0aWYgKHJldCkge1xuMzM1MzpcdFx0XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbjMzNTQ6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7UmVmdXNlZCB0byBjaGFuZ2UgZGV2aWNlIHR5cGVcXG5cJiMzNDspO1xuMzM1NTpcdFx0XHRcdFx0YnJlYWs7XG4zMzU2Olx0XHRcdFx0fVxuMzM1NzpcdFx0XHRcdHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9IChpbnQpIGFyZztcbjMzNTg6XHRcdFx0XHR0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuID0gdHVuX2dldF9hZGRyX2xlbih0dW4tXHUwMDNlZGV2LVx1MDAzZXR5cGUpO1xuMzM1OTpcdFx0XHRcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O2xpbmt0eXBlIHNldCB0byAlZFxcblwmIzM0OyxcbjMzNjA6XHRcdFx0XHRcdCAgIHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSk7XG4zMzYxOlx0XHRcdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFLFxuMzM2MjpcdFx0XHRcdFx0XHRcdCB0dW4tXHUwMDNlZGV2KTtcbjMzNjM6XHRcdFx0fVxuMzM2NDpcdFx0XHRicmVhaztcbjMzNjU6XHRcbjMzNjY6XHRcdGNhc2UgVFVOU0VUREVCVUc6XG4zMzY3Olx0XHRcdHR1bi1cdTAwM2Vtc2dfZW5hYmxlID0gKHUzMilhcmc7XG4zMzY4Olx0XHRcdGJyZWFrO1xuMzM2OTpcdFxuMzM3MDpcdFx0Y2FzZSBUVU5TRVRPRkZMT0FEOlxuMzM3MTpcdFx0XHRyZXQgPSBzZXRfb2ZmbG9hZCh0dW4sIGFyZyk7XG4zMzcyOlx0XHRcdGJyZWFrO1xuMzM3MzpcdFxuMzM3NDpcdFx0Y2FzZSBUVU5TRVRUWEZJTFRFUjpcbjMzNzU6XHRcdFx0LyogQ2FuIGJlIHNldCBvbmx5IGZvciBUQVBzICovXG4zMzc2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4zMzc3Olx0XHRcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxuMzM3ODpcdFx0XHRcdGJyZWFrO1xuMzM3OTpcdFx0XHRyZXQgPSB1cGRhdGVfZmlsdGVyKFx1MDAyNnR1bi1cdTAwM2V0eGZsdCwgKHZvaWQgX191c2VyICopYXJnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHR1bl9jaHJfaW9jdGxgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGN1cnJlbnQgY29kZSBzbmlwcGV0IOKAkyB1bmRlcnN0YW5kaW5nIGl0cyBpbW1lZGlhdGUgY29udGV4dCBpcyBjcnVjaWFsLiBUaGVuLCBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBgX190dW5fY2hyX2lvY3RsYCBvciBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24uIEEgcXVpY2sgYGdyZXBgIG1pZ2h0IGJlIGhlbHBmdWwgdG8gdW5jb3ZlciBhbGwgdGhlIGNhbGwgc2l0ZXMsIG9yIEkgY2FuIGp1c3QgY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZS4gR2V0dGluZyBhIHNlbnNlIG9mIHRoZSBleGVjdXRpb24gZmxvdyB3aWxsIGJlIGltcG9ydGFudC4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlLCBtYXliZSBldmVuIGEgZmV3IGxpbmVzIGJlZm9yZSB0byBncmFzcCB0aGUgc2l0dWF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciB0aGF0IEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzIwMDpcdFx0a3VpZF90IG93bmVyO1xuMzIwMTpcdFx0a2dpZF90IGdyb3VwO1xuMzIwMjpcdFx0aW50IGlmaW5kZXg7XG4zMjAzOlx0XHRpbnQgc25kYnVmO1xuMzIwNDpcdFx0aW50IHJldDtcbjMyMDU6XHRcdGJvb2wgZG9fbm90aWZ5ID0gZmFsc2U7XG4zMjA2Olx0XG4zMjA3Olx0XHRpZiAoY21kID09IFRVTlNFVElGRiB8fCBjbWQgPT0gVFVOU0VUUVVFVUUgfHxcbjMyMDg6XHRcdCAgICAoX0lPQ19UWVBFKGNtZCkgPT0gU09DS19JT0NfVFlQRSBcdTAwMjZcdTAwMjYgY21kICE9IFNJT0NHU0tOUykpIHtcbjMyMDk6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmlmciwgYXJncCwgaWZyZXFfbGVuKSlcbjMyMTA6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjMyMTE6XHRcdH0gZWxzZSB7XG4zMjEyOlx0XHRcdG1lbXNldChcdTAwMjZpZnIsIDAsIHNpemVvZihpZnIpKTtcbjMyMTM6XHRcdH1cbjMyMTQ6XHRcdGlmIChjbWQgPT0gVFVOR0VURkVBVFVSRVMpIHtcbjMyMTU6XHRcdFx0LyogQ3VycmVudGx5IHRoaXMganVzdCBtZWFuczogXCYjMzQ7d2hhdCBJRkYgZmxhZ3MgYXJlIHZhbGlkP1wmIzM0Oy5cbjMyMTY6XHRcdFx0ICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZXZlciBjaGVja2VkIGZvciBpbnZhbGlkIGZsYWdzIG9uXG4zMjE3Olx0XHRcdCAqIFRVTlNFVElGRi5cbjMyMTg6XHRcdFx0ICovXG4zMjE5Olx0XHRcdHJldHVybiBwdXRfdXNlcihJRkZfVFVOIHwgSUZGX1RBUCB8IElGRl9OT19DQVJSSUVSIHxcbjMyMjA6XHRcdFx0XHRcdFRVTl9GRUFUVVJFUywgKHVuc2lnbmVkIGludCBfX3VzZXIqKWFyZ3ApO1xuMzIyMTpcdFx0fSBlbHNlIGlmIChjbWQgPT0gVFVOU0VUUVVFVUUpIHtcbjMyMjI6XHRcdFx0cmV0dXJuIHR1bl9zZXRfcXVldWUoZmlsZSwgXHUwMDI2aWZyKTtcbjMyMjM6XHRcdH0gZWxzZSBpZiAoY21kID09IFNJT0NHU0tOUykge1xuMzIyNDpcdFx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuMzIyNTpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4zMjI2Olx0XHRcdHJldHVybiBvcGVuX3JlbGF0ZWRfbnMoXHUwMDI2bmV0LVx1MDAzZW5zLCBnZXRfbmV0X25zKTtcbjMyMjc6XHRcdH1cbjMyMjg6XHRcbjMyMjk6XHRcdHJ0bmxfbG9jaygpO1xuMzIzMDpcdFxuMzIzMTpcdFx0dHVuID0gdHVuX2dldCh0ZmlsZSk7XG4zMjMyOlx0XHRpZiAoY21kID09IFRVTlNFVElGRikge1xuMzIzMzpcdFx0XHRyZXQgPSAtRUVYSVNUO1xuMzIzNDpcdFx0XHRpZiAodHVuKVxuMzIzNTpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzIzNjpcdFxuMzIzNzpcdFx0XHRpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAmIzM5O1xcMCYjMzk7O1xuMzIzODpcdFxuMzIzOTpcdFx0XHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFx1MDAyNmlmcik7XG4zMjQwOlx0XG4zMjQxOlx0XHRcdGlmIChyZXQpXG4zMjQyOlx0XHRcdFx0Z290byB1bmxvY2s7XG4zMjQzOlx0XG4zMjQ0Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2aWZyLCBpZnJlcV9sZW4pKVxuMzI0NTpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4zMjQ2Olx0XHRcdGdvdG8gdW5sb2NrO1xuMzI0NzpcdFx0fVxuMzI0ODpcdFx0aWYgKGNtZCA9PSBUVU5TRVRJRklOREVYKSB7XG4zMjQ5Olx0XHRcdHJldCA9IC1FUEVSTTtcbjMyNTA6XHRcdFx0aWYgKHR1bilcbjMyNTE6XHRcdFx0XHRnb3RvIHVubG9jaztcbjMyNTI6XHRcbjMyNTM6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjMyNTQ6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmlmaW5kZXgsIGFyZ3AsIHNpemVvZihpZmluZGV4KSkpXG4zMjU1Olx0XHRcdFx0Z290byB1bmxvY2s7XG4zMjU2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4zMjU3Olx0XHRcdGlmIChpZmluZGV4IFx1MDAzYyAwKVxuMzI1ODpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzI1OTpcdFx0XHRyZXQgPSAwO1xuMzI2MDpcdFx0XHR0ZmlsZS1cdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcbjMyNjE6XHRcdFx0Z290byB1bmxvY2s7XG4zMjYyOlx0XHR9XG4zMjYzOlx0XG4zMjY0Olx0XHRyZXQgPSAtRUJBREZEO1xuMzI2NTpcdFx0aWYgKCF0dW4pXG4zMjY2Olx0XHRcdGdvdG8gdW5sb2NrO1xuMzI2NzpcdFxuMzI2ODpcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldiwgXCYjMzQ7dHVuX2Nocl9pb2N0bCBjbWQgJXVcXG5cJiMzNDssIGNtZCk7XG4zMjY5Olx0XG4zMjcwOlx0XHRuZXQgPSBkZXZfbmV0KHR1bi1cdTAwM2VkZXYpO1xuMzI3MTpcdFx0cmV0ID0gMDtcbjMyNzI6XHRcdHN3aXRjaCAoY21kKSB7XG4zMjczOlx0XHRjYXNlIFRVTkdFVElGRjpcbjMyNzQ6XHRcdFx0dHVuX2dldF9pZmYodHVuLCBcdTAwMjZpZnIpO1xuMzI3NTpcdFxuMzI3NjpcdFx0XHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpXG4zMjc3Olx0XHRcdFx0aWZyLmlmcl9mbGFncyB8PSBJRkZfREVUQUNIX1FVRVVFO1xuMzI3ODpcdFx0XHRpZiAoIXRmaWxlLVx1MDAzZXNvY2tldC5zay1cdTAwM2Vza19maWx0ZXIpXG4zMjc5Olx0XHRcdFx0aWZyLmlmcl9mbGFncyB8PSBJRkZfTk9GSUxURVI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0dW5fY2hyX2lvY3RsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB0dW5fY2hyX2lvY3RsYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgZGVmaW5pdGlvbi4gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBsb29rZWQgYXQgdGhlIGxvdy1sZXZlbCBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSBmb3IgdGhlIFRVTiBkcml2ZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIHNvdXJjZSBhbmQgY29uZmlybWluZyBob3cgaXQgaGFuZGxlcyB0aG9zZSBpb2N0bCBjYWxscy4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHNlZSB3aGljaCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciB1c2VyLXNwYWNlIHByb2Nlc3NlcyBhcmUgKmNhbGxpbmcqIGB0dW5fY2hyX2lvY3RsYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gV2hhdCBmdW5jdGlvbmFsaXR5IGlzIHJlbHlpbmcgb24gdGhlc2UgaW9jdGxzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHN0YW5kYXJkIFRVTi9UQVAgb3BlcmF0aW9ucywgb3IgYXJlIHRoZXJlIGN1c3RvbSBleHRlbnNpb25zIGluIHBsYXk/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgbWFwIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQzMDpcdFx0XHRicmVhaztcbjM0MzE6XHRcbjM0MzI6XHRcdGNhc2UgVFVOREVUQUNIRklMVEVSOlxuMzQzMzpcdFx0XHQvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi9cbjM0MzQ6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjM0MzU6XHRcdFx0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spICE9IElGRl9UQVApXG4zNDM2Olx0XHRcdFx0YnJlYWs7XG4zNDM3Olx0XHRcdHJldCA9IDA7XG4zNDM4Olx0XHRcdHR1bl9kZXRhY2hfZmlsdGVyKHR1biwgdHVuLVx1MDAzZW51bXF1ZXVlcyk7XG4zNDM5Olx0XHRcdGJyZWFrO1xuMzQ0MDpcdFxuMzQ0MTpcdFx0Y2FzZSBUVU5HRVRGSUxURVI6XG4zNDQyOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4zNDQzOlx0XHRcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxuMzQ0NDpcdFx0XHRcdGJyZWFrO1xuMzQ0NTpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMzQ0NjpcdFx0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnR1bi1cdTAwM2VmcHJvZywgc2l6ZW9mKHR1bi1cdTAwM2VmcHJvZykpKVxuMzQ0NzpcdFx0XHRcdGJyZWFrO1xuMzQ0ODpcdFx0XHRyZXQgPSAwO1xuMzQ0OTpcdFx0XHRicmVhaztcbjM0NTA6XHRcbjM0NTE6XHRcdGNhc2UgVFVOU0VUU1RFRVJJTkdFQlBGOlxuMzQ1MjpcdFx0XHRyZXQgPSB0dW5fc2V0X2VicGYodHVuLCBcdTAwMjZ0dW4tXHUwMDNlc3RlZXJpbmdfcHJvZywgYXJncCk7XG4zNDUzOlx0XHRcdGJyZWFrO1xuMzQ1NDpcdFxuMzQ1NTpcdFx0Y2FzZSBUVU5TRVRGSUxURVJFQlBGOlxuMzQ1NjpcdFx0XHRyZXQgPSB0dW5fc2V0X2VicGYodHVuLCBcdTAwMjZ0dW4tXHUwMDNlZmlsdGVyX3Byb2csIGFyZ3ApO1xuMzQ1NzpcdFx0XHRicmVhaztcbjM0NTg6XHRcbjM0NTk6XHRcdGNhc2UgVFVOU0VUQ0FSUklFUjpcbjM0NjA6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjM0NjE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNhcnJpZXIsIGFyZ3AsIHNpemVvZihjYXJyaWVyKSkpXG4zNDYyOlx0XHRcdFx0Z290byB1bmxvY2s7XG4zNDYzOlx0XG4zNDY0Olx0XHRcdHJldCA9IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIodHVuLVx1MDAzZWRldiwgKGJvb2wpY2Fycmllcik7XG4zNDY1Olx0XHRcdGJyZWFrO1xuMzQ2NjpcdFxuMzQ2NzpcdFx0Y2FzZSBUVU5HRVRERVZORVROUzpcbjM0Njg6XHRcdFx0cmV0ID0gLUVQRVJNO1xuMzQ2OTpcdFx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuMzQ3MDpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzQ3MTpcdFx0XHRyZXQgPSBvcGVuX3JlbGF0ZWRfbnMoXHUwMDI2bmV0LVx1MDAzZW5zLCBnZXRfbmV0X25zKTtcbjM0NzI6XHRcdFx0YnJlYWs7XG4zNDczOlx0XG4zNDc0Olx0XHRkZWZhdWx0OlxuMzQ3NTpcdFx0XHRyZXQgPSB0dW5fdm5ldF9pb2N0bChcdTAwMjZ0dW4tXHUwMDNldm5ldF9oZHJfc3osIFx1MDAyNnR1bi1cdTAwM2VmbGFncywgY21kLCBhcmdwKTtcbjM0NzY6XHRcdFx0YnJlYWs7XG4zNDc3Olx0XHR9XG4zNDc4Olx0XG4zNDc5Olx0XHRpZiAoZG9fbm90aWZ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3Rpbmc6CgoqKkV4YW1pbmluZyBMaW5lIDM0ODAgYW5kIEJleW9uZCoqCgpBbHJpZ2h0LCBJJiMzOTttIGF0IGxpbmUgMzQ4MC4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHdoYXQgSSBkbyBhYm91dCB0aGlzIGNvZGViYXNlLCBJIGhhdmUgYSBmZXcgaW1tZWRpYXRlIHRoaW5ncyBJJiMzOTttIGxvb2tpbmcgZm9yLiBJcyB0aGlzIGEgY3JpdGljYWwgc2VjdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZD8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZSBkZWNsYXJhdGlvbiwgYSBmdW5jdGlvbiBjYWxsLCBhIHNwZWNpZmljIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbiwgb3IgbWVyZWx5IGEgY29tbWVudD8gQmFzZWQgb24gdGhlIGN1cnJlbnQgbW9kdWxlIGNvbnRleHQsIHRoZSBzdXJyb3VuZGluZyB2YXJpYWJsZXMsIGFuZCB0aGUgb3ZlcmFsbCBwcm9ncmFtIGFyY2hpdGVjdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGxpbmUgc2lnbmlmaWVzLgoKTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gcmVjb25zdHJ1Y3QgdGhlIGNvbnRyb2wgZmxvdyB0aGF0IHdpbGwgYnJpbmcgdGhlIHByb2dyYW0gdG8gdGhpcyBzcGVjaWZpYyBsaW5lLiBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwcmVjb25kaXRpb25zLCB0aGUgcG9zc2libGUgaW5wdXRzIHRoYXQgY291bGQgYmUgY2F1c2luZyB0aGlzIGxpbmUgdG8gYmUgZXhlY3V0ZWQsIGFuZCB0aGUgc3Vic2VxdWVudCBsb2dpYyB0aGlzIGxpbmUgbWlnaHQgdHJpZ2dlci4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoZSBzeW50YXgsIGlkZW50aWZ5IGFueSB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIGJlaW5nIHVzZWQsIGFuZCBkZXRlcm1pbmUgdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBsaWtlIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyBoYXZlIHRvIGtlZXAgbXkgZXllIG91dCBmb3IgYW55IHVudXN1YWwgcGF0dGVybnMgb3IgbG9naWMgdGhhdCBzZWVtcyBvdXQgb2YgcGxhY2UsIHBvdGVudGlhbGx5IGluZGljYXRpbmcgYSBidWcgb3IgYW4gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBUaGlzIGxpbmUgaXMganVzdCBhIHBvaW50IGluIHRpbWUsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBwcmVzZW50IGFuZCBmdXR1cmUgc3RhdGUgcmVsYXRpdmUgdG8gdGhlIGNvZGUsIGFuZCBob3cgdGhlIHByb2dyYW0gYXJyaXZlZCBhdCB0aGlzIG1vbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0ODA6XHRcdFx0bmV0ZGV2X3N0YXRlX2NoYW5nZSh0dW4tXHUwMDNlZGV2KTtcbjM0ODE6XHRcbjM0ODI6XHR1bmxvY2s6XG4zNDgzOlx0XHRydG5sX3VubG9jaygpO1xuMzQ4NDpcdFx0aWYgKHR1bilcbjM0ODU6XHRcdFx0dHVuX3B1dCh0dW4pO1xuMzQ4NjpcdFx0cmV0dXJuIHJldDtcbjM0ODc6XHR9XG4zNDg4Olx0XG4zNDg5Olx0c3RhdGljIGxvbmcgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbjM0OTA6XHRcdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMzQ5MTpcdHtcbjM0OTI6XHRcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZiAoc3RydWN0IGlmcmVxKSk7XG4zNDkzOlx0fVxuMzQ5NDpcdFxuMzQ5NTpcdCNpZmRlZiBDT05GSUdfQ09NUEFUXG4zNDk2Olx0c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4zNDk3Olx0XHRcdFx0IHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMzQ5ODpcdHtcbjM0OTk6XHRcdHN3aXRjaCAoY21kKSB7XG4zNTAwOlx0XHRjYXNlIFRVTlNFVElGRjpcbjM1MDE6XHRcdGNhc2UgVFVOR0VUSUZGOlxuMzUwMjpcdFx0Y2FzZSBUVU5TRVRUWEZJTFRFUjpcbjM1MDM6XHRcdGNhc2UgVFVOR0VUU05EQlVGOlxuMzUwNDpcdFx0Y2FzZSBUVU5TRVRTTkRCVUY6XG4zNTA1Olx0XHRjYXNlIFNJT0NHSUZIV0FERFI6XG4zNTA2Olx0XHRjYXNlIFNJT0NTSUZIV0FERFI6XG4zNTA3Olx0XHRcdGFyZyA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKTtcbjM1MDg6XHRcdFx0YnJlYWs7XG4zNTA5Olx0XHRkZWZhdWx0OlxuMzUxMDpcdFx0XHRhcmcgPSAoY29tcGF0X3Vsb25nX3QpYXJnO1xuMzUxMTpcdFx0XHRicmVhaztcbjM1MTI6XHRcdH1cbjM1MTM6XHRcbjM1MTQ6XHRcdC8qXG4zNTE1Olx0XHQgKiBjb21wYXRfaWZyZXEgaXMgc2hvcnRlciB0aGFuIGlmcmVxLCBzbyB3ZSBtdXN0IG5vdCBhY2Nlc3MgYmV5b25kXG4zNTE2Olx0XHQgKiB0aGUgZW5kIG9mIHRoYXQgc3RydWN0dXJlLiBBbGwgZmllbGRzIHRoYXQgYXJlIHVzZWQgaW4gdGhpc1xuMzUxNzpcdFx0ICogZHJpdmVyIGFyZSBjb21wYXRpYmxlIHRob3VnaCwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29udmVydCB0aGVcbjM1MTg6XHRcdCAqIGNvbnRlbnRzLlxuMzUxOTpcdFx0ICovXG4zNTIwOlx0XHRyZXR1cm4gX190dW5fY2hyX2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9pZnJlcSkpO1xuMzUyMTpcdH1cbjM1MjI6XHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xuMzUyMzpcdFxuMzUyNDpcdHN0YXRpYyBpbnQgdHVuX2Nocl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKVxuMzUyNTpcdHtcbjM1MjY6XHRcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjM1Mjc6XHRcdGludCByZXQ7XG4zNTI4Olx0XG4zNTI5Olx0XHRpZiAob24pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGB0dW5fY2hyX2lvY3RsYCBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdHVuLmNgIGZpbGUuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgZGlmZmVyZW50IGZpbGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB1c2luZyB0aGlzIHNwZWNpZmljIGlvY3RsIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGB0dW5gIGRldmljZSBkcml2ZXIuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgc2VhcmNoaW5nIGZvciBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZSwgYW5kIHRoZW4gdHJ5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMTUzPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTkwLVxuZHJpdmVycy9uZXQvdHVuLmM6MzE5MTpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMTkyLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMjY3LVxuZHJpdmVycy9uZXQvdHVuLmM6MzI2ODpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzI2OS1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDg4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4OTpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5MC1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5MS17XG5kcml2ZXJzL25ldC90dW4uYzozNDkyOlx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0OTMtfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0OTY9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUxOS1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzUyMDpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zNTIxLX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2MjItXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNjIzOlx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNjI0LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkcyBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIFRVTiBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHR1bi5jYCBkcml2ZXIgaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gZmluZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZHJpdmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgZGlyZWN0bHkgcmVmZXJlbmNpbmcgYGRyaXZlcnMvbmV0L3R1bi5jYCBvciwgbW9yZSBsaWtlbHksIGEgS2NvbmZpZyBzeW1ib2wgdGllZCB0byBpdHMgZW5hYmxlbWVudC4gVGhhdCBzaG91bGQgdGVsbCBtZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIHRoZSBUVU4gZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBidWlsdCBhcyBhIG1vZHVsZS4KCk5leHQsIGFzc3VtaW5nIEkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyAob3IgZXZlbiBpZiBJICpkb24mIzM5O3QqIGZpbmQgYSBkaXJlY3QgcmVmZXJlbmNlIGFuZCBJIG5lZWQgbW9yZSBjb250ZXh0KSwgSSYjMzk7bGwgcGl2b3QgYW5kIGV4YW1pbmUgdGhlIGBNYWtlZmlsZWAgaW4gYGRyaXZlcnMvbmV0L2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYGdyZXBgIHRocm91Z2ggdGhlIGBNYWtlZmlsZWAgdG8gc2VlIGhvdyB0aG9zZSBjb25maWcgc3ltYm9scyBmcm9tIEtjb25maWcgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGB0dW4ub2AgaXMgYnVpbHQuIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb21waWxlciBkaXJlY3RpdmVzIGRlY2lkZSB3aGF0IGdldHMgY29tcGlsZWQgYmFzZWQgb24gdGhlIEtjb25maWcgb3B0aW9ucy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGZpbmFsIGFuc3dlci4gSG9wZWZ1bGx5LCBJIGNhbiBjbGVhcmx5IG1hcCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gdGhlIGRyaXZlciYjMzk7cyBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVF9URUFNKSAmIzQzOz0gdGVhbS9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19UVU4pICYjNDM7PSB0dW4ub1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX1RBUCkgJiM0Mzs9IHRhcC5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQxPW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgJiM0Mzs9IGVuL2h2X3ZoY2Ffc3RhdHMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQyOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0VTV0lUQ0gpICAgICAmIzQzOz0gbGFnL21wLm8gbGFnL3BvcnRfc2VsLm8gbGliL2dlbmV2ZS5vIGxpYi9wb3J0X3R1bi5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDMtXHRcdFx0XHRcdGVuX3JlcC5vIGVuL3JlcC9ib25kLm8gZW4vbW9kX2hkci5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQ1PW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NMU19BQ1QpICAgICAmIzQzOz0gZW5fdGMubyBlbi9yZXAvdGMubyBlbi9yZXAvbmVpZ2gubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQ2Olx0XHRcdFx0XHRsaWIvZnNfY2hhaW5zLm8gZW4vdGNfdHVuLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00Ny1cdFx0XHRcdFx0ZXN3L2luZGlyX3RhYmxlLm8gZW4vdGNfdHVuX2VuY2FwLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NTM9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICYjNDM7PSBlbi90Yy9hY3QvYWN0Lm8gZW4vdGMvYWN0L2Ryb3AubyBlbi90Yy9hY3QvdHJhcC5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNTQtXHRcdFx0XHRcdGVuL3RjL2FjdC9hY2NlcHQubyBlbi90Yy9hY3QvbWFyay5vIGVuL3RjL2FjdC9nb3RvLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo1NTpcdFx0XHRcdFx0ZW4vdGMvYWN0L3R1bi5vIGVuL3RjL2FjdC9jc3VtLm8gZW4vdGMvYWN0L3BlZGl0Lm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01Ni1cdFx0XHRcdFx0ZW4vdGMvYWN0L3ZsYW4ubyBlbi90Yy9hY3Qvdmxhbl9tYW5nbGUubyBlbi90Yy9hY3QvbXBscy5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMDQ1PW5mcF90dW5uZWxfbG9va3VwX29mZmxvYWRlZF9tYWNzKHN0cnVjdCBuZnBfYXBwICphcHAsIGNvbnN0IHU4ICptYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMDQ5Olx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIG1hYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTA1MC1cdFx0XHRcdCAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMDc3PW5mcF90dW5uZWxfYWRkX3NoYXJlZF9tYWMoc3RydWN0IG5mcF9hcHAgKmFwcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjExMjg6XHRcdGlmIChyaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTI5LVx0XHRcdFx0XHQgICBcdTAwMjZlbnRyeS1cdTAwM2VodF9ub2RlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTE1MC1lcnJfcmVtb3ZlX2hhc2g6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjExNTE6XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLCBcdTAwMjZlbnRyeS1cdTAwM2VodF9ub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTUyLVx0XHRcdCAgICAgICBvZmZsb2FkZWRfbWFjc19wYXJhbXMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTE2Mz1uZnBfdHVubmVsX2RlbF9zaGFyZWRfbWFjKHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMjI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMjI4Olx0V0FSTl9PTl9PTkNFKHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEyMjktXHRcdFx0XHRcdCAgICBcdTAwMjZlbnRyeS1cdTAwM2VodF9ub2RlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTUwNz1pbnQgbmZwX3R1bm5lbF9jb25maWdfc3RhcnQoc3RydWN0IG5mcF9hcHAgKmFwcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MTItXHQvKiBJbml0aWFsaXNlIHJoYXNoIGZvciBNQUMgb2ZmbG9hZCB0cmFja2luZy4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUxMzpcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUxNC1cdFx0XHQgICAgICBcdTAwMjZvZmZsb2FkZWRfbWFjc19wYXJhbXMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUzMC1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUzMTpcdFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTMyLVx0XHRcdFx0XHQgICAgbmZwX2NoZWNrX3JoYXNodGFibGVfZW1wdHksIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTUzOT12b2lkIG5mcF90dW5uZWxfY29uZmlnX3N0b3Aoc3RydWN0IG5mcF9hcHAgKmFwcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1NTgtXHQvKiBEZXN0cm95IHJoYXNoLiBFbnRyaWVzIHNob3VsZCBiZSBjbGVhbmVkIG9uIG5ldGRldiBub3RpZmllciB1bnJlZy4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTU1OTpcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTU2MC1cdFx0XHRcdCAgICBuZnBfY2hlY2tfcmhhc2h0YWJsZV9lbXB0eSwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzODcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBkZXZlbG9wbWVudCBvciBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQ2hlY2tpbmcgdGhlIFRVTi9UQVAgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGRlZXBlciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSBUVU4vVEFQIGRyaXZlci4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIG5ldHdvcmtpbmctcmVsYXRlZCBpc3N1ZSBvciBJJiMzOTttIHRyeWluZyB0byB1dGlsaXplIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24uIE5vIHBvaW50IHdhc3RpbmcgdGltZSBndWVzc2luZzsgbGV0JiMzOTtzIGNoZWNrIGBDT05GSUdfVFVOYCBpbiB0aGUgS2NvbmZpZywgdG8gc2VlIGlmIGl0JiMzOTtzIHNldCB0byAmIzM0O3kmIzM0OyAoYnVpbHQtaW4pIG9yICYjMzQ7bSYjMzQ7IChtb2R1bGUpLiBUaGVuIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU5cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBtb2R1bGUgaXMgc2V0IHVwLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMzkxLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmRzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNpc2lvbnMgZ2V0IG1hZGUsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNwZWxsZWQgb3V0LiBJIGNhbiBvZnRlbiBnZXQgYSBzZW5zZSBvZiB0aGUgaW50ZW5kZWQgdXNlIGNhc2UganVzdCBieSByZWFkaW5nIHRoaXMgc2VjdGlvbiwgYW5kIHRoYXQgY2FuIHNoYXBlIGFsbCBmdXJ0aGVyIGFuYWx5c2lzLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg4Olx0XHRkZXBlbmRzIG9uIFJJT05FVFxuIDM4OTpcdFx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbiAzOTA6XHRcbiAzOTE6XHRjb25maWcgVFVOXG4gMzkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAzOTM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM5NDpcdFx0c2VsZWN0IENSQzMyXG4gMzk1Olx0XHRoZWxwXG4gMzk2Olx0XHQgIFRVTi9UQVAgcHJvdmlkZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGZvciB1c2VyIHNwYWNlXG4gMzk3Olx0XHQgIHByb2dyYW1zLiAgSXQgY2FuIGJlIHZpZXdlZCBhcyBhIHNpbXBsZSBQb2ludC10by1Qb2ludCBvciBFdGhlcm5ldFxuIDM5ODpcdFx0ICBkZXZpY2UsIHdoaWNoIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBhIHBoeXNpY2FsIG1lZGlhLFxuIDM5OTpcdFx0ICByZWNlaXZlcyB0aGVtIGZyb20gdXNlciBzcGFjZSBwcm9ncmFtIGFuZCBpbnN0ZWFkIG9mIHNlbmRpbmcgcGFja2V0c1xuIDQwMDpcdFx0ICB2aWEgcGh5c2ljYWwgbWVkaWEgd3JpdGVzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS5cbiA0MDE6XHRcbiA0MDI6XHRcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXG4gNDAzOlx0XHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXG4gNDA0Olx0XHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcbiA0MDU6XHRcdCAgYWxsIHJvdXRlcyBjb3JyZXNwb25kaW5nIHRvIGl0LlxuIDQwNjpcdFxuIDQwNzpcdFx0ICBQbGVhc2UgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XHUwMDNlIGZvciBtb3JlXG4gNDA4Olx0XHQgIGluZm9ybWF0aW9uLlxuIDQwOTpcdFxuIDQxMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNDExOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHR1bi5cbiA0MTI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBUVU4vVEFQIERyaXZlciYjMzk7cyBgVFVOU0VUTElOS2AgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgYHR1bl9jaHJfaW9jdGxgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgVFVOL1RBUCBkcml2ZXIgKGBkcml2ZXJzL25ldC90dW4uY2ApLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNvbmNlcm5lZCB3aXRoIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjYWxsLCB3aGljaCBpcyB1c2VkIHRvIHNldCB0aGUgbGluayB0eXBlIG9mIHRoZSBUVU4gZGV2aWNlLiBJIHNlZSB0aGUgY2hlY2sgaGVyZSDigJMgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0byBjaGFuZ2UgdGhlIGxpbmsgdHlwZSBhbmQgKnNpbXVsdGFuZW91c2x5KjoKCjEuICBUaGUgbmV3IGxpbmsgdHlwZSYjMzk7cyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBkZXZpY2UmIzM5O3MgYWRkcmVzcyBsZW5ndGggKGB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW5gKS4KMi4gIFRoZSBkZXZpY2UgaGFzIGVpdGhlciBleGlzdGluZyB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gaXRzIGxpc3RzIChgIW5ldGRldl91Y19lbXB0eSh0dW4tJmd0O2RldikgfHwgIW5ldGRldl9tY19lbXB0eSh0dW4tJmd0O2RldilgKS4KCi4uLnRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgLUVCVVNZYC4KClRoZSByYXRpb25hbGUgaXMgY2xlYXI6IGNoYW5naW5nIHRoZSBgYWRkcl9sZW5gIHdoaWxlIHRob3NlIGxpc3RzIGFyZSBwb3B1bGF0ZWQgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBJdCBzY3JlYW1zIG1lbW9yeSBjb3JydXB0aW9uIG9yIGFkZHJlc3MtbGVuZ3RoIG1pc21hdGNoZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGJ1Z3Mgd2hlbiB0aG9zZSBleGlzdGluZyBhZGRyZXNzZXMgYXJlIGFjY2Vzc2VkLCBmcmVlZCwgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGVkIHdpdGggdGhlIG5ldyBhZGRyZXNzIGxlbmd0aC4gVGhpcyBpcyBhIGNsYXNzaWMgJiMzNDtzeXpib3QgYnVnJiMzNDsgd2FpdGluZyB0byBoYXBwZW4sIGlmIEkgaGFkIHRvIGd1ZXNzLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IEFic29sdXRlbHkuIFRoZSBUVU4vVEFQIGRyaXZlciBpcyBhIHN0YW5kYXJkLCBzb2Z0d2FyZS1iYXNlZCB2aXJ0dWFsIG5ldHdvcmtpbmcgY29tcG9uZW50LiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBgL2Rldi9uZXQvdHVuYCBhbmQgaGVhdmlseSB1dGlsaXplZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIG1ha2luZyBpdCBhIHZlcnkgYWNjZXNzaWJsZSB0YXJnZXQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBsb2dpYyB3aXRoaW4gdGhlIFRVTiBkcml2ZXIgdGhhdCBkaXJlY3RseSBhZmZlY3RzIGhvdyBpdCBoYW5kbGVzIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgYW5kIGFzc29jaWF0ZWQgYWRkcmVzcyBsaXN0cy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBmdXp6aW5nIGNhbiB1bmNvdmVyIHN1YnRsZSwgZXhwbG9pdGFibGUgYnVncy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBzeW1ib2xzIGZvciBmdXp6aW5nLiBgdHVuX2Nocl9pb2N0bGAgaXMgbm9uLXN0YXRpYywgc28gdGhlIG9yaWdpbmFsIGFzc2Vzc21lbnQgbG9va3MgbGlrZSB0aGUgYmVzdCBlbnRyeXBvaW50LiBJdCBsb29rcyBsaWtlIGBfX3R1bl9jaHJfaW9jdGxgIGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZ3JlcCBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGRyaXZlciB0byBmaW5kIHRoZSBlbnRyeXBvaW50LiBJIHdpbGwgc3RhcnQgd2l0aCB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU1MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvdHVuLmMtODctXG5kcml2ZXJzL25ldC90dW4uYzo4ODpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvdHVuLmMtODktXHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjIyPXN0cnVjdCB2ZXRoIHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMjYtXG5kcml2ZXJzL25ldC90dW4uYzoyMjc6c3RhdGljIHZvaWQgdHVuX2Zsb3dfaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKTtcbmRyaXZlcnMvbmV0L3R1bi5jOjIyODpzdGF0aWMgdm9pZCB0dW5fZmxvd191bmluaXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bik7XG5kcml2ZXJzL25ldC90dW4uYy0yMjktXG5kcml2ZXJzL25ldC90dW4uYzoyMzA6c3RhdGljIGludCB0dW5fbmFwaV9yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbmRyaXZlcnMvbmV0L3R1bi5jLTIzMS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjU3LVxuZHJpdmVycy9uZXQvdHVuLmM6MjU4OnN0YXRpYyBpbnQgdHVuX25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC90dW4uYy0yNTkte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI2OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3MDpzdGF0aWMgdm9pZCB0dW5fbmFwaV9pbml0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy0yNzEtXHRcdFx0ICBib29sIG5hcGlfZW4sIGJvb2wgbmFwaV9mcmFncylcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yODAtXG5kcml2ZXJzL25ldC90dW4uYzoyODE6c3RhdGljIHZvaWQgdHVuX25hcGlfZW5hYmxlKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0yODIte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI4Ni1cbmRyaXZlcnMvbmV0L3R1bi5jOjI4NzpzdGF0aWMgdm9pZCB0dW5fbmFwaV9kaXNhYmxlKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0yODgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5Mi1cbmRyaXZlcnMvbmV0L3R1bi5jOjI5MzpzdGF0aWMgdm9pZCB0dW5fbmFwaV9kZWwoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTI5NC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjk4LVxuZHJpdmVycy9uZXQvdHVuLmM6Mjk5OnN0YXRpYyBib29sIHR1bl9uYXBpX2ZyYWdzX2VuYWJsZWQoY29uc3Qgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTMwMC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzAzLVxuZHJpdmVycy9uZXQvdHVuLmM6MzA0OnN0YXRpYyBpbmxpbmUgdTMyIHR1bl9oYXNoZm4odTMyIHJ4aGFzaClcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzA4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA5OnN0YXRpYyBzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKnR1bl9mbG93X2ZpbmQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiByeGhhc2gpXG5kcml2ZXJzL25ldC90dW4uYy0zMTAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxOS1cbmRyaXZlcnMvbmV0L3R1bi5jOjMyMDpzdGF0aWMgc3RydWN0IHR1bl9mbG93X2VudHJ5ICp0dW5fZmxvd19jcmVhdGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTMyMS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQwLVxuZHJpdmVycy9uZXQvdHVuLmM6MzQxOnN0YXRpYyB2b2lkIHR1bl9mbG93X2RlbGV0ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKmUpXG5kcml2ZXJzL25ldC90dW4uYy0zNDIte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM0OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjM1MDpzdGF0aWMgdm9pZCB0dW5fZmxvd19mbHVzaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMzUxLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjQtXG5kcml2ZXJzL25ldC90dW4uYzozNjU6c3RhdGljIHZvaWQgdHVuX2Zsb3dfZGVsZXRlX2J5X3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHUxNiBxdWV1ZV9pbmRleClcbmRyaXZlcnMvbmV0L3R1bi5jLTM2Ni17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzgxLVxuZHJpdmVycy9uZXQvdHVuLmM6MzgyOnN0YXRpYyB2b2lkIHR1bl9mbG93X2NsZWFudXAoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5kcml2ZXJzL25ldC90dW4uYy0zODMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTQxMy1cbmRyaXZlcnMvbmV0L3R1bi5jOjQxNDpzdGF0aWMgdm9pZCB0dW5fZmxvd191cGRhdGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdTMyIHJ4aGFzaCxcbmRyaXZlcnMvbmV0L3R1bi5jLTQxNS1cdFx0XHQgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy00NTEtICovXG5kcml2ZXJzL25ldC90dW4uYzo0NTI6c3RhdGljIGlubGluZSB2b2lkIHR1bl9mbG93X3NhdmVfcnBzX3J4aGFzaChzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKmUsIHUzMiBoYXNoKVxuZHJpdmVycy9uZXQvdHVuLmMtNDUzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy00NjMtICovXG5kcml2ZXJzL25ldC90dW4uYzo0NjQ6c3RhdGljIHUxNiB0dW5fYXV0b21xX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdHVuLmMtNDY1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy00ODItXG5kcml2ZXJzL25ldC90dW4uYzo0ODM6c3RhdGljIHUxNiB0dW5fZWJwZl9zZWxlY3RfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3R1bi5jLTQ4NC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNDk5LVxuZHJpdmVycy9uZXQvdHVuLmM6NTAwOnN0YXRpYyB1MTYgdHVuX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdHVuLmMtNTAxLVx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTUxNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjUxNjpzdGF0aWMgaW5saW5lIGJvb2wgdHVuX25vdF9jYXBhYmxlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy01MTcte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTUyNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjUyNjpzdGF0aWMgdm9pZCB0dW5fc2V0X3JlYWxfbnVtX3F1ZXVlcyhzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtNTI3LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01MzEtXG5kcml2ZXJzL25ldC90dW4uYzo1MzI6c3RhdGljIHZvaWQgdHVuX2Rpc2FibGVfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTUzMy17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNTM4LVxuZHJpdmVycy9uZXQvdHVuLmM6NTM5OnN0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2VuYWJsZV9xdWV1ZShzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuZHJpdmVycy9uZXQvdHVuLmMtNTQwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01NDgtXG5kcml2ZXJzL25ldC90dW4uYzo1NDk6dm9pZCB0dW5fcHRyX2ZyZWUodm9pZCAqcHRyKVxuZHJpdmVycy9uZXQvdHVuLmMtNTUwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01NjAtfVxuZHJpdmVycy9uZXQvdHVuLmM6NTYxOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9wdHJfZnJlZSk7XG5kcml2ZXJzL25ldC90dW4uYy01NjItXG5kcml2ZXJzL25ldC90dW4uYzo1NjM6c3RhdGljIHZvaWQgdHVuX3F1ZXVlX3B1cmdlKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy01NjQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTU3My1cbmRyaXZlcnMvbmV0L3R1bi5jOjU3NDpzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbmRyaXZlcnMvbmV0L3R1bi5jLTU3NS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNjQ0LVxuZHJpdmVycy9uZXQvdHVuLmM6NjQ1OnN0YXRpYyB2b2lkIHR1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbmRyaXZlcnMvbmV0L3R1bi5jLTY0Ni17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNjYxLVxuZHJpdmVycy9uZXQvdHVuLmM6NjYyOnN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy02NjMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcwNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjcwNjpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuZHJpdmVycy9uZXQvdHVuLmMtNzA3LVx0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNzI0LVxuZHJpdmVycy9uZXQvdHVuLmM6NzI1OnN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTcyNi1cdFx0ICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtODIyLVxuZHJpdmVycy9uZXQvdHVuLmM6ODIzOnN0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2dldChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuZHJpdmVycy9uZXQvdHVuLmMtODI0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy04MzUtXG5kcml2ZXJzL25ldC90dW4uYzo4MzY6c3RhdGljIHZvaWQgdHVuX3B1dChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtODM3LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy04NDEtLyogVEFQIGZpbHRlcmluZyAqL1xuZHJpdmVycy9uZXQvdHVuLmM6ODQyOnN0YXRpYyB2b2lkIGFkZHJfaGFzaF9zZXQodTMyICptYXNrLCBjb25zdCB1OCAqYWRkcilcbmRyaXZlcnMvbmV0L3R1bi5jLTg0My17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtODQ3LVxuZHJpdmVycy9uZXQvdHVuLmM6ODQ4OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWRkcl9oYXNoX3Rlc3QoY29uc3QgdTMyICptYXNrLCBjb25zdCB1OCAqYWRkcilcbmRyaXZlcnMvbmV0L3R1bi5jLTg0OS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtODUzLVxuZHJpdmVycy9uZXQvdHVuLmM6ODU0OnN0YXRpYyBpbnQgdXBkYXRlX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCB2b2lkIF9fdXNlciAqYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtODU1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy05MTMtLyogUmV0dXJuczogMCAtIGRyb3AsICE9MCAtIGFjY2VwdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6OTE0OnN0YXRpYyBpbnQgcnVuX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdHVuLmMtOTE1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy05MzYtICovXG5kcml2ZXJzL25ldC90dW4uYzo5Mzc6c3RhdGljIGludCBjaGVja19maWx0ZXIoc3RydWN0IHRhcF9maWx0ZXIgKmZpbHRlciwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3R1bi5jLTkzOC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9OTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzO1xuZHJpdmVycy9uZXQvdHVuLmMtOTQ4LVxuZHJpdmVycy9uZXQvdHVuLmM6OTQ5OnN0YXRpYyBpbnQgdHVuX25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy05NTAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTk4OC0vKiBOZXQgZGV2aWNlIGRldGFjaCBmcm9tIGZkLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6OTg5OnN0YXRpYyB2b2lkIHR1bl9uZXRfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy05OTAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTk5NC0vKiBOZXQgZGV2aWNlIG9wZW4uICovXG5kcml2ZXJzL25ldC90dW4uYzo5OTU6c3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTk5Ni17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTAwMi0vKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTAwMzpzdGF0aWMgaW50IHR1bl9uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEwMjctLyogTmV0IGRldmljZSBzdGFydCB4bWl0ICovXG5kcml2ZXJzL25ldC90dW4uYzoxMDI4OnN0YXRpYyB2b2lkIHR1bl9hdXRvbXFfeG1pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdHVuLmMtMTAyOS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTA0NS1cbmRyaXZlcnMvbmV0L3R1bi5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTEwNDctXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDU4LS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTA1OTpzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMTY4LVxuZHJpdmVycy9uZXQvdHVuLmM6MTE2OTpzdGF0aWMgdm9pZCB0dW5fbmV0X21jbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMTE3MC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE3Ny1cbmRyaXZlcnMvbmV0L3R1bi5jOjExNzg6c3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC90dW4uYy0xMTc5LVx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE4NS1cbmRyaXZlcnMvbmV0L3R1bi5jOjExODY6c3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxuZHJpdmVycy9uZXQvdHVuLmMtMTE4Ny17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTIwMT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvdHVuLmM6MTIwMjp0dW5fbmV0X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG5kcml2ZXJzL25ldC90dW4uYy0xMjAzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjExLVxuZHJpdmVycy9uZXQvdHVuLmM6MTIxMjpzdGF0aWMgaW50IHR1bl94ZHBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMTMtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTI0MS1cbmRyaXZlcnMvbmV0L3R1bi5jOjEyNDI6c3RhdGljIGludCB0dW5feGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXG5kcml2ZXJzL25ldC90dW4uYy0xMjQzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjUxLVxuZHJpdmVycy9uZXQvdHVuLmM6MTI1MjpzdGF0aWMgaW50IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2FycmllcilcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjc5LVxuZHJpdmVycy9uZXQvdHVuLmM6MTI4MDpzdGF0aWMgdm9pZCBfX3R1bl94ZHBfZmx1c2hfdGZpbGUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODEte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEyODctXG5kcml2ZXJzL25ldC90dW4uYzoxMjg4OnN0YXRpYyBpbnQgdHVuX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuZHJpdmVycy9uZXQvdHVuLmMtMTI4OS1cdFx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLCB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTMzNi1cbmRyaXZlcnMvbmV0L3R1bi5jOjEzMzc6c3RhdGljIGludCB0dW5feGRwX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuZHJpdmVycy9uZXQvdHVuLmMtMTMzOC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTM1MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEzNjgtXG5kcml2ZXJzL25ldC90dW4uYzoxMzY5OnN0YXRpYyB2b2lkIHR1bl9mbG93X2luaXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbmRyaXZlcnMvbmV0L3R1bi5jLTEzNzAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEzODEtXG5kcml2ZXJzL25ldC90dW4uYzoxMzgyOnN0YXRpYyB2b2lkIHR1bl9mbG93X3VuaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMTM4My17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTM5MS0vKiBJbml0aWFsaXplIG5ldCBkZXZpY2UuICovXG5kcml2ZXJzL25ldC90dW4uYzoxMzkyOnN0YXRpYyB2b2lkIHR1bl9uZXRfaW5pdGlhbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMTM5My17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTQzMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE0MzI6c3RhdGljIGJvb2wgdHVuX3NvY2tfd3JpdGVhYmxlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0xNDMzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xNDQxLS8qIFBvbGwgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjE0NDI6c3RhdGljIF9fcG9sbF90IHR1bl9jaHJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NDMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE0NzUtXG5kcml2ZXJzL25ldC90dW4uYzoxNDc2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX25hcGlfYWxsb2NfZnJhZ3Moc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NzctXHRcdFx0XHRcdCAgICBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE1MzItICogbGluZWFyIGlzIGEgaGludCBhcyB0byBob3cgbXVjaCB0byBjb3B5ICh1c3VhbGx5IGhlYWRlcnMpLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTUzMzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE1MzQtXHRcdFx0XHQgICAgIHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTU1OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE1NjA6c3RhdGljIHZvaWQgdHVuX3J4X2JhdGNoZWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE1NjEtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1vcmUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTU5OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE2MDA6c3RhdGljIGJvb2wgdHVuX2Nhbl9idWlsZF9za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MDEtXHRcdFx0ICAgICAgaW50IGxlbiwgaW50IG5vYmxvY2ssIGJvb2wgemVyb2NvcHkpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTYyMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE2MjI6c3RhdGljIHN0cnVjdCBza19idWZmICpfX3R1bl9idWlsZF9za2Ioc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MjMtXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfZnJhZyAqYWxsb2NfZnJhZywgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE2NDMtXG5kcml2ZXJzL25ldC90dW4uYzoxNjQ0OnN0YXRpYyBpbnQgdHVuX3hkcF9hY3Qoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2NDUtXHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGFjdClcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xNjgxLVxuZHJpdmVycy9uZXQvdHVuLmM6MTY4MjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9idWlsZF9za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTE2ODMtXHRcdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTc3OC0vKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjE3Nzk6c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy0xNzgwLVx0XHRcdCAgICB2b2lkICptc2dfY29udHJvbCwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwNzYtXG5kcml2ZXJzL25ldC90dW4uYzoyMDc3OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmRyaXZlcnMvbmV0L3R1bi5jLTIwNzgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMDk3OnN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcl94ZHAoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTgtXHRcdFx0XHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjQtLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjIxMjU6c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG5kcml2ZXJzL25ldC90dW4uYy0yMTI2LVx0XHRcdCAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDktLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG5kcml2ZXJzL25ldC90dW4uYzoyMjEwOnN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMTEtXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjI0Mi1cbmRyaXZlcnMvbmV0L3R1bi5jOjIyNDM6c3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNDQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyNTUtXG5kcml2ZXJzL25ldC90dW4uYzoyMjU2OnN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy0yMjU3LVx0XHRcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMjk3LVxuZHJpdmVycy9uZXQvdHVuLmM6MjI5ODpzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMjI5OS1cdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIzMzQtXG5kcml2ZXJzL25ldC90dW4uYzoyMzM1OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIzMzYte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIzNTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMzU3OnN0YXRpYyB2b2lkIHR1bl9wcm9nX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5kcml2ZXJzL25ldC90dW4uYy0yMzU4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMzY0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjM2NTpzdGF0aWMgaW50IF9fdHVuX3NldF9lYnBmKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG5kcml2ZXJzL25ldC90dW4uYy0yMzY2LVx0XHRcdCAgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIzODktXG5kcml2ZXJzL25ldC90dW4uYzoyMzkwOnN0YXRpYyB2b2lkIHR1bl9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMjM5MS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjQwMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI0MDI6c3RhdGljIHZvaWQgdHVuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0yNDAzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNDE5LSAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MjQyMDpzdGF0aWMgaW50IHR1bl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5kcml2ZXJzL25ldC90dW4uYy0yNDIxLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNDI3LVxuZHJpdmVycy9uZXQvdHVuLmM6MjQyODpzdGF0aWMgc2l6ZV90IHR1bl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMjQyOS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjQ0NC1cbmRyaXZlcnMvbmV0L3R1bi5jOjI0NDU6c3RhdGljIGludCB0dW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0yNDQ2LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNDg2PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB0dW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNDk0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjQ5NTpzdGF0aWMgdm9pZCB0dW5fc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG5kcml2ZXJzL25ldC90dW4uYy0yNDk2LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNTE0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjUxNTpzdGF0aWMgdm9pZCB0dW5fcHV0X3BhZ2Uoc3RydWN0IHR1bl9wYWdlICp0cGFnZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTI1MTYte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI1MjAtXG5kcml2ZXJzL25ldC90dW4uYzoyNTIxOnN0YXRpYyBpbnQgdHVuX3hkcF9vbmUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTI1MjItXHRcdCAgICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTYtXG5kcml2ZXJzL25ldC90dW4uYzoyNjU3OnN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI3MTEtXG5kcml2ZXJzL25ldC90dW4uYzoyNzEyOnN0YXRpYyBpbnQgdHVuX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbixcbmRyaXZlcnMvbmV0L3R1bi5jLTI3MTMtXHRcdCAgICAgICBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjc0OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3NTA6c3RhdGljIGludCB0dW5fcHRyX3BlZWtfbGVuKHZvaWQgKnB0cilcbmRyaXZlcnMvbmV0L3R1bi5jLTI3NTEte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI3NjMtXG5kcml2ZXJzL25ldC90dW4uYzoyNzY0OnN0YXRpYyBpbnQgdHVuX3BlZWtfbGVuKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL25ldC90dW4uYy0yNzY1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNzg3PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdHVuX3Byb3RvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI3OTItXG5kcml2ZXJzL25ldC90dW4uYzoyNzkzOnN0YXRpYyBpbnQgdHVuX2ZsYWdzKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy0yNzk0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNzk3LVxuZHJpdmVycy9uZXQvdHVuLmM6Mjc5ODpzdGF0aWMgc3NpemVfdCB0dW5fZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9uZXQvdHVuLmMtMjc5OS1cdFx0XHQgICAgICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjgwNC1cbmRyaXZlcnMvbmV0L3R1bi5jOjI4MDU6c3RhdGljIHNzaXplX3Qgb3duZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9uZXQvdHVuLmMtMjgwNi1cdFx0XHQgIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yODE0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjgxNTpzdGF0aWMgc3NpemVfdCBncm91cF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL25ldC90dW4uYy0yODE2LVx0XHRcdCAgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI4MjQtXG5kcml2ZXJzL25ldC90dW4uYzoyODI1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyh0dW5fZmxhZ3MpO1xuZHJpdmVycy9uZXQvdHVuLmM6MjgyNjpzdGF0aWMgREVWSUNFX0FUVFJfUk8ob3duZXIpO1xuZHJpdmVycy9uZXQvdHVuLmM6MjgyNzpzdGF0aWMgREVWSUNFX0FUVFJfUk8oZ3JvdXApO1xuZHJpdmVycy9uZXQvdHVuLmMtMjgyOC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yODM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHR1bl9hdHRyX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI4MzktXG5kcml2ZXJzL25ldC90dW4uYzoyODQwOnN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG5kcml2ZXJzL25ldC90dW4uYy0yODQxLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yOTgzLVxuZHJpdmVycy9uZXQvdHVuLmM6Mjk4NDpzdGF0aWMgdm9pZCB0dW5fZ2V0X2lmZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbmRyaXZlcnMvbmV0L3R1bi5jLTI5ODUte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5OTUtICogcHJpdnMgcmVxdWlyZWQuICovXG5kcml2ZXJzL25ldC90dW4uYzoyOTk2OnN0YXRpYyBpbnQgc2V0X29mZmxvYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25ldC90dW4uYy0yOTk3LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ5LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA1MDpzdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBpbnQgbilcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNTEte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjQtXG5kcml2ZXJzL25ldC90dW4uYzozMDY1OnN0YXRpYyBpbnQgdHVuX2F0dGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjYte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMwODQtXG5kcml2ZXJzL25ldC90dW4uYzozMDg1OnN0YXRpYyB2b2lkIHR1bl9zZXRfc25kYnVmKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy0zMDg2LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMDk1LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA5NjpzdGF0aWMgaW50IHR1bl9zZXRfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuZHJpdmVycy9uZXQvdHVuLmMtMzA5Ny17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzEzMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjMxMzI6c3RhdGljIGludCB0dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxuZHJpdmVycy9uZXQvdHVuLmMtMzEzMy1cdFx0XHR2b2lkIF9fdXNlciAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTUyLS8qIFJldHVybiBjb3JyZWN0IHZhbHVlIGZvciB0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuIGJhc2VkIG9uIHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZS4gKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjMxNTM6c3RhdGljIHVuc2lnbmVkIGNoYXIgdHVuX2dldF9hZGRyX2xlbih1bnNpZ25lZCBzaG9ydCB0eXBlKVxuZHJpdmVycy9uZXQvdHVuLmMtMzE1NC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzE5MC1cbmRyaXZlcnMvbmV0L3R1bi5jOjMxOTE6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9uZXQvdHVuLmMtMzE5Mi1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcsIGludCBpZnJlcV9sZW4pXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ4OC1cbmRyaXZlcnMvbmV0L3R1bi5jOjM0ODk6c3RhdGljIGxvbmcgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0OTAtXHRcdFx0ICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG5kcml2ZXJzL25ldC90dW4uYzozNDk2OnN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5Ny1cdFx0XHQgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUyMy1cbmRyaXZlcnMvbmV0L3R1bi5jOjM1MjQ6c3RhdGljIGludCB0dW5fY2hyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pXG5kcml2ZXJzL25ldC90dW4uYy0zNTI1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNTQ3LVxuZHJpdmVycy9uZXQvdHVuLmM6MzU0ODpzdGF0aWMgaW50IHR1bl9jaHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0zNTQ5LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNTg2LVxuZHJpdmVycy9uZXQvdHVuLmM6MzU4NzpzdGF0aWMgaW50IHR1bl9jaHJfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0zNTg4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNTk2LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZHJpdmVycy9uZXQvdHVuLmM6MzU5NzpzdGF0aWMgdm9pZCB0dW5fY2hyX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0zNTk4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjM1PXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0dW5fbWlzY2RldiA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjQzLVxuZHJpdmVycy9uZXQvdHVuLmM6MzY0NDpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvdHVuLmMtMzY0NS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2NTUtXG5kcml2ZXJzL25ldC90dW4uYzozNjU2OnN0YXRpYyBpbnQgdHVuX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvdHVuLmMtMzY1Ny1cdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjY0LVxuZHJpdmVycy9uZXQvdHVuLmM6MzY2NTpzdGF0aWMgaW50IHR1bl9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NjYtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzY3My1cbmRyaXZlcnMvbmV0L3R1bi5jOjM2NzQ6c3RhdGljIHZvaWQgdHVuX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXG5kcml2ZXJzL25ldC90dW4uYy0zNjc1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjkwLVxuZHJpdmVycy9uZXQvdHVuLmM6MzY5MTpzdGF0aWMgdTMyIHR1bl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTM2OTIte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2OTctXG5kcml2ZXJzL25ldC90dW4uYzozNjk4OnN0YXRpYyB2b2lkIHR1bl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKVxuZHJpdmVycy9uZXQvdHVuLmMtMzY5OS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzcwNC1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MDU6c3RhdGljIGludCB0dW5fZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC90dW4uYy0zNzA2LVx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzcxNi1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MTc6c3RhdGljIGludCB0dW5fc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC90dW4uYy0zNzE4LVx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzczMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MzI6c3RhdGljIHZvaWQgdHVuX2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTIzCgkJCQkJCQlvdXRwdXQ6IDEyNwoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFZlcmRpY3QgZm9yIHRoZSBUVU4vVEFQIERyaXZlciYjMzk7cyBpb2N0bCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBfX3R1bl9jaHJfaW9jdGxgIGFuZCBgdHVuX2Nocl9pb2N0bGAgYXMgdGhlIGtleSB0YXJnZXRzLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UsIGFuZCBwZXJoYXBzIHRoZWlyIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHR1bl9jaHJfY29tcGF0X2lvY3RsYCBhbmQgYHR1bl9nZXRfYWRkcl9sZW5gLCBpbiB0aGUgZm9jdXMgc3ltYm9sIGxpc3QuIE5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGVzZSBhcmUgcmVhbGx5IHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBvcGVyYXRpb25zLiBDaGVja2luZyBgdHVuX2Nocl9pb2N0bGAgYW5kIGBfX3R1bl9jaHJfaW9jdGxgIG1ha2VzIHNlbnNlLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCB0aGUgYFRVTmAgY29uZmlnIGlzIGNydWNpYWwsIGFsb25nIHdpdGggYElORVRgIHNpbmNlIGl0JiMzOTtzIGEgZGVwZW5kZW5jeS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgVFVOYCBkZXBlbmRzIG9uIGBJTkVUYC4gT2theSwgc28gYFRVTmAgYW5kIGBJTkVUYCBhcmUgb3VyIEVuYWJsZUNvbmZpZ3MuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgc2V0IGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LgoKTm93LCBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBhbGlnbmVkLiBZZXMsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLiBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgdHVuX2Nocl9pb2N0bGAgYW5kIGBfX3R1bl9jaHJfaW9jdGxgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc2V0IGFzIGBUVU5gIGFuZCBgSU5FVGAuIEZpbmFsbHksIEkgaGF2ZSBhIGNvbmNpc2UgcmVhc29uIHdoeSB0aGVzZSBjaG9pY2VzIHdlcmUgbWFkZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fY2hyX2lvY3RsJiMzNDssCiAgICAmIzM0O19fdHVuX2Nocl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgVFVOIGRyaXZlciYjMzk7cyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fY2hyX2lvY3RsJiMzNDssCiAgICAmIzM0O19fdHVuX2Nocl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgVFVOIGRyaXZlciYjMzk7cyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBfX3R1bl9jaHJfaW9jdGwoKWAgZm9yIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgY29tbWFuZC4gU3BlY2lmaWNhbGx5LCBpdCByZWplY3RzIGNoYW5naW5nIHRoZSBkZXZpY2UgdHlwZSBpZiB0aGUgbmV3IGFkZHJlc3MgbGVuZ3RoIChgdHVuX2dldF9hZGRyX2xlbihhcmcpYCkgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGBkZXYtXHUwMDNlYWRkcl9sZW5gIHdoaWxlIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgYXJlIG5vbi1lbXB0eS4gXG5cblRoaXMgY2hhbmdlIHByZXZlbnRzIGFkZHJlc3MgbGVuZ3RoIG1pc21hdGNoIGlzc3VlcyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gb3BlcmF0aW5nIG9uIGV4aXN0aW5nIGBkZXYtXHUwMDNldWNgIGFuZCBgZGV2LVx1MDAzZW1jYCBsaXN0cyAod2hpY2ggYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlOTY5ZmVhODA2YjA3OTc4ZjM2OGU0OThmOWRmZDBmYmMwMmFjOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTMzNDEsNiAmIzQzOzMzNDEsMTAgQEAgc3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJbmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLSZndDtkZXYsCiAJCQkJICAgJiMzNDtMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXG4mIzM0Oyk7CiAJCQlyZXQgPSAtRUJVU1k7CiYjNDM7CQl9IGVsc2UgaWYgKHR1bl9nZXRfYWRkcl9sZW4oYXJnKSAhPSB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW4gJmFtcDsmYW1wOwomIzQzOwkJCSAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi0mZ3Q7ZGV2KSB8fAomIzQzOwkJCSAgICAhbmV0ZGV2X21jX2VtcHR5KHR1bi0mZ3Q7ZGV2KSkpIHsKJiM0MzsJCQlyZXQgPSAtRUJVU1k7CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1BSRV9UWVBFX0NIQU5HRSwKIAkJCQkJCSAgICAgICB0dW4tJmd0O2Rldik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2gganVzdGlmaWVzIGl0cyBvd24gS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXBwcm9hY2gsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMgYW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYHR1bi5jYCBmaWxlLiBJJiMzOTtsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciYjMzk7cyBxdWlja2VzdCBhbmQgbW9zdCBlZmZpY2llbnQg4oCTIHRvIGV4YW1pbmUgdGhlIGNvZGUgc3Vycm91bmRpbmcgbGluZSAzMzQxIGluIGBkcml2ZXJzL25ldC90dW4uY2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UsIG5vdCBqdXN0IHRoZSAqd2hhdCouIAoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBzcGVjaWZpYyBjaGFuZ2U6IGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYW4gYWRkaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGB0dW5fZ2V0X2FkZHJfbGVuYCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgRUJVU1lgIGVycm9yIGlmIHRoZSBhZGRyZXNzIGxlbmd0aCBkb2VzbiYjMzk7dCBtYXRjaCBhbmQgZWl0aGVyIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3NlcyBhcmUgYWxyZWFkeSBjb25maWd1cmVkIG9uIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjaGVjayBpcyBwcm90ZWN0aW5nIGFnYWluc3QuIElzIGl0IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBBIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHk/IEEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIHNvcnQgb2YgY2hlY2sgbWlnaHQgYmUgY3JpdGljYWwgZm9yIHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdHVuLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBgdHVuLmNgIGFuZCBuZXR3b3JraW5nIGRyaXZlcnMsIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgYnVncyBjYW4gaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucy4gQmFzZWQgb24gbXkgcmV2aWV3LCBJJiMzOTtsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzI1Olx0XHRjYXNlIFRVTlNFVEdST1VQOlxuMzMyNjpcdFx0XHQvKiBTZXQgZ3JvdXAgb2YgdGhlIGRldmljZSAqL1xuMzMyNzpcdFx0XHRncm91cCA9IG1ha2Vfa2dpZChjdXJyZW50X3VzZXJfbnMoKSwgYXJnKTtcbjMzMjg6XHRcdFx0aWYgKCFnaWRfdmFsaWQoZ3JvdXApKSB7XG4zMzI5Olx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjMzMzA6XHRcdFx0XHRicmVhaztcbjMzMzE6XHRcdFx0fVxuMzMzMjpcdFx0XHRXUklURV9PTkNFKHR1bi1cdTAwM2Vncm91cCwgZ3JvdXApO1xuMzMzMzpcdFx0XHRkb19ub3RpZnkgPSB0cnVlO1xuMzMzNDpcdFx0XHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXHUwMDNlZGV2LCBcJiMzNDtncm91cCBzZXQgdG8gJXVcXG5cJiMzNDssXG4zMzM1Olx0XHRcdFx0ICAgZnJvbV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgZ3JvdXApKTtcbjMzMzY6XHRcdFx0YnJlYWs7XG4zMzM3Olx0XG4zMzM4Olx0XHRjYXNlIFRVTlNFVExJTks6XG4zMzM5Olx0XHRcdC8qIE9ubHkgYWxsb3cgc2V0dGluZyB0aGUgdHlwZSB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqL1xuMzM0MDpcdFx0XHRpZiAodHVuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB7XG4zMzQxOlx0XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbjMzNDI6XHRcdFx0XHRcdCAgIFwmIzM0O0xpbmt0eXBlIHNldCBmYWlsZWQgYmVjYXVzZSBpbnRlcmZhY2UgaXMgdXBcXG5cJiMzNDspO1xuMzM0MzpcdFx0XHRcdHJldCA9IC1FQlVTWTtcbjMzNDQ6XHRcdFx0fSBlbHNlIGlmICh0dW5fZ2V0X2FkZHJfbGVuKGFyZykgIT0gdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbiBcdTAwMjZcdTAwMjZcbjMzNDU6XHRcdFx0XHQgICAoIW5ldGRldl91Y19lbXB0eSh0dW4tXHUwMDNlZGV2KSB8fFxuMzM0NjpcdFx0XHRcdCAgICAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpKSkge1xuMzM0NzpcdFx0XHRcdHJldCA9IC1FQlVTWTtcbjMzNDg6XHRcdFx0fSBlbHNlIHtcbjMzNDk6XHRcdFx0XHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1BSRV9UWVBFX0NIQU5HRSxcbjMzNTA6XHRcdFx0XHRcdFx0XHQgICAgICAgdHVuLVx1MDAzZWRldik7XG4zMzUxOlx0XHRcdFx0cmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTtcbjMzNTI6XHRcdFx0XHRpZiAocmV0KSB7XG4zMzUzOlx0XHRcdFx0XHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXHUwMDNlZGV2LFxuMzM1NDpcdFx0XHRcdFx0XHQgICBcJiMzNDtSZWZ1c2VkIHRvIGNoYW5nZSBkZXZpY2UgdHlwZVxcblwmIzM0Oyk7XG4zMzU1Olx0XHRcdFx0XHRicmVhaztcbjMzNTY6XHRcdFx0XHR9XG4zMzU3Olx0XHRcdFx0dHVuLVx1MDAzZWRldi1cdTAwM2V0eXBlID0gKGludCkgYXJnO1xuMzM1ODpcdFx0XHRcdHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSk7XG4zMzU5Olx0XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldiwgXCYjMzQ7bGlua3R5cGUgc2V0IHRvICVkXFxuXCYjMzQ7LFxuMzM2MDpcdFx0XHRcdFx0ICAgdHVuLVx1MDAzZWRldi1cdTAwM2V0eXBlKTtcbjMzNjE6XHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1BPU1RfVFlQRV9DSEFOR0UsXG4zMzYyOlx0XHRcdFx0XHRcdFx0IHR1bi1cdTAwM2VkZXYpO1xuMzM2MzpcdFx0XHR9XG4zMzY0Olx0XHRcdGJyZWFrO1xuMzM2NTpcdFxuMzM2NjpcdFx0Y2FzZSBUVU5TRVRERUJVRzpcbjMzNjc6XHRcdFx0dHVuLVx1MDAzZW1zZ19lbmFibGUgPSAodTMyKWFyZztcbjMzNjg6XHRcdFx0YnJlYWs7XG4zMzY5Olx0XG4zMzcwOlx0XHRjYXNlIFRVTlNFVE9GRkxPQUQ6XG4zMzcxOlx0XHRcdHJldCA9IHNldF9vZmZsb2FkKHR1biwgYXJnKTtcbjMzNzI6XHRcdFx0YnJlYWs7XG4zMzczOlx0XG4zMzc0Olx0XHRjYXNlIFRVTlNFVFRYRklMVEVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHR1bl9nZXRfYWRkcl9sZW5gIGFuZCB0aGUgQnVnIEZpeCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB0dW5fZ2V0X2FkZHJfbGVuYCBmdW5jdGlvbiBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcyBzcGVjaWZpYyBidWcgYW5kIGl0cyBmaXguIE15IGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGVyZSBpdCYjMzk7cyB1c2VkIGFuZCwgaG9wZWZ1bGx5LCBjbHVlcyBhYm91dCBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29udGV4dC4gVGhhdCYjMzk7bGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlIHRoYXQmIzM5O3MgYmVlbiBmbGFnZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fZ2V0X2FkZHJfbGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTMxMzI9c3RhdGljIGludCB0dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxNTItLyogUmV0dXJuIGNvcnJlY3QgdmFsdWUgZm9yIHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gYmFzZWQgb24gdHVuLVx1MDAzZWRldi1cdTAwM2V0eXBlLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzE1MzpzdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXG5kcml2ZXJzL25ldC90dW4uYy0zMTU0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zMTkxPXN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMzQzLVx0XHRcdHJldCA9IC1FQlVTWTtcbmRyaXZlcnMvbmV0L3R1bi5jOjMzNDQ6XHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC90dW4uYy0zMzQ1LVx0XHRcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cdTAwM2VkZXYpIHx8XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzM1Ny1cdFx0XHR0dW4tXHUwMDNlZGV2LVx1MDAzZXR5cGUgPSAoaW50KSBhcmc7XG5kcml2ZXJzL25ldC90dW4uYzozMzU4Olx0XHRcdHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSk7XG5kcml2ZXJzL25ldC90dW4uYy0zMzU5LVx0XHRcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O2xpbmt0eXBlIHNldCB0byAlZFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHR1bl9nZXRfYWRkcl9sZW5gIGZ1bmN0aW9uLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgYSBzcGVjaWZpYyBlZGdlIGNhc2UuICoqSW52ZXN0aWdhdGluZyBgdHVuX2dldF9hZGRyX2xlbmAmIzM5O3MgQmVoYXZpb3Igd2l0aCBOb24tRW1wdHkgVUMvTUMgTGlzdHMqKi4gTXkgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyBgYWRkcl9sZW5gIGV2ZW4gd2hlbiB0aGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgbGlzdHMgYXJlbiYjMzk7dCBlbXB0eT8gSXQgY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nLCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYywgYmVoYXZpb3IsIGRlcGVuZGluZyBvbiB0aGUgaW50ZW5kZWQgZGVzaWduLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgaW50byBgZHJpdmVycy9uZXQvdHVuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE1My4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9naWMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHJlc2lkZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGluIHRoYXQgZnVuY3Rpb24sIGFuZCBob3cgaXQgaGFuZGxlcyB0aG9zZSBsaXN0IGNvbmRpdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0aW9uIGluZmx1ZW5jZXMgdGhlIG92ZXJhbGwgYWRkcmVzcyBsZW5ndGggZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1MDpcdH1cbjMxNTE6XHRcbjMxNTI6XHQvKiBSZXR1cm4gY29ycmVjdCB2YWx1ZSBmb3IgdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbiBiYXNlZCBvbiB0dW4tXHUwMDNlZGV2LVx1MDAzZXR5cGUuICovXG4zMTUzOlx0c3RhdGljIHVuc2lnbmVkIGNoYXIgdHVuX2dldF9hZGRyX2xlbih1bnNpZ25lZCBzaG9ydCB0eXBlKVxuMzE1NDpcdHtcbjMxNTU6XHRcdHN3aXRjaCAodHlwZSkge1xuMzE1NjpcdFx0Y2FzZSBBUlBIUkRfSVA2R1JFOlxuMzE1NzpcdFx0Y2FzZSBBUlBIUkRfVFVOTkVMNjpcbjMxNTg6XHRcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpO1xuMzE1OTpcdFx0Y2FzZSBBUlBIUkRfSVBHUkU6XG4zMTYwOlx0XHRjYXNlIEFSUEhSRF9UVU5ORUw6XG4zMTYxOlx0XHRjYXNlIEFSUEhSRF9TSVQ6XG4zMTYyOlx0XHRcdHJldHVybiA0O1xuMzE2MzpcdFx0Y2FzZSBBUlBIUkRfRVRIRVI6XG4zMTY0Olx0XHRcdHJldHVybiBFVEhfQUxFTjtcbjMxNjU6XHRcdGNhc2UgQVJQSFJEX0lFRUU4MDIxNTQ6XG4zMTY2Olx0XHRjYXNlIEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1I6XG4zMTY3Olx0XHRcdHJldHVybiBJRUVFODAyMTU0X0VYVEVOREVEX0FERFJfTEVOO1xuMzE2ODpcdFx0Y2FzZSBBUlBIUkRfUEhPTkVUX1BJUEU6XG4zMTY5Olx0XHRjYXNlIEFSUEhSRF9QUFA6XG4zMTcwOlx0XHRjYXNlIEFSUEhSRF9OT05FOlxuMzE3MTpcdFx0XHRyZXR1cm4gMDtcbjMxNzI6XHRcdGNhc2UgQVJQSFJEXzZMT1dQQU46XG4zMTczOlx0XHRcdHJldHVybiBFVUk2NF9BRERSX0xFTjtcbjMxNzQ6XHRcdGNhc2UgQVJQSFJEX0ZEREk6XG4zMTc1Olx0XHRcdHJldHVybiBGRERJX0tfQUxFTjtcbjMxNzY6XHRcdGNhc2UgQVJQSFJEX0hJUFBJOlxuMzE3NzpcdFx0XHRyZXR1cm4gSElQUElfQUxFTjtcbjMxNzg6XHRcdGNhc2UgQVJQSFJEX0lFRUU4MDI6XG4zMTc5Olx0XHRcdHJldHVybiBGQ19BTEVOO1xuMzE4MDpcdFx0Y2FzZSBBUlBIUkRfUk9TRTpcbjMxODE6XHRcdFx0cmV0dXJuIFJPU0VfQUREUl9MRU47XG4zMTgyOlx0XHRjYXNlIEFSUEhSRF9ORVRST006XG4zMTgzOlx0XHRcdHJldHVybiBBWDI1X0FERFJfTEVOO1xuMzE4NDpcdFx0Y2FzZSBBUlBIUkRfTE9DQUxUTEs6XG4zMTg1Olx0XHRcdHJldHVybiBMVEFMS19BTEVOO1xuMzE4NjpcdFx0ZGVmYXVsdDpcbjMxODc6XHRcdFx0cmV0dXJuIDA7XG4zMTg4Olx0XHR9XG4zMTg5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTg2CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDg1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRVTlNFVExJTksgQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYFRVTlNFVExJTktgIGNoYW5nZXMgYHR1bi0mZ3Q7ZGV2LSZndDt0eXBlYCwgaXQgYWxzbyBjaGFuZ2VzIGB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW5gLiBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdW5pY2FzdCAoYGRldi0mZ3Q7dWNgKSBvciBtdWx0aWNhc3QgKGBkZXYtJmd0O21jYCkgYWRkcmVzc2VzIG9uIHRoZSBkZXZpY2UsIHRoaXMgY2FuIGxlYWQgdG8gc2VyaW91cyBwcm9ibGVtcy4gT3BlcmF0aW9ucyB1c2luZyB0aG9zZSBsaXN0cyAoZmx1c2hpbmcsIGNvbXBhcmluZywgaXRlcmF0aW5nLCBhZGRpbmcvZGVsZXRpbmcpIHRoZW4gdXNlIHRoZSAqbmV3KiBgZGV2LSZndDthZGRyX2xlbmAsIGJ1dCB0aGUgZXhpc3RpbmcgZW50cmllcyBzdGlsbCBoYXZlIHRoZSAqb2xkKiBsZW5ndGguIFRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIGhhc2ggdGFibGUgbWlzbWF0Y2hlcywgYW5kLCB1bHRpbWF0ZWx5LCBtZW1vcnkgY29ycnVwdGlvbi4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBjb21taXQgaGlzdG9yeSwgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgZGV2X3VjYCBhbmQgYGRldl9tY2AgaW50ZXJhY3Qgd2l0aCBgZGV2LSZndDthZGRyX2xlbmAgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gTG9va2luZyBhdCBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AsIG1ldGhvZHMgbGlrZSBgX19od19hZGRyX2RlbGAgYW5kIGBfX2h3X2FkZHJfYWRkYCBjbGVhcmx5IHVzZSBgYWRkcl9sZW5gIGRlcml2ZWQgZnJvbSBgZGV2LSZndDthZGRyX2xlbmAsIGNvbmZpcm1pbmcgdGhlIHZ1bG5lcmFiaWxpdHkuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgc2FuaXR5IGNoZWNrLCB3aGljaCBpcyBnb29kLiBJdCBkb2VzIHNvbWV0aGluZyBsaWtlOiBgZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi0mZ3Q7ZGV2LSZndDthZGRyX2xlbiAmYW1wOyZhbXA7ICghbmV0ZGV2X3VjX2VtcHR5KHR1bi0mZ3Q7ZGV2KSB8fCAhbmV0ZGV2X21jX2VtcHR5KHR1bi0mZ3Q7ZGV2KSkpIHsgcmV0ID0gLUVCVVNZOyB9YC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGxlbmd0aCBjaGFuZ2Ugd2hlbiB0aGUgbGlzdHMgYXJlbiYjMzk7dCBlbXB0eSwgcmV0dXJuaW5nIGFuIGVycm9yLiBUaGF0JiMzOTtzIGEgc29saWQgZGVmZW5zZS4KCk5vdywgbGV0JiMzOTtzIGFuYWx5emUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSAqbmV3KiByaXNrcy4gRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgcmVhZHMgYGFyZ2AsIGB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW5gLCBhbmQgY2hlY2tzIGBuZXRkZXZfdWNfZW1wdHlgIGFuZCBgbmV0ZGV2X21jX2VtcHR5YCB3aGljaCBjaGVjayBpZiB0aGUgbGlzdCBpcyBlbXB0eSAobGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7dWMubGlzdCkgZXRjLikuIERvZXMgaXQgY29weSBhbnl0aGluZyB0byB1c2Vyc3BhY2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzPyBOby4gRG9lcyBpdCBtZXNzIHdpdGggYm91bmRzIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwPyBOb3BlLiBJdCYjMzk7cyBzdHJpY3RseSAqcmVzdHJpY3RpdmUqLgoKR2l2ZW4gdGhhdCwgdGhlIGJ1ZyBpcyBhYm91dCAqcHJldmVudGluZyogb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSBsZW5ndGggbWlzbWF0Y2hlcyBpbiB0aGUgYG5ldF9kZXZpY2VgIGFkZHJlc3MgbGlzdHMuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgdHlwZSBvZiBpc3N1ZSwgc2luY2UgS0FTQU4gZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCkxldCBtZSBmb3JtdWxhdGUgdGhlIGBLTVNBTlJlYXNvbmluZ2AgdG8gYmUgYXMgY2xlYXIgYXMgcG9zc2libGUuIFRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIHVuZGVyIGBUVU5TRVRMSU5LYCB0byBkaXNhbGxvdyBjaGFuZ2luZyB0aGUgbmV0d29yayBkZXZpY2UgbGluayB0eXBlIChhbmQgdGhlcmVmb3JlIGBkZXYtJmd0O2FkZHJfbGVuYCkgaWYgdGhlIGRldmljZSYjMzk7cyB1bmljYXN0IChgZGV2LSZndDt1Y2ApIG9yIG11bHRpY2FzdCAoYGRldi0mZ3Q7bWNgKSBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFRoaXMgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2hlcyBpbiBleGlzdGluZyBhZGRyZXNzIGxpc3QgZW50cmllcywgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgYWRkcmVzcyBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHN1YnNlcXVlbnQgYWRkcmVzcyBsb29rdXBzL21vZGlmaWNhdGlvbnMgKGlzc3VlcyBjb3ZlcmVkIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLgoKUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIGZvciB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgaXQgcmVqZWN0cyBjaGFuZ2luZyB0aGUgZGV2aWNlIHR5cGUgaWYgdGhlIG5ldyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBgZGV2LVx1MDAzZWFkZHJfbGVuYCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFxuXG5UaGlzIGNoYW5nZSBwcmV2ZW50cyBhZGRyZXNzIGxlbmd0aCBtaXNtYXRjaCBpc3N1ZXMgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIG9wZXJhdGluZyBvbiBleGlzdGluZyBgZGV2LVx1MDAzZXVjYCBhbmQgYGRldi1cdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYF9fdHVuX2Nocl9pb2N0bCgpYCBmb3IgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIGl0IHJlamVjdHMgY2hhbmdpbmcgdGhlIGRldmljZSB0eXBlIGlmIHRoZSBuZXcgYWRkcmVzcyBsZW5ndGggKGB0dW5fZ2V0X2FkZHJfbGVuKGFyZylgKSBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgYGRldi1cdTAwM2VhZGRyX2xlbmAgd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBhcmUgbm9uLWVtcHR5LiBcblxuVGhpcyBjaGFuZ2UgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2ggaXNzdWVzIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBvcGVyYXRpbmcgb24gZXhpc3RpbmcgYGRldi1cdTAwM2V1Y2AgYW5kIGBkZXYtXHUwMDNlbWNgIGxpc3RzICh3aGljaCBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NTcuNTM4MDk4Nzg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3OTU3MDI0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcIl9fdHVuX2Nocl9pb2N0bFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYF9fdHVuX2Nocl9pb2N0bCgpYCBmb3IgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIGl0IHJlamVjdHMgY2hhbmdpbmcgdGhlIGRldmljZSB0eXBlIGlmIHRoZSBuZXcgYWRkcmVzcyBsZW5ndGggKGB0dW5fZ2V0X2FkZHJfbGVuKGFyZylgKSBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgYGRldi1cXHUwMDNlYWRkcl9sZW5gIHdoaWxlIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgYXJlIG5vbi1lbXB0eS4gXFxuXFxuVGhpcyBjaGFuZ2UgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2ggaXNzdWVzIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBvcGVyYXRpbmcgb24gZXhpc3RpbmcgYGRldi1cXHUwMDNldWNgIGFuZCBgZGV2LVxcdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBUVU4gZHJpdmVyJ3MgVFVOU0VUTElOSyBpb2N0bCBoYW5kbGVyIChfX3R1bl9jaHJfaW9jdGwpIHRvIHJlamVjdCBsaW5rIHR5cGUgY2hhbmdlcyB3aXRoIC1FQlVTWSBpZiB0aGUgbmV3IGxpbmsgdHlwZSBoYXMgYSBkaWZmZXJlbnQgYWRkcmVzcyBsZW5ndGggd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBvbiB0aGUgbmV0ZGV2aWNlIGFyZSBub3QgZW1wdHkuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUwOjU3LjUzODEwMzQ0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3ODAzMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmU5NjlmZWE4MDZiMDc5NzhmMzY4ZTQ5OGY5ZGZkMGZiYzAyYWM5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuQEAgLTMzNDEsNiArMzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiTGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0fSBlbHNlIGlmICh0dW5fZ2V0X2FkZHJfbGVuKGFyZykgIT0gdHVuLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cXHUwMDNlZGV2KSB8fFxcbitcXHRcXHRcXHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXFx1MDAzZWRldikpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB0dW4tXFx1MDAzZWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUwOjU3LjkxNjU4MTk5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzA5MzM0MTg0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX2Nocl9pb2N0bFwiLFxuICAgIFwiX190dW5fY2hyX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIFRVTiBkcml2ZXIncyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmU5NjlmZWE4MDZiMDc5NzhmMzY4ZTQ5OGY5ZGZkMGZiYzAyYWM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTMzNDEsNiArMzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbiBcdFx0XHRcdCAgIFwiTGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxcblwiKTtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVx1MDAzZWRldikgfHxcbitcdFx0XHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXHUwMDNlZGV2KSkpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NTcuOTE2NTgzNjcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyMzc4NDA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFR1biBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQuIEknbGwgc3RhcnQgYnkgaW5zcGVjdGluZyB0aGUgZGlmZiB0byBnZXQgYSBnZW5lcmFsIG92ZXJ2aWV3IG9mIHRoZSBtb2RpZmljYXRpb25zLiBUaGVuLCBJJ2xsIHplcm8gaW4gb24gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZHJpdmVycy9uZXQvdHVuLmNgLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBuZXR3b3JrLXJlbGF0ZWQgaXNzdWVzLCB0aGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJ2xsIGxldmVyYWdlIG15IHVzdWFsIHdvcmtmbG93LiBJIHdpbGwgdXNlIGEgYHJlYWQtZmlsZWAgY29tbWFuZCwgdG8gcGlucG9pbnQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzM0MSB3aXRoaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhhdCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTowMi41NDAzNzA0OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMzMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMzMxOlxcdFxcdFxcdH1cXG4zMzMyOlxcdFxcdFxcdFdSSVRFX09OQ0UodHVuLVxcdTAwM2Vncm91cCwgZ3JvdXApO1xcbjMzMzM6XFx0XFx0XFx0ZG9fbm90aWZ5ID0gdHJ1ZTtcXG4zMzM0OlxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwiZ3JvdXAgc2V0IHRvICV1XFxcXG5cXFwiLFxcbjMzMzU6XFx0XFx0XFx0XFx0ICAgZnJvbV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGdyb3VwKSk7XFxuMzMzNjpcXHRcXHRcXHRicmVhaztcXG4zMzM3OlxcdFxcbjMzMzg6XFx0XFx0Y2FzZSBUVU5TRVRMSU5LOlxcbjMzMzk6XFx0XFx0XFx0LyogT25seSBhbGxvdyBzZXR0aW5nIHRoZSB0eXBlIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duICovXFxuMzM0MDpcXHRcXHRcXHRpZiAodHVuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxuMzM0MTpcXHRcXHRcXHRcXHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXFx1MDAzZWRldixcXG4zMzQyOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXFxcXG5cXFwiKTtcXG4zMzQzOlxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4zMzQ0OlxcdFxcdFxcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiBcXHUwMDI2XFx1MDAyNlxcbjMzNDU6XFx0XFx0XFx0XFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVxcdTAwM2VkZXYpIHx8XFxuMzM0NjpcXHRcXHRcXHRcXHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXFx1MDAzZWRldikpKSB7XFxuMzM0NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuMzM0ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjMzNDk6XFx0XFx0XFx0XFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXFxuMzM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHVuLVxcdTAwM2VkZXYpO1xcbjMzNTE6XFx0XFx0XFx0XFx0cmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTtcXG4zMzUyOlxcdFxcdFxcdFxcdGlmIChyZXQpIHtcXG4zMzUzOlxcdFxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LFxcbjMzNTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIlJlZnVzZWQgdG8gY2hhbmdlIGRldmljZSB0eXBlXFxcXG5cXFwiKTtcXG4zMzU1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNTY6XFx0XFx0XFx0XFx0fVxcbjMzNTc6XFx0XFx0XFx0XFx0dHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPSAoaW50KSBhcmc7XFxuMzM1ODpcXHRcXHRcXHRcXHR0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlKTtcXG4zMzU5OlxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwibGlua3R5cGUgc2V0IHRvICVkXFxcXG5cXFwiLFxcbjMzNjA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUpO1xcbjMzNjE6XFx0XFx0XFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFLFxcbjMzNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHR1bi1cXHUwMDNlZGV2KTtcXG4zMzYzOlxcdFxcdFxcdH1cXG4zMzY0OlxcdFxcdFxcdGJyZWFrO1xcbjMzNjU6XFx0XFxuMzM2NjpcXHRcXHRjYXNlIFRVTlNFVERFQlVHOlxcbjMzNjc6XFx0XFx0XFx0dHVuLVxcdTAwM2Vtc2dfZW5hYmxlID0gKHUzMilhcmc7XFxuMzM2ODpcXHRcXHRcXHRicmVhaztcXG4zMzY5OlxcdFxcbjMzNzA6XFx0XFx0Y2FzZSBUVU5TRVRPRkZMT0FEOlxcbjMzNzE6XFx0XFx0XFx0cmV0ID0gc2V0X29mZmxvYWQodHVuLCBhcmcpO1xcbjMzNzI6XFx0XFx0XFx0YnJlYWs7XFxuMzM3MzpcXHRcXG4zMzc0OlxcdFxcdGNhc2UgVFVOU0VUVFhGSUxURVI6XFxuMzM3NTpcXHRcXHRcXHQvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi9cXG4zMzc2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzM3NzpcXHRcXHRcXHRpZiAoKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxcbjMzNzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzM3OTpcXHRcXHRcXHRyZXQgPSB1cGRhdGVfZmlsdGVyKFxcdTAwMjZ0dW4tXFx1MDAzZXR4Zmx0LCAodm9pZCBfX3VzZXIgKilhcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTowMi41NDA1MTY5MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjQ1OTY3MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGB0dW5fY2hyX2lvY3RsYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZnVuY3Rpb24gdGhhdCBjb250YWlucyB0aGUgY3VycmVudCBjb2RlIHNuaXBwZXQg4oCTIHVuZGVyc3RhbmRpbmcgaXRzIGltbWVkaWF0ZSBjb250ZXh0IGlzIGNydWNpYWwuIFRoZW4sIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGlzIGBfX3R1bl9jaHJfaW9jdGxgIG9yIGB0dW5fY2hyX2lvY3RsYCBmdW5jdGlvbi4gQSBxdWljayBgZ3JlcGAgbWlnaHQgYmUgaGVscGZ1bCB0byB1bmNvdmVyIGFsbCB0aGUgY2FsbCBzaXRlcywgb3IgSSBjYW4ganVzdCBjYXJlZnVsbHkgcmVhZCB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBHZXR0aW5nIGEgc2Vuc2Ugb2YgdGhlIGV4ZWN1dGlvbiBmbG93IHdpbGwgYmUgaW1wb3J0YW50LiBJJ2xsIHByb2JhYmx5IGFsc28gbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZmlsZSwgbWF5YmUgZXZlbiBhIGZldyBsaW5lcyBiZWZvcmUgdG8gZ3Jhc3AgdGhlIHNpdHVhdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgdGhhdCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjEwLjc4NjQ4Nzc5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMjAwOlxcdFxcdGt1aWRfdCBvd25lcjtcXG4zMjAxOlxcdFxcdGtnaWRfdCBncm91cDtcXG4zMjAyOlxcdFxcdGludCBpZmluZGV4O1xcbjMyMDM6XFx0XFx0aW50IHNuZGJ1ZjtcXG4zMjA0OlxcdFxcdGludCByZXQ7XFxuMzIwNTpcXHRcXHRib29sIGRvX25vdGlmeSA9IGZhbHNlO1xcbjMyMDY6XFx0XFxuMzIwNzpcXHRcXHRpZiAoY21kID09IFRVTlNFVElGRiB8fCBjbWQgPT0gVFVOU0VUUVVFVUUgfHxcXG4zMjA4OlxcdFxcdCAgICAoX0lPQ19UWVBFKGNtZCkgPT0gU09DS19JT0NfVFlQRSBcXHUwMDI2XFx1MDAyNiBjbWQgIT0gU0lPQ0dTS05TKSkge1xcbjMyMDk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZpZnIsIGFyZ3AsIGlmcmVxX2xlbikpXFxuMzIxMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMjExOlxcdFxcdH0gZWxzZSB7XFxuMzIxMjpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmlmciwgMCwgc2l6ZW9mKGlmcikpO1xcbjMyMTM6XFx0XFx0fVxcbjMyMTQ6XFx0XFx0aWYgKGNtZCA9PSBUVU5HRVRGRUFUVVJFUykge1xcbjMyMTU6XFx0XFx0XFx0LyogQ3VycmVudGx5IHRoaXMganVzdCBtZWFuczogXFxcIndoYXQgSUZGIGZsYWdzIGFyZSB2YWxpZD9cXFwiLlxcbjMyMTY6XFx0XFx0XFx0ICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZXZlciBjaGVja2VkIGZvciBpbnZhbGlkIGZsYWdzIG9uXFxuMzIxNzpcXHRcXHRcXHQgKiBUVU5TRVRJRkYuXFxuMzIxODpcXHRcXHRcXHQgKi9cXG4zMjE5OlxcdFxcdFxcdHJldHVybiBwdXRfdXNlcihJRkZfVFVOIHwgSUZGX1RBUCB8IElGRl9OT19DQVJSSUVSIHxcXG4zMjIwOlxcdFxcdFxcdFxcdFxcdFRVTl9GRUFUVVJFUywgKHVuc2lnbmVkIGludCBfX3VzZXIqKWFyZ3ApO1xcbjMyMjE6XFx0XFx0fSBlbHNlIGlmIChjbWQgPT0gVFVOU0VUUVVFVUUpIHtcXG4zMjIyOlxcdFxcdFxcdHJldHVybiB0dW5fc2V0X3F1ZXVlKGZpbGUsIFxcdTAwMjZpZnIpO1xcbjMyMjM6XFx0XFx0fSBlbHNlIGlmIChjbWQgPT0gU0lPQ0dTS05TKSB7XFxuMzIyNDpcXHRcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4zMjI1OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMzIyNjpcXHRcXHRcXHRyZXR1cm4gb3Blbl9yZWxhdGVkX25zKFxcdTAwMjZuZXQtXFx1MDAzZW5zLCBnZXRfbmV0X25zKTtcXG4zMjI3OlxcdFxcdH1cXG4zMjI4OlxcdFxcbjMyMjk6XFx0XFx0cnRubF9sb2NrKCk7XFxuMzIzMDpcXHRcXG4zMjMxOlxcdFxcdHR1biA9IHR1bl9nZXQodGZpbGUpO1xcbjMyMzI6XFx0XFx0aWYgKGNtZCA9PSBUVU5TRVRJRkYpIHtcXG4zMjMzOlxcdFxcdFxcdHJldCA9IC1FRVhJU1Q7XFxuMzIzNDpcXHRcXHRcXHRpZiAodHVuKVxcbjMyMzU6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzIzNjpcXHRcXG4zMjM3OlxcdFxcdFxcdGlmci5pZnJfbmFtZVtJRk5BTVNJWi0xXSA9ICdcXFxcMCc7XFxuMzIzODpcXHRcXG4zMjM5OlxcdFxcdFxcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXFx1MDAyNmlmcik7XFxuMzI0MDpcXHRcXG4zMjQxOlxcdFxcdFxcdGlmIChyZXQpXFxuMzI0MjpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjQzOlxcdFxcbjMyNDQ6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2aWZyLCBpZnJlcV9sZW4pKVxcbjMyNDU6XFx0XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4zMjQ2OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjMyNDc6XFx0XFx0fVxcbjMyNDg6XFx0XFx0aWYgKGNtZCA9PSBUVU5TRVRJRklOREVYKSB7XFxuMzI0OTpcXHRcXHRcXHRyZXQgPSAtRVBFUk07XFxuMzI1MDpcXHRcXHRcXHRpZiAodHVuKVxcbjMyNTE6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzI1MjpcXHRcXG4zMjUzOlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMzI1NDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmlmaW5kZXgsIGFyZ3AsIHNpemVvZihpZmluZGV4KSkpXFxuMzI1NTpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjU2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzI1NzpcXHRcXHRcXHRpZiAoaWZpbmRleCBcXHUwMDNjIDApXFxuMzI1ODpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjU5OlxcdFxcdFxcdHJldCA9IDA7XFxuMzI2MDpcXHRcXHRcXHR0ZmlsZS1cXHUwMDNlaWZpbmRleCA9IGlmaW5kZXg7XFxuMzI2MTpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjYyOlxcdFxcdH1cXG4zMjYzOlxcdFxcbjMyNjQ6XFx0XFx0cmV0ID0gLUVCQURGRDtcXG4zMjY1OlxcdFxcdGlmICghdHVuKVxcbjMyNjY6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzI2NzpcXHRcXG4zMjY4OlxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwidHVuX2Nocl9pb2N0bCBjbWQgJXVcXFxcblxcXCIsIGNtZCk7XFxuMzI2OTpcXHRcXG4zMjcwOlxcdFxcdG5ldCA9IGRldl9uZXQodHVuLVxcdTAwM2VkZXYpO1xcbjMyNzE6XFx0XFx0cmV0ID0gMDtcXG4zMjcyOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuMzI3MzpcXHRcXHRjYXNlIFRVTkdFVElGRjpcXG4zMjc0OlxcdFxcdFxcdHR1bl9nZXRfaWZmKHR1biwgXFx1MDAyNmlmcik7XFxuMzI3NTpcXHRcXG4zMjc2OlxcdFxcdFxcdGlmICh0ZmlsZS1cXHUwMDNlZGV0YWNoZWQpXFxuMzI3NzpcXHRcXHRcXHRcXHRpZnIuaWZyX2ZsYWdzIHw9IElGRl9ERVRBQ0hfUVVFVUU7XFxuMzI3ODpcXHRcXHRcXHRpZiAoIXRmaWxlLVxcdTAwM2Vzb2NrZXQuc2stXFx1MDAzZXNrX2ZpbHRlcilcXG4zMjc5OlxcdFxcdFxcdFxcdGlmci5pZnJfZmxhZ3MgfD0gSUZGX05PRklMVEVSO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MToxMC43ODY2NDI2ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODEyMzk2MDY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHR1bl9jaHJfaW9jdGxgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgdHVuX2Nocl9pb2N0bGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IGRlZmluaXRpb24uIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBsb29rZWQgYXQgdGhlIGxvdy1sZXZlbCBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSBmb3IgdGhlIFRVTiBkcml2ZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIHNvdXJjZSBhbmQgY29uZmlybWluZyBob3cgaXQgaGFuZGxlcyB0aG9zZSBpb2N0bCBjYWxscy4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHNlZSB3aGljaCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciB1c2VyLXNwYWNlIHByb2Nlc3NlcyBhcmUgKmNhbGxpbmcqIGB0dW5fY2hyX2lvY3RsYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gV2hhdCBmdW5jdGlvbmFsaXR5IGlzIHJlbHlpbmcgb24gdGhlc2UgaW9jdGxzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHN0YW5kYXJkIFRVTi9UQVAgb3BlcmF0aW9ucywgb3IgYXJlIHRoZXJlIGN1c3RvbSBleHRlbnNpb25zIGluIHBsYXk/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgbWFwIHRoZSBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjI4LjkxMDYwNTg1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDMwOlxcdFxcdFxcdGJyZWFrO1xcbjM0MzE6XFx0XFxuMzQzMjpcXHRcXHRjYXNlIFRVTkRFVEFDSEZJTFRFUjpcXG4zNDMzOlxcdFxcdFxcdC8qIENhbiBiZSBzZXQgb25seSBmb3IgVEFQcyAqL1xcbjM0MzQ6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4zNDM1OlxcdFxcdFxcdGlmICgodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRVTl9UWVBFX01BU0spICE9IElGRl9UQVApXFxuMzQzNjpcXHRcXHRcXHRcXHRicmVhaztcXG4zNDM3OlxcdFxcdFxcdHJldCA9IDA7XFxuMzQzODpcXHRcXHRcXHR0dW5fZGV0YWNoX2ZpbHRlcih0dW4sIHR1bi1cXHUwMDNlbnVtcXVldWVzKTtcXG4zNDM5OlxcdFxcdFxcdGJyZWFrO1xcbjM0NDA6XFx0XFxuMzQ0MTpcXHRcXHRjYXNlIFRVTkdFVEZJTFRFUjpcXG4zNDQyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzQ0MzpcXHRcXHRcXHRpZiAoKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxcbjM0NDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzQ0NTpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjM0NDY6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2dHVuLVxcdTAwM2VmcHJvZywgc2l6ZW9mKHR1bi1cXHUwMDNlZnByb2cpKSlcXG4zNDQ3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0NDg6XFx0XFx0XFx0cmV0ID0gMDtcXG4zNDQ5OlxcdFxcdFxcdGJyZWFrO1xcbjM0NTA6XFx0XFxuMzQ1MTpcXHRcXHRjYXNlIFRVTlNFVFNURUVSSU5HRUJQRjpcXG4zNDUyOlxcdFxcdFxcdHJldCA9IHR1bl9zZXRfZWJwZih0dW4sIFxcdTAwMjZ0dW4tXFx1MDAzZXN0ZWVyaW5nX3Byb2csIGFyZ3ApO1xcbjM0NTM6XFx0XFx0XFx0YnJlYWs7XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdFxcdGNhc2UgVFVOU0VURklMVEVSRUJQRjpcXG4zNDU2OlxcdFxcdFxcdHJldCA9IHR1bl9zZXRfZWJwZih0dW4sIFxcdTAwMjZ0dW4tXFx1MDAzZWZpbHRlcl9wcm9nLCBhcmdwKTtcXG4zNDU3OlxcdFxcdFxcdGJyZWFrO1xcbjM0NTg6XFx0XFxuMzQ1OTpcXHRcXHRjYXNlIFRVTlNFVENBUlJJRVI6XFxuMzQ2MDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjM0NjE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjYXJyaWVyLCBhcmdwLCBzaXplb2YoY2FycmllcikpKVxcbjM0NjI6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzQ2MzpcXHRcXG4zNDY0OlxcdFxcdFxcdHJldCA9IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIodHVuLVxcdTAwM2VkZXYsIChib29sKWNhcnJpZXIpO1xcbjM0NjU6XFx0XFx0XFx0YnJlYWs7XFxuMzQ2NjpcXHRcXG4zNDY3OlxcdFxcdGNhc2UgVFVOR0VUREVWTkVUTlM6XFxuMzQ2ODpcXHRcXHRcXHRyZXQgPSAtRVBFUk07XFxuMzQ2OTpcXHRcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4zNDcwOlxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjM0NzE6XFx0XFx0XFx0cmV0ID0gb3Blbl9yZWxhdGVkX25zKFxcdTAwMjZuZXQtXFx1MDAzZW5zLCBnZXRfbmV0X25zKTtcXG4zNDcyOlxcdFxcdFxcdGJyZWFrO1xcbjM0NzM6XFx0XFxuMzQ3NDpcXHRcXHRkZWZhdWx0OlxcbjM0NzU6XFx0XFx0XFx0cmV0ID0gdHVuX3ZuZXRfaW9jdGwoXFx1MDAyNnR1bi1cXHUwMDNldm5ldF9oZHJfc3osIFxcdTAwMjZ0dW4tXFx1MDAzZWZsYWdzLCBjbWQsIGFyZ3ApO1xcbjM0NzY6XFx0XFx0XFx0YnJlYWs7XFxuMzQ3NzpcXHRcXHR9XFxuMzQ3ODpcXHRcXG4zNDc5OlxcdFxcdGlmIChkb19ub3RpZnkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjI4LjkxMDc4Njg3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NzQwMjcwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3Rpbmc6XG5cbioqRXhhbWluaW5nIExpbmUgMzQ4MCBhbmQgQmV5b25kKipcblxuQWxyaWdodCwgSSdtIGF0IGxpbmUgMzQ4MC4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgd2hhdCBJIGRvIGFib3V0IHRoaXMgY29kZWJhc2UsIEkgaGF2ZSBhIGZldyBpbW1lZGlhdGUgdGhpbmdzIEknbSBsb29raW5nIGZvci4gSXMgdGhpcyBhIGNyaXRpY2FsIHNlY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQ/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb24sIGEgZnVuY3Rpb24gY2FsbCwgYSBzcGVjaWZpYyBhbGdvcml0aG0gaW1wbGVtZW50YXRpb24sIG9yIG1lcmVseSBhIGNvbW1lbnQ/IEJhc2VkIG9uIHRoZSBjdXJyZW50IG1vZHVsZSBjb250ZXh0LCB0aGUgc3Vycm91bmRpbmcgdmFyaWFibGVzLCBhbmQgdGhlIG92ZXJhbGwgcHJvZ3JhbSBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBsaW5lIHNpZ25pZmllcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gcmVjb25zdHJ1Y3QgdGhlIGNvbnRyb2wgZmxvdyB0aGF0IHdpbGwgYnJpbmcgdGhlIHByb2dyYW0gdG8gdGhpcyBzcGVjaWZpYyBsaW5lLiBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwcmVjb25kaXRpb25zLCB0aGUgcG9zc2libGUgaW5wdXRzIHRoYXQgY291bGQgYmUgY2F1c2luZyB0aGlzIGxpbmUgdG8gYmUgZXhlY3V0ZWQsIGFuZCB0aGUgc3Vic2VxdWVudCBsb2dpYyB0aGlzIGxpbmUgbWlnaHQgdHJpZ2dlci4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgcGFyc2UgdGhlIHN5bnRheCwgaWRlbnRpZnkgYW55IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYmVpbmcgdXNlZCwgYW5kIGRldGVybWluZSB0aGVpciBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdtIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiwgbGlrZSByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBpc3N1ZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIGFsc28gaGF2ZSB0byBrZWVwIG15IGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIHBhdHRlcm5zIG9yIGxvZ2ljIHRoYXQgc2VlbXMgb3V0IG9mIHBsYWNlLCBwb3RlbnRpYWxseSBpbmRpY2F0aW5nIGEgYnVnIG9yIGFuIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eS4gVGhpcyBsaW5lIGlzIGp1c3QgYSBwb2ludCBpbiB0aW1lLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgcHJlc2VudCBhbmQgZnV0dXJlIHN0YXRlIHJlbGF0aXZlIHRvIHRoZSBjb2RlLCBhbmQgaG93IHRoZSBwcm9ncmFtIGFycml2ZWQgYXQgdGhpcyBtb21lbnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzYuMzg0ODE2NTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDgwOlxcdFxcdFxcdG5ldGRldl9zdGF0ZV9jaGFuZ2UodHVuLVxcdTAwM2VkZXYpO1xcbjM0ODE6XFx0XFxuMzQ4MjpcXHR1bmxvY2s6XFxuMzQ4MzpcXHRcXHRydG5sX3VubG9jaygpO1xcbjM0ODQ6XFx0XFx0aWYgKHR1bilcXG4zNDg1OlxcdFxcdFxcdHR1bl9wdXQodHVuKTtcXG4zNDg2OlxcdFxcdHJldHVybiByZXQ7XFxuMzQ4NzpcXHR9XFxuMzQ4ODpcXHRcXG4zNDg5OlxcdHN0YXRpYyBsb25nIHR1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuMzQ5MDpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjM0OTE6XFx0e1xcbjM0OTI6XFx0XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcXG4zNDkzOlxcdH1cXG4zNDk0OlxcdFxcbjM0OTU6XFx0I2lmZGVmIENPTkZJR19DT01QQVRcXG4zNDk2OlxcdHN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbjM0OTc6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjM0OTg6XFx0e1xcbjM0OTk6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4zNTAwOlxcdFxcdGNhc2UgVFVOU0VUSUZGOlxcbjM1MDE6XFx0XFx0Y2FzZSBUVU5HRVRJRkY6XFxuMzUwMjpcXHRcXHRjYXNlIFRVTlNFVFRYRklMVEVSOlxcbjM1MDM6XFx0XFx0Y2FzZSBUVU5HRVRTTkRCVUY6XFxuMzUwNDpcXHRcXHRjYXNlIFRVTlNFVFNOREJVRjpcXG4zNTA1OlxcdFxcdGNhc2UgU0lPQ0dJRkhXQUREUjpcXG4zNTA2OlxcdFxcdGNhc2UgU0lPQ1NJRkhXQUREUjpcXG4zNTA3OlxcdFxcdFxcdGFyZyA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKTtcXG4zNTA4OlxcdFxcdFxcdGJyZWFrO1xcbjM1MDk6XFx0XFx0ZGVmYXVsdDpcXG4zNTEwOlxcdFxcdFxcdGFyZyA9IChjb21wYXRfdWxvbmdfdClhcmc7XFxuMzUxMTpcXHRcXHRcXHRicmVhaztcXG4zNTEyOlxcdFxcdH1cXG4zNTEzOlxcdFxcbjM1MTQ6XFx0XFx0LypcXG4zNTE1OlxcdFxcdCAqIGNvbXBhdF9pZnJlcSBpcyBzaG9ydGVyIHRoYW4gaWZyZXEsIHNvIHdlIG11c3Qgbm90IGFjY2VzcyBiZXlvbmRcXG4zNTE2OlxcdFxcdCAqIHRoZSBlbmQgb2YgdGhhdCBzdHJ1Y3R1cmUuIEFsbCBmaWVsZHMgdGhhdCBhcmUgdXNlZCBpbiB0aGlzXFxuMzUxNzpcXHRcXHQgKiBkcml2ZXIgYXJlIGNvbXBhdGlibGUgdGhvdWdoLCB3ZSBkb24ndCBuZWVkIHRvIGNvbnZlcnQgdGhlXFxuMzUxODpcXHRcXHQgKiBjb250ZW50cy5cXG4zNTE5OlxcdFxcdCAqL1xcbjM1MjA6XFx0XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpKTtcXG4zNTIxOlxcdH1cXG4zNTIyOlxcdCNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovXFxuMzUyMzpcXHRcXG4zNTI0OlxcdHN0YXRpYyBpbnQgdHVuX2Nocl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKVxcbjM1MjU6XFx0e1xcbjM1MjY6XFx0XFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4zNTI3OlxcdFxcdGludCByZXQ7XFxuMzUyODpcXHRcXG4zNTI5OlxcdFxcdGlmIChvbikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTozNi4zODUxMzkyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1MDcwMzI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYHR1bl9jaHJfaW9jdGxgIFVzYWdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdHVuLmNgIGZpbGUuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgZGlmZmVyZW50IGZpbGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB1c2luZyB0aGlzIHNwZWNpZmljIGlvY3RsIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgYHR1bmAgZGV2aWNlIGRyaXZlci4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgc2VhcmNoaW5nIGZvciBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZSwgYW5kIHRoZW4gdHJ5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjM4LjIzNTg0NTg3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDA0MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MzE1Mz1zdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTkwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxOTE6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxOTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgaWZyZXFfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzI2Ny1cXG5kcml2ZXJzL25ldC90dW4uYzozMjY4OlxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwidHVuX2Nocl9pb2N0bCBjbWQgJXVcXFxcblxcXCIsIGNtZCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzI2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0ODgtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4OTpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0OTAtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC90dW4uYy0zNDkxLXtcXG5kcml2ZXJzL25ldC90dW4uYzozNDkyOlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZiAoc3RydWN0IGlmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5My19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDk2PXN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzUxOS1cXHQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzozNTIwOlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzUyMS19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNjE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzYyMi1cXHQucG9sbFxcdD0gdHVuX2Nocl9wb2xsLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2MjM6XFx0LnVubG9ja2VkX2lvY3RsXFx0PSB0dW5fY2hyX2lvY3RsLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2MjQtI2lmZGVmIENPTkZJR19DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzguMzUyODU1NTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzE3MTcxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkcyBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVFVOIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgYHR1bi5jYCBkcml2ZXIgaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBmaW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkcml2ZXIuIEknbGwgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGBkcml2ZXJzL25ldC90dW4uY2Agb3IsIG1vcmUgbGlrZWx5LCBhIEtjb25maWcgc3ltYm9sIHRpZWQgdG8gaXRzIGVuYWJsZW1lbnQuIFRoYXQgc2hvdWxkIHRlbGwgbWUgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGNvbnRyb2wgd2hldGhlciB0aGUgVFVOIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgYnVpbHQgYXMgYSBtb2R1bGUuXG5cbk5leHQsIGFzc3VtaW5nIEkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyAob3IgZXZlbiBpZiBJICpkb24ndCogZmluZCBhIGRpcmVjdCByZWZlcmVuY2UgYW5kIEkgbmVlZCBtb3JlIGNvbnRleHQpLCBJJ2xsIHBpdm90IGFuZCBleGFtaW5lIHRoZSBgTWFrZWZpbGVgIGluIGBkcml2ZXJzL25ldC9gLiBTcGVjaWZpY2FsbHksIEknbGwgYGdyZXBgIHRocm91Z2ggdGhlIGBNYWtlZmlsZWAgdG8gc2VlIGhvdyB0aG9zZSBjb25maWcgc3ltYm9scyBmcm9tIEtjb25maWcgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGB0dW4ub2AgaXMgYnVpbHQuIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb21waWxlciBkaXJlY3RpdmVzIGRlY2lkZSB3aGF0IGdldHMgY29tcGlsZWQgYmFzZWQgb24gdGhlIEtjb25maWcgb3B0aW9ucy4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZmluYWwgYW5zd2VyLiBIb3BlZnVsbHksIEkgY2FuIGNsZWFybHkgbWFwIHRoZSBjb25maWcgb3B0aW9ucyB0byB0aGUgZHJpdmVyJ3MgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjQyLjMyNDU3NTYwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzcxMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1blxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVUX1RFQU0pICs9IHRlYW0vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzI6b2JqLSQoQ09ORklHX1RVTikgKz0gdHVuLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zMy1vYmotJChDT05GSUdfVEFQKSArPSB0YXAub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQxPW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgKz0gZW4vaHZfdmhjYV9zdGF0cy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQyOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0VTV0lUQ0gpICAgICArPSBsYWcvbXAubyBsYWcvcG9ydF9zZWwubyBsaWIvZ2VuZXZlLm8gbGliL3BvcnRfdHVuLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00My1cXHRcXHRcXHRcXHRcXHRlbl9yZXAubyBlbi9yZXAvYm9uZC5vIGVuL21vZF9oZHIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NDU9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICs9IGVuX3RjLm8gZW4vcmVwL3RjLm8gZW4vcmVwL25laWdoLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0NjpcXHRcXHRcXHRcXHRcXHRsaWIvZnNfY2hhaW5zLm8gZW4vdGNfdHVuLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00Ny1cXHRcXHRcXHRcXHRcXHRlc3cvaW5kaXJfdGFibGUubyBlbi90Y190dW5fZW5jYXAubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NTM9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICs9IGVuL3RjL2FjdC9hY3QubyBlbi90Yy9hY3QvZHJvcC5vIGVuL3RjL2FjdC90cmFwLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01NC1cXHRcXHRcXHRcXHRcXHRlbi90Yy9hY3QvYWNjZXB0Lm8gZW4vdGMvYWN0L21hcmsubyBlbi90Yy9hY3QvZ290by5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NTU6XFx0XFx0XFx0XFx0XFx0ZW4vdGMvYWN0L3R1bi5vIGVuL3RjL2FjdC9jc3VtLm8gZW4vdGMvYWN0L3BlZGl0Lm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01Ni1cXHRcXHRcXHRcXHRcXHRlbi90Yy9hY3Qvdmxhbi5vIGVuL3RjL2FjdC92bGFuX21hbmdsZS5vIGVuL3RjL2FjdC9tcGxzLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMDQ1PW5mcF90dW5uZWxfbG9va3VwX29mZmxvYWRlZF9tYWNzKHN0cnVjdCBuZnBfYXBwICphcHAsIGNvbnN0IHU4ICptYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEwNDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMDQ5OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIG1hYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEwNTAtXFx0XFx0XFx0XFx0ICAgICAgb2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTA3Nz1uZnBfdHVubmVsX2FkZF9zaGFyZWRfbWFjKHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMTI4OlxcdFxcdGlmIChyaGFzaHRhYmxlX2luc2VydF9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTI5LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZlbnRyeS1cXHUwMDNlaHRfbm9kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTE1MC1lcnJfcmVtb3ZlX2hhc2g6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMTUxOlxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcywgXFx1MDAyNmVudHJ5LVxcdTAwM2VodF9ub2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTE1Mi1cXHRcXHRcXHQgICAgICAgb2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTE2Mz1uZnBfdHVubmVsX2RlbF9zaGFyZWRfbWFjKHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEyMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMjI4OlxcdFdBUk5fT05fT05DRShyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMjI5LVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZW50cnktXFx1MDAzZWh0X25vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTE1MDc9aW50IG5mcF90dW5uZWxfY29uZmlnX3N0YXJ0KHN0cnVjdCBuZnBfYXBwICphcHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MTItXFx0LyogSW5pdGlhbGlzZSByaGFzaCBmb3IgTUFDIG9mZmxvYWQgdHJhY2tpbmcuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTEzOlxcdGVyciA9IHJoYXNodGFibGVfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUxNC1cXHRcXHRcXHQgICAgICBcXHUwMDI2b2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUzMC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTMxOlxcdFxcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUzMi1cXHRcXHRcXHRcXHRcXHQgICAgbmZwX2NoZWNrX3JoYXNodGFibGVfZW1wdHksIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTM5PXZvaWQgbmZwX3R1bm5lbF9jb25maWdfc3RvcChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTU4LVxcdC8qIERlc3Ryb3kgcmhhc2guIEVudHJpZXMgc2hvdWxkIGJlIGNsZWFuZWQgb24gbmV0ZGV2IG5vdGlmaWVyIHVucmVnLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTU1OTpcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1NjAtXFx0XFx0XFx0XFx0ICAgIG5mcF9jaGVja19yaGFzaHRhYmxlX2VtcHR5LCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NDIuNTExOTUxNDg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5OTk4MzI0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBlbWJlZGRlZCBzeXN0ZW1zIGRldmVsb3BtZW50IG9yIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKkNoZWNraW5nIHRoZSBUVU4vVEFQIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGRlZXBlciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSBUVU4vVEFQIGRyaXZlci4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBuZXR3b3JraW5nLXJlbGF0ZWQgaXNzdWUgb3IgSSdtIHRyeWluZyB0byB1dGlsaXplIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbi4gTm8gcG9pbnQgd2FzdGluZyB0aW1lIGd1ZXNzaW5nOyBsZXQncyBjaGVjayBgQ09ORklHX1RVTmAgaW4gdGhlIEtjb25maWcsIHRvIHNlZSBpZiBpdCdzIHNldCB0byBcInlcIiAoYnVpbHQtaW4pIG9yIFwibVwiIChtb2R1bGUpLiBUaGVuIEkgY2FuIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTo0OS41MTE3ODY4MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDQ3NTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NDkuNjQyMjY3NTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzI0MzU3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBtb2R1bGUgaXMgc2V0IHVwLiBMZXQncyBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBhcm91bmQgbGluZSAzOTEuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZSBjYXJkcy4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjaXNpb25zIGdldCBtYWRlLCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzcGVsbGVkIG91dC4gSSBjYW4gb2Z0ZW4gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGludGVuZGVkIHVzZSBjYXNlIGp1c3QgYnkgcmVhZGluZyB0aGlzIHNlY3Rpb24sIGFuZCB0aGF0IGNhbiBzaGFwZSBhbGwgZnVydGhlciBhbmFseXNpcy4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NTEuNzc0NzA1NDQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzg4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg4OlxcdFxcdGRlcGVuZHMgb24gUklPTkVUXFxuIDM4OTpcXHRcXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuIDM5MDpcXHRcXG4gMzkxOlxcdGNvbmZpZyBUVU5cXG4gMzkyOlxcdFxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuIDM5MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMzk0OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAzOTU6XFx0XFx0aGVscFxcbiAzOTY6XFx0XFx0ICBUVU4vVEFQIHByb3ZpZGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbiBmb3IgdXNlciBzcGFjZVxcbiAzOTc6XFx0XFx0ICBwcm9ncmFtcy4gIEl0IGNhbiBiZSB2aWV3ZWQgYXMgYSBzaW1wbGUgUG9pbnQtdG8tUG9pbnQgb3IgRXRoZXJuZXRcXG4gMzk4OlxcdFxcdCAgZGV2aWNlLCB3aGljaCBpbnN0ZWFkIG9mIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gYSBwaHlzaWNhbCBtZWRpYSxcXG4gMzk5OlxcdFxcdCAgcmVjZWl2ZXMgdGhlbSBmcm9tIHVzZXIgc3BhY2UgcHJvZ3JhbSBhbmQgaW5zdGVhZCBvZiBzZW5kaW5nIHBhY2tldHNcXG4gNDAwOlxcdFxcdCAgdmlhIHBoeXNpY2FsIG1lZGlhIHdyaXRlcyB0aGVtIHRvIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0uXFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXFxuIDQwMzpcXHRcXHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXFxuIDQwNDpcXHRcXHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcXG4gNDA1OlxcdFxcdCAgYWxsIHJvdXRlcyBjb3JyZXNwb25kaW5nIHRvIGl0LlxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHQgIFBsZWFzZSByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiA0MDg6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gNDA5OlxcdFxcbiA0MTA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDQxMTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHR1bi5cXG4gNDEyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTo1MS43NzQ3ODgwNzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODAxNTQ1NTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IFRVTi9UQVAgRHJpdmVyJ3MgYFRVTlNFVExJTktgIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBUVU4vVEFQIGRyaXZlciAoYGRyaXZlcnMvbmV0L3R1bi5jYCkuIFNwZWNpZmljYWxseSwgaXQncyBjb25jZXJuZWQgd2l0aCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgY2FsbCwgd2hpY2ggaXMgdXNlZCB0byBzZXQgdGhlIGxpbmsgdHlwZSBvZiB0aGUgVFVOIGRldmljZS4gSSBzZWUgdGhlIGNoZWNrIGhlcmUg4oCTIHdoZW4gdGhlIHVzZXIgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBsaW5rIHR5cGUgYW5kICpzaW11bHRhbmVvdXNseSo6XG5cbjEuICBUaGUgbmV3IGxpbmsgdHlwZSdzIGFkZHJlc3MgbGVuZ3RoIChgdHVuX2dldF9hZGRyX2xlbihhcmcpYCkgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGRldmljZSdzIGFkZHJlc3MgbGVuZ3RoIChgdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbmApLlxuMi4gIFRoZSBkZXZpY2UgaGFzIGVpdGhlciBleGlzdGluZyB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gaXRzIGxpc3RzIChgIW5ldGRldl91Y19lbXB0eSh0dW4tXHUwMDNlZGV2KSB8fCAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpYCkuXG5cbi4uLnRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgLUVCVVNZYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogY2hhbmdpbmcgdGhlIGBhZGRyX2xlbmAgd2hpbGUgdGhvc2UgbGlzdHMgYXJlIHBvcHVsYXRlZCBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIEl0IHNjcmVhbXMgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYWRkcmVzcy1sZW5ndGggbWlzbWF0Y2hlcywgbGVhZGluZyB0byBwb3RlbnRpYWwgYnVncyB3aGVuIHRob3NlIGV4aXN0aW5nIGFkZHJlc3NlcyBhcmUgYWNjZXNzZWQsIGZyZWVkLCBvciBvdGhlcndpc2UgbWFuaXB1bGF0ZWQgd2l0aCB0aGUgbmV3IGFkZHJlc3MgbGVuZ3RoLiBUaGlzIGlzIGEgY2xhc3NpYyBcInN5emJvdCBidWdcIiB3YWl0aW5nIHRvIGhhcHBlbiwgaWYgSSBoYWQgdG8gZ3Vlc3MuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBBYnNvbHV0ZWx5LiBUaGUgVFVOL1RBUCBkcml2ZXIgaXMgYSBzdGFuZGFyZCwgc29mdHdhcmUtYmFzZWQgdmlydHVhbCBuZXR3b3JraW5nIGNvbXBvbmVudC4gSXQncyBhY2Nlc3NpYmxlIHZpYSBgL2Rldi9uZXQvdHVuYCBhbmQgaGVhdmlseSB1dGlsaXplZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIG1ha2luZyBpdCBhIHZlcnkgYWNjZXNzaWJsZSB0YXJnZXQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbG9naWMgd2l0aGluIHRoZSBUVU4gZHJpdmVyIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBob3cgaXQgaGFuZGxlcyB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGFuZCBhc3NvY2lhdGVkIGFkZHJlc3MgbGlzdHMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgZnV6emluZyBjYW4gdW5jb3ZlciBzdWJ0bGUsIGV4cGxvaXRhYmxlIGJ1Z3MuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHN5bWJvbHMgZm9yIGZ1enppbmcuIGB0dW5fY2hyX2lvY3RsYCBpcyBub24tc3RhdGljLCBzbyB0aGUgb3JpZ2luYWwgYXNzZXNzbWVudCBsb29rcyBsaWtlIHRoZSBiZXN0IGVudHJ5cG9pbnQuIEl0IGxvb2tzIGxpa2UgYF9fdHVuX2Nocl9pb2N0bGAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBncmVwIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyIHRvIGZpbmQgdGhlIGVudHJ5cG9pbnQuIEkgd2lsbCBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjU5Ljc5MDI0NTc1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3Nzg3MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTUwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC90dW4uYy04Ny1cXG5kcml2ZXJzL25ldC90dW4uYzo4ODpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTg5LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIyMj1zdHJ1Y3QgdmV0aCB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjI3OnN0YXRpYyB2b2lkIHR1bl9mbG93X2luaXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bik7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjI4OnN0YXRpYyB2b2lkIHR1bl9mbG93X3VuaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKTtcXG5kcml2ZXJzL25ldC90dW4uYy0yMjktXFxuZHJpdmVycy9uZXQvdHVuLmM6MjMwOnN0YXRpYyBpbnQgdHVuX25hcGlfcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuZHJpdmVycy9uZXQvdHVuLmMtMjMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI1Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTg6c3RhdGljIGludCB0dW5fbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG5kcml2ZXJzL25ldC90dW4uYy0yNTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjY5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3MDpzdGF0aWMgdm9pZCB0dW5fbmFwaV9pbml0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjcxLVxcdFxcdFxcdCAgYm9vbCBuYXBpX2VuLCBib29sIG5hcGlfZnJhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODAtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjgxOnN0YXRpYyB2b2lkIHR1bl9uYXBpX2VuYWJsZShzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODYtXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjg3OnN0YXRpYyB2b2lkIHR1bl9uYXBpX2Rpc2FibGUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0yODgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjkyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI5MzpzdGF0aWMgdm9pZCB0dW5fbmFwaV9kZWwoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0yOTQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjk4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI5OTpzdGF0aWMgYm9vbCB0dW5fbmFwaV9mcmFnc19lbmFibGVkKGNvbnN0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwMy1cXG5kcml2ZXJzL25ldC90dW4uYzozMDQ6c3RhdGljIGlubGluZSB1MzIgdHVuX2hhc2hmbih1MzIgcnhoYXNoKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMDgtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzA5OnN0YXRpYyBzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKnR1bl9mbG93X2ZpbmQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiByeGhhc2gpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxOS1cXG5kcml2ZXJzL25ldC90dW4uYzozMjA6c3RhdGljIHN0cnVjdCB0dW5fZmxvd19lbnRyeSAqdHVuX2Zsb3dfY3JlYXRlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtMzIxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0MTpzdGF0aWMgdm9pZCB0dW5fZmxvd19kZWxldGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9mbG93X2VudHJ5ICplKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNDktXFxuZHJpdmVycy9uZXQvdHVuLmM6MzUwOnN0YXRpYyB2b2lkIHR1bl9mbG93X2ZsdXNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzUxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NC1cXG5kcml2ZXJzL25ldC90dW4uYzozNjU6c3RhdGljIHZvaWQgdHVuX2Zsb3dfZGVsZXRlX2J5X3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHUxNiBxdWV1ZV9pbmRleClcXG5kcml2ZXJzL25ldC90dW4uYy0zNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzgxLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM4MjpzdGF0aWMgdm9pZCB0dW5fZmxvd19jbGVhbnVwKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM4My17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy00MTMtXFxuZHJpdmVycy9uZXQvdHVuLmM6NDE0OnN0YXRpYyB2b2lkIHR1bl9mbG93X3VwZGF0ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCB1MzIgcnhoYXNoLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTQxNS1cXHRcXHRcXHQgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQ1MS0gKi9cXG5kcml2ZXJzL25ldC90dW4uYzo0NTI6c3RhdGljIGlubGluZSB2b2lkIHR1bl9mbG93X3NhdmVfcnBzX3J4aGFzaChzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKmUsIHUzMiBoYXNoKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQ1My17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy00NjMtICovXFxuZHJpdmVycy9uZXQvdHVuLmM6NDY0OnN0YXRpYyB1MTYgdHVuX2F1dG9tcV9zZWxlY3RfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC90dW4uYy00NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNDgyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjQ4MzpzdGF0aWMgdTE2IHR1bl9lYnBmX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQ4NC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy00OTktXFxuZHJpdmVycy9uZXQvdHVuLmM6NTAwOnN0YXRpYyB1MTYgdHVuX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTUwMS1cXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTUxNS1cXG5kcml2ZXJzL25ldC90dW4uYzo1MTY6c3RhdGljIGlubGluZSBib29sIHR1bl9ub3RfY2FwYWJsZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTUxNy17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy01MjUtXFxuZHJpdmVycy9uZXQvdHVuLmM6NTI2OnN0YXRpYyB2b2lkIHR1bl9zZXRfcmVhbF9udW1fcXVldWVzKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtNTI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTUzMS1cXG5kcml2ZXJzL25ldC90dW4uYzo1MzI6c3RhdGljIHZvaWQgdHVuX2Rpc2FibGVfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy01MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNTM4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjUzOTpzdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bl9lbmFibGVfcXVldWUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy01NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNTQ4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU0OTp2b2lkIHR1bl9wdHJfZnJlZSh2b2lkICpwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmMtNTUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTU2MC19XFxuZHJpdmVycy9uZXQvdHVuLmM6NTYxOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9wdHJfZnJlZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtNTYyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU2MzpzdGF0aWMgdm9pZCB0dW5fcXVldWVfcHVyZ2Uoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy01NjQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNTczLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU3NDpzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcXG5kcml2ZXJzL25ldC90dW4uYy01NzUte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNjQ0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjY0NTpzdGF0aWMgdm9pZCB0dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtNjQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTY2MS1cXG5kcml2ZXJzL25ldC90dW4uYzo2NjI6c3RhdGljIHZvaWQgdHVuX2RldGFjaF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy02NjMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNzA1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjcwNjpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTcwNy1cXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTcyNC1cXG5kcml2ZXJzL25ldC90dW4uYzo3MjU6c3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTcyNi1cXHRcXHQgICAgICBib29sIHNraXBfZmlsdGVyLCBib29sIG5hcGksIGJvb2wgbmFwaV9mcmFncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTgyMi1cXG5kcml2ZXJzL25ldC90dW4uYzo4MjM6c3RhdGljIHN0cnVjdCB0dW5fc3RydWN0ICp0dW5fZ2V0KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtODI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTgzNS1cXG5kcml2ZXJzL25ldC90dW4uYzo4MzY6c3RhdGljIHZvaWQgdHVuX3B1dChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy04NDEtLyogVEFQIGZpbHRlcmluZyAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjg0MjpzdGF0aWMgdm9pZCBhZGRyX2hhc2hfc2V0KHUzMiAqbWFzaywgY29uc3QgdTggKmFkZHIpXFxuZHJpdmVycy9uZXQvdHVuLmMtODQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTg0Ny1cXG5kcml2ZXJzL25ldC90dW4uYzo4NDg6c3RhdGljIHVuc2lnbmVkIGludCBhZGRyX2hhc2hfdGVzdChjb25zdCB1MzIgKm1hc2ssIGNvbnN0IHU4ICphZGRyKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTg0OS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy04NTMtXFxuZHJpdmVycy9uZXQvdHVuLmM6ODU0OnN0YXRpYyBpbnQgdXBkYXRlX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCB2b2lkIF9fdXNlciAqYXJnKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTg1NS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy05MTMtLyogUmV0dXJuczogMCAtIGRyb3AsICE9MCAtIGFjY2VwdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjkxNDpzdGF0aWMgaW50IHJ1bl9maWx0ZXIoc3RydWN0IHRhcF9maWx0ZXIgKmZpbHRlciwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC90dW4uYy05MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtOTM2LSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjkzNzpzdGF0aWMgaW50IGNoZWNrX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTkzOC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz05NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHM7XFxuZHJpdmVycy9uZXQvdHVuLmMtOTQ4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjk0OTpzdGF0aWMgaW50IHR1bl9uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTk1MC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy05ODgtLyogTmV0IGRldmljZSBkZXRhY2ggZnJvbSBmZC4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzo5ODk6c3RhdGljIHZvaWQgdHVuX25ldF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy05OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtOTk0LS8qIE5ldCBkZXZpY2Ugb3Blbi4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzo5OTU6c3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy05OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAwMi0vKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjEwMDM6c3RhdGljIGludCB0dW5fbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAwNC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDI3LS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjEwMjg6c3RhdGljIHZvaWQgdHVuX2F1dG9tcV94bWl0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAyOS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDQ1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0xMDQ3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTA1OC0vKiBOZXQgZGV2aWNlIHN0YXJ0IHhtaXQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDU5OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNjgtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTE2OTpzdGF0aWMgdm9pZCB0dW5fbmV0X21jbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE3Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoxMTc4OnN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNzktXFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMTg1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjExODY6c3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExODcte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTIwMT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMDI6dHVuX25ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTIxMS1cXG5kcml2ZXJzL25ldC90dW4uYzoxMjEyOnN0YXRpYyBpbnQgdHVuX3hkcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMTMtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI0MjpzdGF0aWMgaW50IHR1bl94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcXG5kcml2ZXJzL25ldC90dW4uYy0xMjQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI1MjpzdGF0aWMgaW50IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2FycmllcilcXG5kcml2ZXJzL25ldC90dW4uYy0xMjUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNzktXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4MDpzdGF0aWMgdm9pZCBfX3R1bl94ZHBfZmx1c2hfdGZpbGUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0xMjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODctXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4ODpzdGF0aWMgaW50IHR1bl94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbixcXG5kcml2ZXJzL25ldC90dW4uYy0xMjg5LVxcdFxcdFxcdHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzMzYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTMzNzpzdGF0aWMgaW50IHR1bl94ZHBfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuZHJpdmVycy9uZXQvdHVuLmMtMTMzOC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMzUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMzY4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjEzNjk6c3RhdGljIHZvaWQgdHVuX2Zsb3dfaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTM4MS1cXG5kcml2ZXJzL25ldC90dW4uYzoxMzgyOnN0YXRpYyB2b2lkIHR1bl9mbG93X3VuaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzODMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTM5MS0vKiBJbml0aWFsaXplIG5ldCBkZXZpY2UuICovXFxuZHJpdmVycy9uZXQvdHVuLmM6MTM5MjpzdGF0aWMgdm9pZCB0dW5fbmV0X2luaXRpYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMzkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0MzEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTQzMjpzdGF0aWMgYm9vbCB0dW5fc29ja193cml0ZWFibGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0xNDMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NDEtLyogUG9sbCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE0NDI6c3RhdGljIF9fcG9sbF90IHR1bl9jaHJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG5kcml2ZXJzL25ldC90dW4uYy0xNDQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NzUtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTQ3NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9uYXBpX2FsbG9jX2ZyYWdzKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTQ3Ny1cXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE1MzItICogbGluZWFyIGlzIGEgaGludCBhcyB0byBob3cgbXVjaCB0byBjb3B5ICh1c3VhbGx5IGhlYWRlcnMpLiAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE1MzM6c3RhdGljIHN0cnVjdCBza19idWZmICp0dW5fYWxsb2Nfc2tiKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTUzNC1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNTU5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE1NjA6c3RhdGljIHZvaWQgdHVuX3J4X2JhdGNoZWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG5kcml2ZXJzL25ldC90dW4uYy0xNTYxLVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBtb3JlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTU5OS1cXG5kcml2ZXJzL25ldC90dW4uYzoxNjAwOnN0YXRpYyBib29sIHR1bl9jYW5fYnVpbGRfc2tiKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTYwMS1cXHRcXHRcXHQgICAgICBpbnQgbGVuLCBpbnQgbm9ibG9jaywgYm9vbCB6ZXJvY29weSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MjEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTYyMjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fdHVuX2J1aWxkX3NrYihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2ZyYWcgKmFsbG9jX2ZyYWcsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2NDMtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTY0NDpzdGF0aWMgaW50IHR1bl94ZHBfYWN0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csXFxuZHJpdmVycy9uZXQvdHVuLmMtMTY0NS1cXHRcXHQgICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBhY3QpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNjgxLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE2ODI6c3RhdGljIHN0cnVjdCBza19idWZmICp0dW5fYnVpbGRfc2tiKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtMTY4My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNzc4LS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE3Nzk6c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTc4MC1cXHRcXHRcXHQgICAgdm9pZCAqbXNnX2NvbnRyb2wsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwNzYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjA3NzpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZHJpdmVycy9uZXQvdHVuLmMtMjA3OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMDk2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIwOTc6c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyX3hkcChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTgtXFx0XFx0XFx0XFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjQtLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoyMTI1OnN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjYtXFx0XFx0XFx0ICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjA5LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMTA6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMTEtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjQyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIyNDM6c3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0yMjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNTUtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjI1NjpzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNTctXFx0XFx0XFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjI5Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoyMjk4OnN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjI5OS1cXHRcXHRcXHQgICBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjMzNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzM1OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5kcml2ZXJzL25ldC90dW4uYy0yMzM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIzNTYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjM1NzpzdGF0aWMgdm9pZCB0dW5fcHJvZ19mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIzNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjM2NC1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzY1OnN0YXRpYyBpbnQgX190dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0yMzY2LVxcdFxcdFxcdCAgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjM4OS1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzkwOnN0YXRpYyB2b2lkIHR1bl9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIzOTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjQwMS1cXG5kcml2ZXJzL25ldC90dW4uYzoyNDAyOnN0YXRpYyB2b2lkIHR1bl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0MDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjQxOS0gKi9cXG5kcml2ZXJzL25ldC90dW4uYzoyNDIwOnN0YXRpYyBpbnQgdHVuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG5kcml2ZXJzL25ldC90dW4uYy0yNDIxLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0MjctXFxuZHJpdmVycy9uZXQvdHVuLmM6MjQyODpzdGF0aWMgc2l6ZV90IHR1bl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjQ0NC1cXG5kcml2ZXJzL25ldC90dW4uYzoyNDQ1OnN0YXRpYyBpbnQgdHVuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0NDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjQ4Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdHVuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNDk0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI0OTU6c3RhdGljIHZvaWQgdHVuX3NvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjUxNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTE1OnN0YXRpYyB2b2lkIHR1bl9wdXRfcGFnZShzdHJ1Y3QgdHVuX3BhZ2UgKnRwYWdlKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI1MTYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjUyMC1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTIxOnN0YXRpYyBpbnQgdHVuX3hkcF9vbmUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0yNTIyLVxcdFxcdCAgICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjY1Ni1cXG5kcml2ZXJzL25ldC90dW4uYzoyNjU3OnN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5kcml2ZXJzL25ldC90dW4uYy0yNjU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI3MTEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjcxMjpzdGF0aWMgaW50IHR1bl9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtMjcxMy1cXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc0OS1cXG5kcml2ZXJzL25ldC90dW4uYzoyNzUwOnN0YXRpYyBpbnQgdHVuX3B0cl9wZWVrX2xlbih2b2lkICpwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc1MS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNzYzLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3NjQ6c3RhdGljIGludCB0dW5fcGVla19sZW4oc3RydWN0IHNvY2tldCAqc29jaylcXG5kcml2ZXJzL25ldC90dW4uYy0yNzY1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI3ODc9c3RhdGljIHN0cnVjdCBwcm90byB0dW5fcHJvdG8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNzkyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3OTM6c3RhdGljIGludCB0dW5fZmxhZ3Moc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG5kcml2ZXJzL25ldC90dW4uYy0yNzk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI3OTctXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjc5ODpzdGF0aWMgc3NpemVfdCB0dW5fZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTI3OTktXFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgwNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyODA1OnN0YXRpYyBzc2l6ZV90IG93bmVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL25ldC90dW4uYy0yODA2LVxcdFxcdFxcdCAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgxNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyODE1OnN0YXRpYyBzc2l6ZV90IGdyb3VwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL25ldC90dW4uYy0yODE2LVxcdFxcdFxcdCAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgyNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyODI1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyh0dW5fZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI4MjY6c3RhdGljIERFVklDRV9BVFRSX1JPKG93bmVyKTtcXG5kcml2ZXJzL25ldC90dW4uYzoyODI3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhncm91cCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjgyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI4MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODM5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI4NDA6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yODQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5ODMtXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjk4NDpzdGF0aWMgdm9pZCB0dW5fZ2V0X2lmZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yOTg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5OTUtICogcHJpdnMgcmVxdWlyZWQuICovXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjk5NjpzdGF0aWMgaW50IHNldF9vZmZsb2FkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5OTcte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA0OS1cXG5kcml2ZXJzL25ldC90dW4uYzozMDUwOnN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfZmlsdGVyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIGludCBuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA2NC1cXG5kcml2ZXJzL25ldC90dW4uYzozMDY1OnN0YXRpYyBpbnQgdHVuX2F0dGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG5kcml2ZXJzL25ldC90dW4uYy0zMDY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwODQtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzA4NTpzdGF0aWMgdm9pZCB0dW5fc2V0X3NuZGJ1ZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwODYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA5NS1cXG5kcml2ZXJzL25ldC90dW4uYzozMDk2OnN0YXRpYyBpbnQgdHVuX3NldF9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA5Ny17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTMxLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxMzI6c3RhdGljIGludCB0dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxMzMtXFx0XFx0XFx0dm9pZCBfX3VzZXIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTUyLS8qIFJldHVybiBjb3JyZWN0IHZhbHVlIGZvciB0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gYmFzZWQgb24gdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUuICovXFxuZHJpdmVycy9uZXQvdHVuLmM6MzE1MzpzdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzE1NC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTkwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxOTE6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxOTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgaWZyZXFfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ4OC1cXG5kcml2ZXJzL25ldC90dW4uYzozNDg5OnN0YXRpYyBsb25nIHR1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5MC1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5NS0jaWZkZWYgQ09ORklHX0NPTVBBVFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0OTY6c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5Ny1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNTIzLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1MjQ6c3RhdGljIGludCB0dW5fY2hyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzUyNS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNTQ3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1NDg6c3RhdGljIGludCB0dW5fY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzU4Ni1cXG5kcml2ZXJzL25ldC90dW4uYzozNTg3OnN0YXRpYyBpbnQgdHVuX2Nocl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0zNTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1OTYtI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuZHJpdmVycy9uZXQvdHVuLmM6MzU5NzpzdGF0aWMgdm9pZCB0dW5fY2hyX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzU5OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNjM1PXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0dW5fbWlzY2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NDMtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzY0NDpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NDUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjU1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2NTY6c3RhdGljIGludCB0dW5fZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY1Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjY0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2NjU6c3RhdGljIGludCB0dW5fc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY2Ni1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjczLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2NzQ6c3RhdGljIHZvaWQgdHVuX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY3NS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjkwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2OTE6c3RhdGljIHUzMiB0dW5fZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjk3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2OTg6c3RhdGljIHZvaWQgdHVuX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY5OS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzA0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM3MDU6c3RhdGljIGludCB0dW5fZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzcwNi1cXHRcXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzcxNi1cXG5kcml2ZXJzL25ldC90dW4uYzozNzE3OnN0YXRpYyBpbnQgdHVuX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MTgtXFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MzEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzczMjpzdGF0aWMgdm9pZCB0dW5fZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjAwLjEwODAzODY4M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjY4NDczOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgVmVyZGljdCBmb3IgdGhlIFRVTi9UQVAgRHJpdmVyJ3MgaW9jdGwgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIEkndmUgaWRlbnRpZmllZCBgX190dW5fY2hyX2lvY3RsYCBhbmQgYHR1bl9jaHJfaW9jdGxgIGFzIHRoZSBrZXkgdGFyZ2V0cywgc28gSSdsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UsIGFuZCBwZXJoYXBzIHRoZWlyIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHR1bl9jaHJfY29tcGF0X2lvY3RsYCBhbmQgYHR1bl9nZXRfYWRkcl9sZW5gLCBpbiB0aGUgZm9jdXMgc3ltYm9sIGxpc3QuIE5vdywgbGV0J3MgdmVyaWZ5IHRoZXNlIGFyZSByZWFsbHkgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIG9wZXJhdGlvbnMuIENoZWNraW5nIGB0dW5fY2hyX2lvY3RsYCBhbmQgYF9fdHVuX2Nocl9pb2N0bGAgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGBUVU5gIGNvbmZpZyBpcyBjcnVjaWFsLCBhbG9uZyB3aXRoIGBJTkVUYCBzaW5jZSBpdCdzIGEgZGVwZW5kZW5jeS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgVFVOYCBkZXBlbmRzIG9uIGBJTkVUYC4gT2theSwgc28gYFRVTmAgYW5kIGBJTkVUYCBhcmUgb3VyIEVuYWJsZUNvbmZpZ3MuIEknbGwgbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBzZXQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbk5vdywgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZC4gWWVzLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gTXkgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbmZpcm1lZDogYHR1bl9jaHJfaW9jdGxgIGFuZCBgX190dW5fY2hyX2lvY3RsYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCBhcyBgVFVOYCBhbmQgYElORVRgLiBGaW5hbGx5LCBJIGhhdmUgYSBjb25jaXNlIHJlYXNvbiB3aHkgdGhlc2UgY2hvaWNlcyB3ZXJlIG1hZGUsIGFuZCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMywiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDguNzc2NTE1NDU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0ODE2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcIl9fdHVuX2Nocl9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBUVU4gZHJpdmVyJ3MgVFVOU0VUTElOSyBpb2N0bCBoYW5kbGVyIChfX3R1bl9jaHJfaW9jdGwpIHRvIHJlamVjdCBsaW5rIHR5cGUgY2hhbmdlcyB3aXRoIC1FQlVTWSBpZiB0aGUgbmV3IGxpbmsgdHlwZSBoYXMgYSBkaWZmZXJlbnQgYWRkcmVzcyBsZW5ndGggd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBvbiB0aGUgbmV0ZGV2aWNlIGFyZSBub3QgZW1wdHkuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX2Nocl9pb2N0bFwiLFxuICAgIFwiX190dW5fY2hyX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIFRVTiBkcml2ZXIncyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDguODUwMDAzMjk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY0NTEwODcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjA4Ljg1MDQwMDg2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NjQ0NzA2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIGZvciB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgaXQgcmVqZWN0cyBjaGFuZ2luZyB0aGUgZGV2aWNlIHR5cGUgaWYgdGhlIG5ldyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBhcmUgbm9uLWVtcHR5LiBcXG5cXG5UaGlzIGNoYW5nZSBwcmV2ZW50cyBhZGRyZXNzIGxlbmd0aCBtaXNtYXRjaCBpc3N1ZXMgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIG9wZXJhdGluZyBvbiBleGlzdGluZyBgZGV2LVxcdTAwM2V1Y2AgYW5kIGBkZXYtXFx1MDAzZW1jYCBsaXN0cyAod2hpY2ggYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmU5NjlmZWE4MDZiMDc5NzhmMzY4ZTQ5OGY5ZGZkMGZiYzAyYWM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTMzNDEsNiArMzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbiBcdFx0XHRcdCAgIFwiTGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxcblwiKTtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVx1MDAzZWRldikgfHxcbitcdFx0XHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXHUwMDNlZGV2KSkpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDguODUwNDAxNjc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyNDU5MDQxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgS01TQU4gRnV6emluZyBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGp1c3RpZmllcyBpdHMgb3duIEtNU0FOIGZ1enppbmcgcnVuLiBNeSBpbml0aWFsIGFwcHJvYWNoLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSBkb2VzIGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGB0dW4uY2AgZmlsZS4gSSdsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlcidzIHF1aWNrZXN0IGFuZCBtb3N0IGVmZmljaWVudCDigJMgdG8gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyBsaW5lIDMzNDEgaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZSwgbm90IGp1c3QgdGhlICp3aGF0Ki4gXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgc3BlY2lmaWMgY2hhbmdlOiBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYW4gYWRkaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGB0dW5fZ2V0X2FkZHJfbGVuYCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgRUJVU1lgIGVycm9yIGlmIHRoZSBhZGRyZXNzIGxlbmd0aCBkb2Vzbid0IG1hdGNoIGFuZCBlaXRoZXIgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBhbHJlYWR5IGNvbmZpZ3VyZWQgb24gdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoZWNrIGlzIHByb3RlY3RpbmcgYWdhaW5zdC4gSXMgaXQgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IEEgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eT8gQSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvcj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgc29ydCBvZiBjaGVjayBtaWdodCBiZSBjcml0aWNhbCBmb3Igc29tZSBvYnNjdXJlIGNvcm5lciBjYXNlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHR1bi5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgYHR1bi5jYCBhbmQgbmV0d29ya2luZyBkcml2ZXJzLCB0aGlzIGlzIGFuIGFyZWEgd2hlcmUgc3VidGxlIGJ1Z3MgY2FuIGhhdmUgc2VyaW91cyBpbXBsaWNhdGlvbnMuIEJhc2VkIG9uIG15IHJldmlldywgSSdsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MTguMDk2MzA4NzQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzI1OlxcdFxcdGNhc2UgVFVOU0VUR1JPVVA6XFxuMzMyNjpcXHRcXHRcXHQvKiBTZXQgZ3JvdXAgb2YgdGhlIGRldmljZSAqL1xcbjMzMjc6XFx0XFx0XFx0Z3JvdXAgPSBtYWtlX2tnaWQoY3VycmVudF91c2VyX25zKCksIGFyZyk7XFxuMzMyODpcXHRcXHRcXHRpZiAoIWdpZF92YWxpZChncm91cCkpIHtcXG4zMzI5OlxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzMzMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMzMxOlxcdFxcdFxcdH1cXG4zMzMyOlxcdFxcdFxcdFdSSVRFX09OQ0UodHVuLVxcdTAwM2Vncm91cCwgZ3JvdXApO1xcbjMzMzM6XFx0XFx0XFx0ZG9fbm90aWZ5ID0gdHJ1ZTtcXG4zMzM0OlxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwiZ3JvdXAgc2V0IHRvICV1XFxcXG5cXFwiLFxcbjMzMzU6XFx0XFx0XFx0XFx0ICAgZnJvbV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGdyb3VwKSk7XFxuMzMzNjpcXHRcXHRcXHRicmVhaztcXG4zMzM3OlxcdFxcbjMzMzg6XFx0XFx0Y2FzZSBUVU5TRVRMSU5LOlxcbjMzMzk6XFx0XFx0XFx0LyogT25seSBhbGxvdyBzZXR0aW5nIHRoZSB0eXBlIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duICovXFxuMzM0MDpcXHRcXHRcXHRpZiAodHVuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxuMzM0MTpcXHRcXHRcXHRcXHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXFx1MDAzZWRldixcXG4zMzQyOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXFxcXG5cXFwiKTtcXG4zMzQzOlxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4zMzQ0OlxcdFxcdFxcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiBcXHUwMDI2XFx1MDAyNlxcbjMzNDU6XFx0XFx0XFx0XFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVxcdTAwM2VkZXYpIHx8XFxuMzM0NjpcXHRcXHRcXHRcXHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXFx1MDAzZWRldikpKSB7XFxuMzM0NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuMzM0ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjMzNDk6XFx0XFx0XFx0XFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXFxuMzM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHVuLVxcdTAwM2VkZXYpO1xcbjMzNTE6XFx0XFx0XFx0XFx0cmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTtcXG4zMzUyOlxcdFxcdFxcdFxcdGlmIChyZXQpIHtcXG4zMzUzOlxcdFxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LFxcbjMzNTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIlJlZnVzZWQgdG8gY2hhbmdlIGRldmljZSB0eXBlXFxcXG5cXFwiKTtcXG4zMzU1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNTY6XFx0XFx0XFx0XFx0fVxcbjMzNTc6XFx0XFx0XFx0XFx0dHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPSAoaW50KSBhcmc7XFxuMzM1ODpcXHRcXHRcXHRcXHR0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlKTtcXG4zMzU5OlxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwibGlua3R5cGUgc2V0IHRvICVkXFxcXG5cXFwiLFxcbjMzNjA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUpO1xcbjMzNjE6XFx0XFx0XFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFLFxcbjMzNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHR1bi1cXHUwMDNlZGV2KTtcXG4zMzYzOlxcdFxcdFxcdH1cXG4zMzY0OlxcdFxcdFxcdGJyZWFrO1xcbjMzNjU6XFx0XFxuMzM2NjpcXHRcXHRjYXNlIFRVTlNFVERFQlVHOlxcbjMzNjc6XFx0XFx0XFx0dHVuLVxcdTAwM2Vtc2dfZW5hYmxlID0gKHUzMilhcmc7XFxuMzM2ODpcXHRcXHRcXHRicmVhaztcXG4zMzY5OlxcdFxcbjMzNzA6XFx0XFx0Y2FzZSBUVU5TRVRPRkZMT0FEOlxcbjMzNzE6XFx0XFx0XFx0cmV0ID0gc2V0X29mZmxvYWQodHVuLCBhcmcpO1xcbjMzNzI6XFx0XFx0XFx0YnJlYWs7XFxuMzM3MzpcXHRcXG4zMzc0OlxcdFxcdGNhc2UgVFVOU0VUVFhGSUxURVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjE4LjA5NjU0NTg3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTAxOTkxOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdHVuX2dldF9hZGRyX2xlbmAgYW5kIHRoZSBCdWcgRml4KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdHVuX2dldF9hZGRyX2xlbmAgZnVuY3Rpb24gYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgc3BlY2lmaWMgYnVnIGFuZCBpdHMgZml4LiBNeSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGVyZSBpdCdzIHVzZWQgYW5kLCBob3BlZnVsbHksIGNsdWVzIGFib3V0IGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBjb250ZXh0LiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpc3N1ZSB0aGF0J3MgYmVlbiBmbGFnZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoyMi45OTg1NDI3NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjY3OTA2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2dldF9hZGRyX2xlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0zMTMyPXN0YXRpYyBpbnQgdHVuX3NldF9lYnBmKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fcHJvZyBfX3JjdSAqKnByb2dfcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxNTItLyogUmV0dXJuIGNvcnJlY3QgdmFsdWUgZm9yIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiBiYXNlZCBvbiB0dW4tXFx1MDAzZWRldi1cXHUwMDNldHlwZS4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzozMTUzOnN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcXG5kcml2ZXJzL25ldC90dW4uYy0zMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxOTE9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzM0My1cXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuZHJpdmVycy9uZXQvdHVuLmM6MzM0NDpcXHRcXHR9IGVsc2UgaWYgKHR1bl9nZXRfYWRkcl9sZW4oYXJnKSAhPSB0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC90dW4uYy0zMzQ1LVxcdFxcdFxcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cXHUwMDNlZGV2KSB8fFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzM1Ny1cXHRcXHRcXHR0dW4tXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9IChpbnQpIGFyZztcXG5kcml2ZXJzL25ldC90dW4uYzozMzU4OlxcdFxcdFxcdHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiA9IHR1bl9nZXRfYWRkcl9sZW4odHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNTktXFx0XFx0XFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVxcdTAwM2VkZXYsIFxcXCJsaW5rdHlwZSBzZXQgdG8gJWRcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjI0LjU2NTMzOTAyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTY5MTY3MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdHVuX2dldF9hZGRyX2xlbmAgZnVuY3Rpb24uIEknbSBjdXJpb3VzIGFib3V0IGEgc3BlY2lmaWMgZWRnZSBjYXNlLiAqKkludmVzdGlnYXRpbmcgYHR1bl9nZXRfYWRkcl9sZW5gJ3MgQmVoYXZpb3Igd2l0aCBOb24tRW1wdHkgVUMvTUMgTGlzdHMqKi4gTXkgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyBgYWRkcl9sZW5gIGV2ZW4gd2hlbiB0aGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgbGlzdHMgYXJlbid0IGVtcHR5PyBJdCBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcsIG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCBiZWhhdmlvciwgZGVwZW5kaW5nIG9uIHRoZSBpbnRlbmRlZCBkZXNpZ24uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IGludG8gYGRyaXZlcnMvbmV0L3R1bi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxNTMuIFRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4gcmVzaWRlcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGluIHRoYXQgZnVuY3Rpb24sIGFuZCBob3cgaXQgaGFuZGxlcyB0aG9zZSBsaXN0IGNvbmRpdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0aW9uIGluZmx1ZW5jZXMgdGhlIG92ZXJhbGwgYWRkcmVzcyBsZW5ndGggZGV0ZXJtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjMwLjEzNDUwODUzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE1MDpcXHR9XFxuMzE1MTpcXHRcXG4zMTUyOlxcdC8qIFJldHVybiBjb3JyZWN0IHZhbHVlIGZvciB0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gYmFzZWQgb24gdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUuICovXFxuMzE1MzpcXHRzdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuMzE1NDpcXHR7XFxuMzE1NTpcXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG4zMTU2OlxcdFxcdGNhc2UgQVJQSFJEX0lQNkdSRTpcXG4zMTU3OlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDY6XFxuMzE1ODpcXHRcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7XFxuMzE1OTpcXHRcXHRjYXNlIEFSUEhSRF9JUEdSRTpcXG4zMTYwOlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDpcXG4zMTYxOlxcdFxcdGNhc2UgQVJQSFJEX1NJVDpcXG4zMTYyOlxcdFxcdFxcdHJldHVybiA0O1xcbjMxNjM6XFx0XFx0Y2FzZSBBUlBIUkRfRVRIRVI6XFxuMzE2NDpcXHRcXHRcXHRyZXR1cm4gRVRIX0FMRU47XFxuMzE2NTpcXHRcXHRjYXNlIEFSUEhSRF9JRUVFODAyMTU0OlxcbjMxNjY6XFx0XFx0Y2FzZSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SOlxcbjMxNjc6XFx0XFx0XFx0cmV0dXJuIElFRUU4MDIxNTRfRVhURU5ERURfQUREUl9MRU47XFxuMzE2ODpcXHRcXHRjYXNlIEFSUEhSRF9QSE9ORVRfUElQRTpcXG4zMTY5OlxcdFxcdGNhc2UgQVJQSFJEX1BQUDpcXG4zMTcwOlxcdFxcdGNhc2UgQVJQSFJEX05PTkU6XFxuMzE3MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMTcyOlxcdFxcdGNhc2UgQVJQSFJEXzZMT1dQQU46XFxuMzE3MzpcXHRcXHRcXHRyZXR1cm4gRVVJNjRfQUREUl9MRU47XFxuMzE3NDpcXHRcXHRjYXNlIEFSUEhSRF9GRERJOlxcbjMxNzU6XFx0XFx0XFx0cmV0dXJuIEZERElfS19BTEVOO1xcbjMxNzY6XFx0XFx0Y2FzZSBBUlBIUkRfSElQUEk6XFxuMzE3NzpcXHRcXHRcXHRyZXR1cm4gSElQUElfQUxFTjtcXG4zMTc4OlxcdFxcdGNhc2UgQVJQSFJEX0lFRUU4MDI6XFxuMzE3OTpcXHRcXHRcXHRyZXR1cm4gRkNfQUxFTjtcXG4zMTgwOlxcdFxcdGNhc2UgQVJQSFJEX1JPU0U6XFxuMzE4MTpcXHRcXHRcXHRyZXR1cm4gUk9TRV9BRERSX0xFTjtcXG4zMTgyOlxcdFxcdGNhc2UgQVJQSFJEX05FVFJPTTpcXG4zMTgzOlxcdFxcdFxcdHJldHVybiBBWDI1X0FERFJfTEVOO1xcbjMxODQ6XFx0XFx0Y2FzZSBBUlBIUkRfTE9DQUxUTEs6XFxuMzE4NTpcXHRcXHRcXHRyZXR1cm4gTFRBTEtfQUxFTjtcXG4zMTg2OlxcdFxcdGRlZmF1bHQ6XFxuMzE4NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMTg4OlxcdFxcdH1cXG4zMTg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MzAuMTM0NzQ4MjY0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MzYwMzI3OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOU0VUTElOSyBCdWcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYFRVTlNFVExJTktgIGNoYW5nZXMgYHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZWAsIGl0IGFsc28gY2hhbmdlcyBgdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbmAuIElmIHRoZXJlIGFyZSBleGlzdGluZyB1bmljYXN0IChgZGV2LVx1MDAzZXVjYCkgb3IgbXVsdGljYXN0IChgZGV2LVx1MDAzZW1jYCkgYWRkcmVzc2VzIG9uIHRoZSBkZXZpY2UsIHRoaXMgY2FuIGxlYWQgdG8gc2VyaW91cyBwcm9ibGVtcy4gT3BlcmF0aW9ucyB1c2luZyB0aG9zZSBsaXN0cyAoZmx1c2hpbmcsIGNvbXBhcmluZywgaXRlcmF0aW5nLCBhZGRpbmcvZGVsZXRpbmcpIHRoZW4gdXNlIHRoZSAqbmV3KiBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgYnV0IHRoZSBleGlzdGluZyBlbnRyaWVzIHN0aWxsIGhhdmUgdGhlICpvbGQqIGxlbmd0aC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgaGFzaCB0YWJsZSBtaXNtYXRjaGVzLCBhbmQsIHVsdGltYXRlbHksIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUgY29tbWl0IGhpc3RvcnksIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGRldl91Y2AgYW5kIGBkZXZfbWNgIGludGVyYWN0IHdpdGggYGRldi1cdTAwM2VhZGRyX2xlbmAgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gTG9va2luZyBhdCBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AsIG1ldGhvZHMgbGlrZSBgX19od19hZGRyX2RlbGAgYW5kIGBfX2h3X2FkZHJfYWRkYCBjbGVhcmx5IHVzZSBgYWRkcl9sZW5gIGRlcml2ZWQgZnJvbSBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgY29uZmlybWluZyB0aGUgdnVsbmVyYWJpbGl0eS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHNhbml0eSBjaGVjaywgd2hpY2ggaXMgZ29vZC4gSXQgZG9lcyBzb21ldGhpbmcgbGlrZTogYGVsc2UgaWYgKHR1bl9nZXRfYWRkcl9sZW4oYXJnKSAhPSB0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuIFx1MDAyNlx1MDAyNiAoIW5ldGRldl91Y19lbXB0eSh0dW4tXHUwMDNlZGV2KSB8fCAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpKSkgeyByZXQgPSAtRUJVU1k7IH1gLiBFc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIHRoZSBsZW5ndGggY2hhbmdlIHdoZW4gdGhlIGxpc3RzIGFyZW4ndCBlbXB0eSwgcmV0dXJuaW5nIGFuIGVycm9yLiBUaGF0J3MgYSBzb2xpZCBkZWZlbnNlLlxuXG5Ob3csIGxldCdzIGFuYWx5emUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSAqbmV3KiByaXNrcy4gRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgcmVhZHMgYGFyZ2AsIGB0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuYCwgYW5kIGNoZWNrcyBgbmV0ZGV2X3VjX2VtcHR5YCBhbmQgYG5ldGRldl9tY19lbXB0eWAgd2hpY2ggY2hlY2sgaWYgdGhlIGxpc3QgaXMgZW1wdHkgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXVjLmxpc3QpIGV0Yy4pLiBEb2VzIGl0IGNvcHkgYW55dGhpbmcgdG8gdXNlcnNwYWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcz8gTm8uIERvZXMgaXQgbWVzcyB3aXRoIGJvdW5kcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcD8gTm9wZS4gSXQncyBzdHJpY3RseSAqcmVzdHJpY3RpdmUqLlxuXG5HaXZlbiB0aGF0LCB0aGUgYnVnIGlzIGFib3V0ICpwcmV2ZW50aW5nKiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYXJpc2luZyBmcm9tIGxlbmd0aCBtaXNtYXRjaGVzIGluIHRoZSBgbmV0X2RldmljZWAgYWRkcmVzcyBsaXN0cy4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8gY2F0Y2ggdGhpcyB0eXBlIG9mIGlzc3VlLCBzaW5jZSBLQVNBTiBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTGV0IG1lIGZvcm11bGF0ZSB0aGUgYEtNU0FOUmVhc29uaW5nYCB0byBiZSBhcyBjbGVhciBhcyBwb3NzaWJsZS4gVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBfX3R1bl9jaHJfaW9jdGwoKWAgdW5kZXIgYFRVTlNFVExJTktgIHRvIGRpc2FsbG93IGNoYW5naW5nIHRoZSBuZXR3b3JrIGRldmljZSBsaW5rIHR5cGUgKGFuZCB0aGVyZWZvcmUgYGRldi1cdTAwM2VhZGRyX2xlbmApIGlmIHRoZSBkZXZpY2UncyB1bmljYXN0IChgZGV2LVx1MDAzZXVjYCkgb3IgbXVsdGljYXN0IChgZGV2LVx1MDAzZW1jYCkgYWRkcmVzcyBsaXN0cyBhcmUgbm9uLWVtcHR5LiBUaGlzIHByZXZlbnRzIGFkZHJlc3MgbGVuZ3RoIG1pc21hdGNoZXMgaW4gZXhpc3RpbmcgYWRkcmVzcyBsaXN0IGVudHJpZXMsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIG9yIGFkZHJlc3MgbGlzdCBjb3JydXB0aW9uIGR1cmluZyBzdWJzZXF1ZW50IGFkZHJlc3MgbG9va3Vwcy9tb2RpZmljYXRpb25zIChpc3N1ZXMgY292ZXJlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cblxuUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjQ1LjQ5NTA4MDAwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYF9fdHVuX2Nocl9pb2N0bCgpYCBmb3IgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIGl0IHJlamVjdHMgY2hhbmdpbmcgdGhlIGRldmljZSB0eXBlIGlmIHRoZSBuZXcgYWRkcmVzcyBsZW5ndGggKGB0dW5fZ2V0X2FkZHJfbGVuKGFyZylgKSBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgYGRldi1cXHUwMDNlYWRkcl9sZW5gIHdoaWxlIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgYXJlIG5vbi1lbXB0eS4gXFxuXFxuVGhpcyBjaGFuZ2UgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2ggaXNzdWVzIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBvcGVyYXRpbmcgb24gZXhpc3RpbmcgYGRldi1cXHUwMDNldWNgIGFuZCBgZGV2LVxcdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBfX3R1bl9jaHJfaW9jdGwoKWAgZm9yIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgY29tbWFuZC4gU3BlY2lmaWNhbGx5LCBpdCByZWplY3RzIGNoYW5naW5nIHRoZSBkZXZpY2UgdHlwZSBpZiB0aGUgbmV3IGFkZHJlc3MgbGVuZ3RoIChgdHVuX2dldF9hZGRyX2xlbihhcmcpYCkgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGBkZXYtXFx1MDAzZWFkZHJfbGVuYCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFxcblxcblRoaXMgY2hhbmdlIHByZXZlbnRzIGFkZHJlc3MgbGVuZ3RoIG1pc21hdGNoIGlzc3VlcyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gb3BlcmF0aW5nIG9uIGV4aXN0aW5nIGBkZXYtXFx1MDAzZXVjYCBhbmQgYGRldi1cXHUwMDNlbWNgIGxpc3RzICh3aGljaCBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 10:38:08 +0000 UTC FinishedAt: 2026-08-29 10:52:47 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "INET" ], "series_id": "0f0d7907-660f-4af4-b80e-f7f3e5452bcf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tun_chr_ioctl", "__tun_chr_ioctl" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDtfX3R1bl9jaHJfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIGZvciB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgaXQgcmVqZWN0cyBjaGFuZ2luZyB0aGUgZGV2aWNlIHR5cGUgaWYgdGhlIG5ldyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBgZGV2LVx1MDAzZWFkZHJfbGVuYCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFxuXG5UaGlzIGNoYW5nZSBwcmV2ZW50cyBhZGRyZXNzIGxlbmd0aCBtaXNtYXRjaCBpc3N1ZXMgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIG9wZXJhdGluZyBvbiBleGlzdGluZyBgZGV2LVx1MDAzZXVjYCBhbmQgYGRldi1cdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgVFVOIGRyaXZlciYjMzk7cyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlOTY5ZmVhODA2YjA3OTc4ZjM2OGU0OThmOWRmZDBmYmMwMmFjOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCA1YTMwMjcwOWE2OGFhLi5lNWI3NzI5YTk2N2RlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtMzM0MSw2ICYjNDM7MzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbiBcdFx0XHRcdCAgIFwmIzM0O0xpbmt0eXBlIHNldCBmYWlsZWQgYmVjYXVzZSBpbnRlcmZhY2UgaXMgdXBcXG5cJiMzNDspO1xuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cdTAwM2VkZXYpIHx8XG4mIzQzO1x0XHRcdCAgICAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpKSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDtfX3R1bl9jaHJfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIFRVTiBkcml2ZXImIzM5O3MgVFVOU0VUTElOSyBpb2N0bCBoYW5kbGVyIChfX3R1bl9jaHJfaW9jdGwpIHRvIHJlamVjdCBsaW5rIHR5cGUgY2hhbmdlcyB3aXRoIC1FQlVTWSBpZiB0aGUgbmV3IGxpbmsgdHlwZSBoYXMgYSBkaWZmZXJlbnQgYWRkcmVzcyBsZW5ndGggd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBvbiB0aGUgbmV0ZGV2aWNlIGFyZSBub3QgZW1wdHkuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZTk2OWZlYTgwNmIwNzk3OGYzNjhlNDk4ZjlkZmQwZmJjMDJhYzlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTA6NTA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDVhMzAyNzA5YTY4YWEuLmU1Yjc3MjlhOTY3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0zMzQxLDYgJiM0MzszMzQxLDEwIEBAIHN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCW5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi0mZ3Q7ZGV2LAogCQkJCSAgICYjMzQ7TGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxuJiMzNDspOwogCQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJfSBlbHNlIGlmICh0dW5fZ2V0X2FkZHJfbGVuKGFyZykgIT0gdHVuLSZndDtkZXYtJmd0O2FkZHJfbGVuICZhbXA7JmFtcDsKJiM0MzsJCQkgICAoIW5ldGRldl91Y19lbXB0eSh0dW4tJmd0O2RldikgfHwKJiM0MzsJCQkgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tJmd0O2RldikpKSB7CiYjNDM7CQkJcmV0ID0gLUVCVVNZOwogCQl9IGVsc2UgewogCQkJcmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsCiAJCQkJCQkgICAgICAgdHVuLSZndDtkZXYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUdW4gRHJpdmVyIENvZGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY2hhbmdlZC4gSSYjMzk7bGwgc3RhcnQgYnkgaW5zcGVjdGluZyB0aGUgZGlmZiB0byBnZXQgYSBnZW5lcmFsIG92ZXJ2aWV3IG9mIHRoZSBtb2RpZmljYXRpb25zLiBUaGVuLCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBhcm91bmQgYGRyaXZlcnMvbmV0L3R1bi5jYC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgbmV0d29yay1yZWxhdGVkIGlzc3VlcywgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBsZXZlcmFnZSBteSB1c3VhbCB3b3JrZmxvdy4gSSB3aWxsIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQsIHRvIHBpbnBvaW50IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMzNDEgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoYXQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzMwOlx0XHRcdFx0YnJlYWs7XG4zMzMxOlx0XHRcdH1cbjMzMzI6XHRcdFx0V1JJVEVfT05DRSh0dW4tXHUwMDNlZ3JvdXAsIGdyb3VwKTtcbjMzMzM6XHRcdFx0ZG9fbm90aWZ5ID0gdHJ1ZTtcbjMzMzQ6XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldiwgXCYjMzQ7Z3JvdXAgc2V0IHRvICV1XFxuXCYjMzQ7LFxuMzMzNTpcdFx0XHRcdCAgIGZyb21fa2dpZChcdTAwMjZpbml0X3VzZXJfbnMsIGdyb3VwKSk7XG4zMzM2Olx0XHRcdGJyZWFrO1xuMzMzNzpcdFxuMzMzODpcdFx0Y2FzZSBUVU5TRVRMSU5LOlxuMzMzOTpcdFx0XHQvKiBPbmx5IGFsbG93IHNldHRpbmcgdGhlIHR5cGUgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi9cbjMzNDA6XHRcdFx0aWYgKHR1bi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkge1xuMzM0MTpcdFx0XHRcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsXG4zMzQyOlx0XHRcdFx0XHQgICBcJiMzNDtMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXFxuXCYjMzQ7KTtcbjMzNDM6XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4zMzQ0Olx0XHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4zMzQ1Olx0XHRcdFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVx1MDAzZWRldikgfHxcbjMzNDY6XHRcdFx0XHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXHUwMDNlZGV2KSkpIHtcbjMzNDc6XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4zMzQ4Olx0XHRcdH0gZWxzZSB7XG4zMzQ5Olx0XHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4zMzUwOlx0XHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuMzM1MTpcdFx0XHRcdHJldCA9IG5vdGlmaWVyX3RvX2Vycm5vKHJldCk7XG4zMzUyOlx0XHRcdFx0aWYgKHJldCkge1xuMzM1MzpcdFx0XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbjMzNTQ6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7UmVmdXNlZCB0byBjaGFuZ2UgZGV2aWNlIHR5cGVcXG5cJiMzNDspO1xuMzM1NTpcdFx0XHRcdFx0YnJlYWs7XG4zMzU2Olx0XHRcdFx0fVxuMzM1NzpcdFx0XHRcdHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9IChpbnQpIGFyZztcbjMzNTg6XHRcdFx0XHR0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuID0gdHVuX2dldF9hZGRyX2xlbih0dW4tXHUwMDNlZGV2LVx1MDAzZXR5cGUpO1xuMzM1OTpcdFx0XHRcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O2xpbmt0eXBlIHNldCB0byAlZFxcblwmIzM0OyxcbjMzNjA6XHRcdFx0XHRcdCAgIHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSk7XG4zMzYxOlx0XHRcdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFLFxuMzM2MjpcdFx0XHRcdFx0XHRcdCB0dW4tXHUwMDNlZGV2KTtcbjMzNjM6XHRcdFx0fVxuMzM2NDpcdFx0XHRicmVhaztcbjMzNjU6XHRcbjMzNjY6XHRcdGNhc2UgVFVOU0VUREVCVUc6XG4zMzY3Olx0XHRcdHR1bi1cdTAwM2Vtc2dfZW5hYmxlID0gKHUzMilhcmc7XG4zMzY4Olx0XHRcdGJyZWFrO1xuMzM2OTpcdFxuMzM3MDpcdFx0Y2FzZSBUVU5TRVRPRkZMT0FEOlxuMzM3MTpcdFx0XHRyZXQgPSBzZXRfb2ZmbG9hZCh0dW4sIGFyZyk7XG4zMzcyOlx0XHRcdGJyZWFrO1xuMzM3MzpcdFxuMzM3NDpcdFx0Y2FzZSBUVU5TRVRUWEZJTFRFUjpcbjMzNzU6XHRcdFx0LyogQ2FuIGJlIHNldCBvbmx5IGZvciBUQVBzICovXG4zMzc2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4zMzc3Olx0XHRcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxuMzM3ODpcdFx0XHRcdGJyZWFrO1xuMzM3OTpcdFx0XHRyZXQgPSB1cGRhdGVfZmlsdGVyKFx1MDAyNnR1bi1cdTAwM2V0eGZsdCwgKHZvaWQgX191c2VyICopYXJnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHR1bl9jaHJfaW9jdGxgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGN1cnJlbnQgY29kZSBzbmlwcGV0IOKAkyB1bmRlcnN0YW5kaW5nIGl0cyBpbW1lZGlhdGUgY29udGV4dCBpcyBjcnVjaWFsLiBUaGVuLCBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBgX190dW5fY2hyX2lvY3RsYCBvciBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24uIEEgcXVpY2sgYGdyZXBgIG1pZ2h0IGJlIGhlbHBmdWwgdG8gdW5jb3ZlciBhbGwgdGhlIGNhbGwgc2l0ZXMsIG9yIEkgY2FuIGp1c3QgY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZS4gR2V0dGluZyBhIHNlbnNlIG9mIHRoZSBleGVjdXRpb24gZmxvdyB3aWxsIGJlIGltcG9ydGFudC4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlLCBtYXliZSBldmVuIGEgZmV3IGxpbmVzIGJlZm9yZSB0byBncmFzcCB0aGUgc2l0dWF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciB0aGF0IEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzIwMDpcdFx0a3VpZF90IG93bmVyO1xuMzIwMTpcdFx0a2dpZF90IGdyb3VwO1xuMzIwMjpcdFx0aW50IGlmaW5kZXg7XG4zMjAzOlx0XHRpbnQgc25kYnVmO1xuMzIwNDpcdFx0aW50IHJldDtcbjMyMDU6XHRcdGJvb2wgZG9fbm90aWZ5ID0gZmFsc2U7XG4zMjA2Olx0XG4zMjA3Olx0XHRpZiAoY21kID09IFRVTlNFVElGRiB8fCBjbWQgPT0gVFVOU0VUUVVFVUUgfHxcbjMyMDg6XHRcdCAgICAoX0lPQ19UWVBFKGNtZCkgPT0gU09DS19JT0NfVFlQRSBcdTAwMjZcdTAwMjYgY21kICE9IFNJT0NHU0tOUykpIHtcbjMyMDk6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmlmciwgYXJncCwgaWZyZXFfbGVuKSlcbjMyMTA6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjMyMTE6XHRcdH0gZWxzZSB7XG4zMjEyOlx0XHRcdG1lbXNldChcdTAwMjZpZnIsIDAsIHNpemVvZihpZnIpKTtcbjMyMTM6XHRcdH1cbjMyMTQ6XHRcdGlmIChjbWQgPT0gVFVOR0VURkVBVFVSRVMpIHtcbjMyMTU6XHRcdFx0LyogQ3VycmVudGx5IHRoaXMganVzdCBtZWFuczogXCYjMzQ7d2hhdCBJRkYgZmxhZ3MgYXJlIHZhbGlkP1wmIzM0Oy5cbjMyMTY6XHRcdFx0ICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZXZlciBjaGVja2VkIGZvciBpbnZhbGlkIGZsYWdzIG9uXG4zMjE3Olx0XHRcdCAqIFRVTlNFVElGRi5cbjMyMTg6XHRcdFx0ICovXG4zMjE5Olx0XHRcdHJldHVybiBwdXRfdXNlcihJRkZfVFVOIHwgSUZGX1RBUCB8IElGRl9OT19DQVJSSUVSIHxcbjMyMjA6XHRcdFx0XHRcdFRVTl9GRUFUVVJFUywgKHVuc2lnbmVkIGludCBfX3VzZXIqKWFyZ3ApO1xuMzIyMTpcdFx0fSBlbHNlIGlmIChjbWQgPT0gVFVOU0VUUVVFVUUpIHtcbjMyMjI6XHRcdFx0cmV0dXJuIHR1bl9zZXRfcXVldWUoZmlsZSwgXHUwMDI2aWZyKTtcbjMyMjM6XHRcdH0gZWxzZSBpZiAoY21kID09IFNJT0NHU0tOUykge1xuMzIyNDpcdFx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuMzIyNTpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4zMjI2Olx0XHRcdHJldHVybiBvcGVuX3JlbGF0ZWRfbnMoXHUwMDI2bmV0LVx1MDAzZW5zLCBnZXRfbmV0X25zKTtcbjMyMjc6XHRcdH1cbjMyMjg6XHRcbjMyMjk6XHRcdHJ0bmxfbG9jaygpO1xuMzIzMDpcdFxuMzIzMTpcdFx0dHVuID0gdHVuX2dldCh0ZmlsZSk7XG4zMjMyOlx0XHRpZiAoY21kID09IFRVTlNFVElGRikge1xuMzIzMzpcdFx0XHRyZXQgPSAtRUVYSVNUO1xuMzIzNDpcdFx0XHRpZiAodHVuKVxuMzIzNTpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzIzNjpcdFxuMzIzNzpcdFx0XHRpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAmIzM5O1xcMCYjMzk7O1xuMzIzODpcdFxuMzIzOTpcdFx0XHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFx1MDAyNmlmcik7XG4zMjQwOlx0XG4zMjQxOlx0XHRcdGlmIChyZXQpXG4zMjQyOlx0XHRcdFx0Z290byB1bmxvY2s7XG4zMjQzOlx0XG4zMjQ0Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2aWZyLCBpZnJlcV9sZW4pKVxuMzI0NTpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4zMjQ2Olx0XHRcdGdvdG8gdW5sb2NrO1xuMzI0NzpcdFx0fVxuMzI0ODpcdFx0aWYgKGNtZCA9PSBUVU5TRVRJRklOREVYKSB7XG4zMjQ5Olx0XHRcdHJldCA9IC1FUEVSTTtcbjMyNTA6XHRcdFx0aWYgKHR1bilcbjMyNTE6XHRcdFx0XHRnb3RvIHVubG9jaztcbjMyNTI6XHRcbjMyNTM6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjMyNTQ6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmlmaW5kZXgsIGFyZ3AsIHNpemVvZihpZmluZGV4KSkpXG4zMjU1Olx0XHRcdFx0Z290byB1bmxvY2s7XG4zMjU2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4zMjU3Olx0XHRcdGlmIChpZmluZGV4IFx1MDAzYyAwKVxuMzI1ODpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzI1OTpcdFx0XHRyZXQgPSAwO1xuMzI2MDpcdFx0XHR0ZmlsZS1cdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcbjMyNjE6XHRcdFx0Z290byB1bmxvY2s7XG4zMjYyOlx0XHR9XG4zMjYzOlx0XG4zMjY0Olx0XHRyZXQgPSAtRUJBREZEO1xuMzI2NTpcdFx0aWYgKCF0dW4pXG4zMjY2Olx0XHRcdGdvdG8gdW5sb2NrO1xuMzI2NzpcdFxuMzI2ODpcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldiwgXCYjMzQ7dHVuX2Nocl9pb2N0bCBjbWQgJXVcXG5cJiMzNDssIGNtZCk7XG4zMjY5Olx0XG4zMjcwOlx0XHRuZXQgPSBkZXZfbmV0KHR1bi1cdTAwM2VkZXYpO1xuMzI3MTpcdFx0cmV0ID0gMDtcbjMyNzI6XHRcdHN3aXRjaCAoY21kKSB7XG4zMjczOlx0XHRjYXNlIFRVTkdFVElGRjpcbjMyNzQ6XHRcdFx0dHVuX2dldF9pZmYodHVuLCBcdTAwMjZpZnIpO1xuMzI3NTpcdFxuMzI3NjpcdFx0XHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpXG4zMjc3Olx0XHRcdFx0aWZyLmlmcl9mbGFncyB8PSBJRkZfREVUQUNIX1FVRVVFO1xuMzI3ODpcdFx0XHRpZiAoIXRmaWxlLVx1MDAzZXNvY2tldC5zay1cdTAwM2Vza19maWx0ZXIpXG4zMjc5Olx0XHRcdFx0aWZyLmlmcl9mbGFncyB8PSBJRkZfTk9GSUxURVI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0dW5fY2hyX2lvY3RsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB0dW5fY2hyX2lvY3RsYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgZGVmaW5pdGlvbi4gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBsb29rZWQgYXQgdGhlIGxvdy1sZXZlbCBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSBmb3IgdGhlIFRVTiBkcml2ZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIHNvdXJjZSBhbmQgY29uZmlybWluZyBob3cgaXQgaGFuZGxlcyB0aG9zZSBpb2N0bCBjYWxscy4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHNlZSB3aGljaCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciB1c2VyLXNwYWNlIHByb2Nlc3NlcyBhcmUgKmNhbGxpbmcqIGB0dW5fY2hyX2lvY3RsYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gV2hhdCBmdW5jdGlvbmFsaXR5IGlzIHJlbHlpbmcgb24gdGhlc2UgaW9jdGxzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHN0YW5kYXJkIFRVTi9UQVAgb3BlcmF0aW9ucywgb3IgYXJlIHRoZXJlIGN1c3RvbSBleHRlbnNpb25zIGluIHBsYXk/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgbWFwIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQzMDpcdFx0XHRicmVhaztcbjM0MzE6XHRcbjM0MzI6XHRcdGNhc2UgVFVOREVUQUNIRklMVEVSOlxuMzQzMzpcdFx0XHQvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi9cbjM0MzQ6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjM0MzU6XHRcdFx0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spICE9IElGRl9UQVApXG4zNDM2Olx0XHRcdFx0YnJlYWs7XG4zNDM3Olx0XHRcdHJldCA9IDA7XG4zNDM4Olx0XHRcdHR1bl9kZXRhY2hfZmlsdGVyKHR1biwgdHVuLVx1MDAzZW51bXF1ZXVlcyk7XG4zNDM5Olx0XHRcdGJyZWFrO1xuMzQ0MDpcdFxuMzQ0MTpcdFx0Y2FzZSBUVU5HRVRGSUxURVI6XG4zNDQyOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4zNDQzOlx0XHRcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxuMzQ0NDpcdFx0XHRcdGJyZWFrO1xuMzQ0NTpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMzQ0NjpcdFx0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnR1bi1cdTAwM2VmcHJvZywgc2l6ZW9mKHR1bi1cdTAwM2VmcHJvZykpKVxuMzQ0NzpcdFx0XHRcdGJyZWFrO1xuMzQ0ODpcdFx0XHRyZXQgPSAwO1xuMzQ0OTpcdFx0XHRicmVhaztcbjM0NTA6XHRcbjM0NTE6XHRcdGNhc2UgVFVOU0VUU1RFRVJJTkdFQlBGOlxuMzQ1MjpcdFx0XHRyZXQgPSB0dW5fc2V0X2VicGYodHVuLCBcdTAwMjZ0dW4tXHUwMDNlc3RlZXJpbmdfcHJvZywgYXJncCk7XG4zNDUzOlx0XHRcdGJyZWFrO1xuMzQ1NDpcdFxuMzQ1NTpcdFx0Y2FzZSBUVU5TRVRGSUxURVJFQlBGOlxuMzQ1NjpcdFx0XHRyZXQgPSB0dW5fc2V0X2VicGYodHVuLCBcdTAwMjZ0dW4tXHUwMDNlZmlsdGVyX3Byb2csIGFyZ3ApO1xuMzQ1NzpcdFx0XHRicmVhaztcbjM0NTg6XHRcbjM0NTk6XHRcdGNhc2UgVFVOU0VUQ0FSUklFUjpcbjM0NjA6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjM0NjE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNhcnJpZXIsIGFyZ3AsIHNpemVvZihjYXJyaWVyKSkpXG4zNDYyOlx0XHRcdFx0Z290byB1bmxvY2s7XG4zNDYzOlx0XG4zNDY0Olx0XHRcdHJldCA9IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIodHVuLVx1MDAzZWRldiwgKGJvb2wpY2Fycmllcik7XG4zNDY1Olx0XHRcdGJyZWFrO1xuMzQ2NjpcdFxuMzQ2NzpcdFx0Y2FzZSBUVU5HRVRERVZORVROUzpcbjM0Njg6XHRcdFx0cmV0ID0gLUVQRVJNO1xuMzQ2OTpcdFx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuMzQ3MDpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzQ3MTpcdFx0XHRyZXQgPSBvcGVuX3JlbGF0ZWRfbnMoXHUwMDI2bmV0LVx1MDAzZW5zLCBnZXRfbmV0X25zKTtcbjM0NzI6XHRcdFx0YnJlYWs7XG4zNDczOlx0XG4zNDc0Olx0XHRkZWZhdWx0OlxuMzQ3NTpcdFx0XHRyZXQgPSB0dW5fdm5ldF9pb2N0bChcdTAwMjZ0dW4tXHUwMDNldm5ldF9oZHJfc3osIFx1MDAyNnR1bi1cdTAwM2VmbGFncywgY21kLCBhcmdwKTtcbjM0NzY6XHRcdFx0YnJlYWs7XG4zNDc3Olx0XHR9XG4zNDc4Olx0XG4zNDc5Olx0XHRpZiAoZG9fbm90aWZ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3Rpbmc6CgoqKkV4YW1pbmluZyBMaW5lIDM0ODAgYW5kIEJleW9uZCoqCgpBbHJpZ2h0LCBJJiMzOTttIGF0IGxpbmUgMzQ4MC4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHdoYXQgSSBkbyBhYm91dCB0aGlzIGNvZGViYXNlLCBJIGhhdmUgYSBmZXcgaW1tZWRpYXRlIHRoaW5ncyBJJiMzOTttIGxvb2tpbmcgZm9yLiBJcyB0aGlzIGEgY3JpdGljYWwgc2VjdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZD8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZSBkZWNsYXJhdGlvbiwgYSBmdW5jdGlvbiBjYWxsLCBhIHNwZWNpZmljIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbiwgb3IgbWVyZWx5IGEgY29tbWVudD8gQmFzZWQgb24gdGhlIGN1cnJlbnQgbW9kdWxlIGNvbnRleHQsIHRoZSBzdXJyb3VuZGluZyB2YXJpYWJsZXMsIGFuZCB0aGUgb3ZlcmFsbCBwcm9ncmFtIGFyY2hpdGVjdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGxpbmUgc2lnbmlmaWVzLgoKTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gcmVjb25zdHJ1Y3QgdGhlIGNvbnRyb2wgZmxvdyB0aGF0IHdpbGwgYnJpbmcgdGhlIHByb2dyYW0gdG8gdGhpcyBzcGVjaWZpYyBsaW5lLiBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwcmVjb25kaXRpb25zLCB0aGUgcG9zc2libGUgaW5wdXRzIHRoYXQgY291bGQgYmUgY2F1c2luZyB0aGlzIGxpbmUgdG8gYmUgZXhlY3V0ZWQsIGFuZCB0aGUgc3Vic2VxdWVudCBsb2dpYyB0aGlzIGxpbmUgbWlnaHQgdHJpZ2dlci4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoZSBzeW50YXgsIGlkZW50aWZ5IGFueSB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIGJlaW5nIHVzZWQsIGFuZCBkZXRlcm1pbmUgdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBsaWtlIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyBoYXZlIHRvIGtlZXAgbXkgZXllIG91dCBmb3IgYW55IHVudXN1YWwgcGF0dGVybnMgb3IgbG9naWMgdGhhdCBzZWVtcyBvdXQgb2YgcGxhY2UsIHBvdGVudGlhbGx5IGluZGljYXRpbmcgYSBidWcgb3IgYW4gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBUaGlzIGxpbmUgaXMganVzdCBhIHBvaW50IGluIHRpbWUsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBwcmVzZW50IGFuZCBmdXR1cmUgc3RhdGUgcmVsYXRpdmUgdG8gdGhlIGNvZGUsIGFuZCBob3cgdGhlIHByb2dyYW0gYXJyaXZlZCBhdCB0aGlzIG1vbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0ODA6XHRcdFx0bmV0ZGV2X3N0YXRlX2NoYW5nZSh0dW4tXHUwMDNlZGV2KTtcbjM0ODE6XHRcbjM0ODI6XHR1bmxvY2s6XG4zNDgzOlx0XHRydG5sX3VubG9jaygpO1xuMzQ4NDpcdFx0aWYgKHR1bilcbjM0ODU6XHRcdFx0dHVuX3B1dCh0dW4pO1xuMzQ4NjpcdFx0cmV0dXJuIHJldDtcbjM0ODc6XHR9XG4zNDg4Olx0XG4zNDg5Olx0c3RhdGljIGxvbmcgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbjM0OTA6XHRcdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMzQ5MTpcdHtcbjM0OTI6XHRcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZiAoc3RydWN0IGlmcmVxKSk7XG4zNDkzOlx0fVxuMzQ5NDpcdFxuMzQ5NTpcdCNpZmRlZiBDT05GSUdfQ09NUEFUXG4zNDk2Olx0c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4zNDk3Olx0XHRcdFx0IHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMzQ5ODpcdHtcbjM0OTk6XHRcdHN3aXRjaCAoY21kKSB7XG4zNTAwOlx0XHRjYXNlIFRVTlNFVElGRjpcbjM1MDE6XHRcdGNhc2UgVFVOR0VUSUZGOlxuMzUwMjpcdFx0Y2FzZSBUVU5TRVRUWEZJTFRFUjpcbjM1MDM6XHRcdGNhc2UgVFVOR0VUU05EQlVGOlxuMzUwNDpcdFx0Y2FzZSBUVU5TRVRTTkRCVUY6XG4zNTA1Olx0XHRjYXNlIFNJT0NHSUZIV0FERFI6XG4zNTA2Olx0XHRjYXNlIFNJT0NTSUZIV0FERFI6XG4zNTA3Olx0XHRcdGFyZyA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKTtcbjM1MDg6XHRcdFx0YnJlYWs7XG4zNTA5Olx0XHRkZWZhdWx0OlxuMzUxMDpcdFx0XHRhcmcgPSAoY29tcGF0X3Vsb25nX3QpYXJnO1xuMzUxMTpcdFx0XHRicmVhaztcbjM1MTI6XHRcdH1cbjM1MTM6XHRcbjM1MTQ6XHRcdC8qXG4zNTE1Olx0XHQgKiBjb21wYXRfaWZyZXEgaXMgc2hvcnRlciB0aGFuIGlmcmVxLCBzbyB3ZSBtdXN0IG5vdCBhY2Nlc3MgYmV5b25kXG4zNTE2Olx0XHQgKiB0aGUgZW5kIG9mIHRoYXQgc3RydWN0dXJlLiBBbGwgZmllbGRzIHRoYXQgYXJlIHVzZWQgaW4gdGhpc1xuMzUxNzpcdFx0ICogZHJpdmVyIGFyZSBjb21wYXRpYmxlIHRob3VnaCwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29udmVydCB0aGVcbjM1MTg6XHRcdCAqIGNvbnRlbnRzLlxuMzUxOTpcdFx0ICovXG4zNTIwOlx0XHRyZXR1cm4gX190dW5fY2hyX2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9pZnJlcSkpO1xuMzUyMTpcdH1cbjM1MjI6XHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xuMzUyMzpcdFxuMzUyNDpcdHN0YXRpYyBpbnQgdHVuX2Nocl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKVxuMzUyNTpcdHtcbjM1MjY6XHRcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjM1Mjc6XHRcdGludCByZXQ7XG4zNTI4Olx0XG4zNTI5Olx0XHRpZiAob24pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGB0dW5fY2hyX2lvY3RsYCBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdHVuLmNgIGZpbGUuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgZGlmZmVyZW50IGZpbGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB1c2luZyB0aGlzIHNwZWNpZmljIGlvY3RsIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGB0dW5gIGRldmljZSBkcml2ZXIuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgc2VhcmNoaW5nIGZvciBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZSwgYW5kIHRoZW4gdHJ5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMTUzPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTkwLVxuZHJpdmVycy9uZXQvdHVuLmM6MzE5MTpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMTkyLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMjY3LVxuZHJpdmVycy9uZXQvdHVuLmM6MzI2ODpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzI2OS1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDg4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4OTpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5MC1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5MS17XG5kcml2ZXJzL25ldC90dW4uYzozNDkyOlx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0OTMtfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0OTY9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUxOS1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzUyMDpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zNTIxLX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2MjItXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNjIzOlx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNjI0LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMDEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkcyBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIFRVTiBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHR1bi5jYCBkcml2ZXIgaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gZmluZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZHJpdmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgZGlyZWN0bHkgcmVmZXJlbmNpbmcgYGRyaXZlcnMvbmV0L3R1bi5jYCBvciwgbW9yZSBsaWtlbHksIGEgS2NvbmZpZyBzeW1ib2wgdGllZCB0byBpdHMgZW5hYmxlbWVudC4gVGhhdCBzaG91bGQgdGVsbCBtZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIHRoZSBUVU4gZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBidWlsdCBhcyBhIG1vZHVsZS4KCk5leHQsIGFzc3VtaW5nIEkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyAob3IgZXZlbiBpZiBJICpkb24mIzM5O3QqIGZpbmQgYSBkaXJlY3QgcmVmZXJlbmNlIGFuZCBJIG5lZWQgbW9yZSBjb250ZXh0KSwgSSYjMzk7bGwgcGl2b3QgYW5kIGV4YW1pbmUgdGhlIGBNYWtlZmlsZWAgaW4gYGRyaXZlcnMvbmV0L2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYGdyZXBgIHRocm91Z2ggdGhlIGBNYWtlZmlsZWAgdG8gc2VlIGhvdyB0aG9zZSBjb25maWcgc3ltYm9scyBmcm9tIEtjb25maWcgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGB0dW4ub2AgaXMgYnVpbHQuIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb21waWxlciBkaXJlY3RpdmVzIGRlY2lkZSB3aGF0IGdldHMgY29tcGlsZWQgYmFzZWQgb24gdGhlIEtjb25maWcgb3B0aW9ucy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGZpbmFsIGFuc3dlci4gSG9wZWZ1bGx5LCBJIGNhbiBjbGVhcmx5IG1hcCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gdGhlIGRyaXZlciYjMzk7cyBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVF9URUFNKSAmIzQzOz0gdGVhbS9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19UVU4pICYjNDM7PSB0dW4ub1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX1RBUCkgJiM0Mzs9IHRhcC5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQxPW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgJiM0Mzs9IGVuL2h2X3ZoY2Ffc3RhdHMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQyOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0VTV0lUQ0gpICAgICAmIzQzOz0gbGFnL21wLm8gbGFnL3BvcnRfc2VsLm8gbGliL2dlbmV2ZS5vIGxpYi9wb3J0X3R1bi5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDMtXHRcdFx0XHRcdGVuX3JlcC5vIGVuL3JlcC9ib25kLm8gZW4vbW9kX2hkci5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQ1PW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NMU19BQ1QpICAgICAmIzQzOz0gZW5fdGMubyBlbi9yZXAvdGMubyBlbi9yZXAvbmVpZ2gubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQ2Olx0XHRcdFx0XHRsaWIvZnNfY2hhaW5zLm8gZW4vdGNfdHVuLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00Ny1cdFx0XHRcdFx0ZXN3L2luZGlyX3RhYmxlLm8gZW4vdGNfdHVuX2VuY2FwLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NTM9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICYjNDM7PSBlbi90Yy9hY3QvYWN0Lm8gZW4vdGMvYWN0L2Ryb3AubyBlbi90Yy9hY3QvdHJhcC5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNTQtXHRcdFx0XHRcdGVuL3RjL2FjdC9hY2NlcHQubyBlbi90Yy9hY3QvbWFyay5vIGVuL3RjL2FjdC9nb3RvLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo1NTpcdFx0XHRcdFx0ZW4vdGMvYWN0L3R1bi5vIGVuL3RjL2FjdC9jc3VtLm8gZW4vdGMvYWN0L3BlZGl0Lm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01Ni1cdFx0XHRcdFx0ZW4vdGMvYWN0L3ZsYW4ubyBlbi90Yy9hY3Qvdmxhbl9tYW5nbGUubyBlbi90Yy9hY3QvbXBscy5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMDQ1PW5mcF90dW5uZWxfbG9va3VwX29mZmxvYWRlZF9tYWNzKHN0cnVjdCBuZnBfYXBwICphcHAsIGNvbnN0IHU4ICptYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMDQ5Olx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIG1hYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTA1MC1cdFx0XHRcdCAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMDc3PW5mcF90dW5uZWxfYWRkX3NoYXJlZF9tYWMoc3RydWN0IG5mcF9hcHAgKmFwcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjExMjg6XHRcdGlmIChyaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTI5LVx0XHRcdFx0XHQgICBcdTAwMjZlbnRyeS1cdTAwM2VodF9ub2RlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTE1MC1lcnJfcmVtb3ZlX2hhc2g6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjExNTE6XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLCBcdTAwMjZlbnRyeS1cdTAwM2VodF9ub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTUyLVx0XHRcdCAgICAgICBvZmZsb2FkZWRfbWFjc19wYXJhbXMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTE2Mz1uZnBfdHVubmVsX2RlbF9zaGFyZWRfbWFjKHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMjI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMjI4Olx0V0FSTl9PTl9PTkNFKHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEyMjktXHRcdFx0XHRcdCAgICBcdTAwMjZlbnRyeS1cdTAwM2VodF9ub2RlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTUwNz1pbnQgbmZwX3R1bm5lbF9jb25maWdfc3RhcnQoc3RydWN0IG5mcF9hcHAgKmFwcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MTItXHQvKiBJbml0aWFsaXNlIHJoYXNoIGZvciBNQUMgb2ZmbG9hZCB0cmFja2luZy4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUxMzpcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUxNC1cdFx0XHQgICAgICBcdTAwMjZvZmZsb2FkZWRfbWFjc19wYXJhbXMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUzMC1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUzMTpcdFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTMyLVx0XHRcdFx0XHQgICAgbmZwX2NoZWNrX3JoYXNodGFibGVfZW1wdHksIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTUzOT12b2lkIG5mcF90dW5uZWxfY29uZmlnX3N0b3Aoc3RydWN0IG5mcF9hcHAgKmFwcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1NTgtXHQvKiBEZXN0cm95IHJoYXNoLiBFbnRyaWVzIHNob3VsZCBiZSBjbGVhbmVkIG9uIG5ldGRldiBub3RpZmllciB1bnJlZy4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTU1OTpcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTU2MC1cdFx0XHRcdCAgICBuZnBfY2hlY2tfcmhhc2h0YWJsZV9lbXB0eSwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzODcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBkZXZlbG9wbWVudCBvciBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQ2hlY2tpbmcgdGhlIFRVTi9UQVAgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGRlZXBlciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSBUVU4vVEFQIGRyaXZlci4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIG5ldHdvcmtpbmctcmVsYXRlZCBpc3N1ZSBvciBJJiMzOTttIHRyeWluZyB0byB1dGlsaXplIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24uIE5vIHBvaW50IHdhc3RpbmcgdGltZSBndWVzc2luZzsgbGV0JiMzOTtzIGNoZWNrIGBDT05GSUdfVFVOYCBpbiB0aGUgS2NvbmZpZywgdG8gc2VlIGlmIGl0JiMzOTtzIHNldCB0byAmIzM0O3kmIzM0OyAoYnVpbHQtaW4pIG9yICYjMzQ7bSYjMzQ7IChtb2R1bGUpLiBUaGVuIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU5cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBtb2R1bGUgaXMgc2V0IHVwLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMzkxLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmRzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNpc2lvbnMgZ2V0IG1hZGUsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNwZWxsZWQgb3V0LiBJIGNhbiBvZnRlbiBnZXQgYSBzZW5zZSBvZiB0aGUgaW50ZW5kZWQgdXNlIGNhc2UganVzdCBieSByZWFkaW5nIHRoaXMgc2VjdGlvbiwgYW5kIHRoYXQgY2FuIHNoYXBlIGFsbCBmdXJ0aGVyIGFuYWx5c2lzLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg4Olx0XHRkZXBlbmRzIG9uIFJJT05FVFxuIDM4OTpcdFx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbiAzOTA6XHRcbiAzOTE6XHRjb25maWcgVFVOXG4gMzkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAzOTM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM5NDpcdFx0c2VsZWN0IENSQzMyXG4gMzk1Olx0XHRoZWxwXG4gMzk2Olx0XHQgIFRVTi9UQVAgcHJvdmlkZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGZvciB1c2VyIHNwYWNlXG4gMzk3Olx0XHQgIHByb2dyYW1zLiAgSXQgY2FuIGJlIHZpZXdlZCBhcyBhIHNpbXBsZSBQb2ludC10by1Qb2ludCBvciBFdGhlcm5ldFxuIDM5ODpcdFx0ICBkZXZpY2UsIHdoaWNoIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBhIHBoeXNpY2FsIG1lZGlhLFxuIDM5OTpcdFx0ICByZWNlaXZlcyB0aGVtIGZyb20gdXNlciBzcGFjZSBwcm9ncmFtIGFuZCBpbnN0ZWFkIG9mIHNlbmRpbmcgcGFja2V0c1xuIDQwMDpcdFx0ICB2aWEgcGh5c2ljYWwgbWVkaWEgd3JpdGVzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS5cbiA0MDE6XHRcbiA0MDI6XHRcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXG4gNDAzOlx0XHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXG4gNDA0Olx0XHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcbiA0MDU6XHRcdCAgYWxsIHJvdXRlcyBjb3JyZXNwb25kaW5nIHRvIGl0LlxuIDQwNjpcdFxuIDQwNzpcdFx0ICBQbGVhc2UgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XHUwMDNlIGZvciBtb3JlXG4gNDA4Olx0XHQgIGluZm9ybWF0aW9uLlxuIDQwOTpcdFxuIDQxMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNDExOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHR1bi5cbiA0MTI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBUVU4vVEFQIERyaXZlciYjMzk7cyBgVFVOU0VUTElOS2AgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgYHR1bl9jaHJfaW9jdGxgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgVFVOL1RBUCBkcml2ZXIgKGBkcml2ZXJzL25ldC90dW4uY2ApLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNvbmNlcm5lZCB3aXRoIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjYWxsLCB3aGljaCBpcyB1c2VkIHRvIHNldCB0aGUgbGluayB0eXBlIG9mIHRoZSBUVU4gZGV2aWNlLiBJIHNlZSB0aGUgY2hlY2sgaGVyZSDigJMgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0byBjaGFuZ2UgdGhlIGxpbmsgdHlwZSBhbmQgKnNpbXVsdGFuZW91c2x5KjoKCjEuICBUaGUgbmV3IGxpbmsgdHlwZSYjMzk7cyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBkZXZpY2UmIzM5O3MgYWRkcmVzcyBsZW5ndGggKGB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW5gKS4KMi4gIFRoZSBkZXZpY2UgaGFzIGVpdGhlciBleGlzdGluZyB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gaXRzIGxpc3RzIChgIW5ldGRldl91Y19lbXB0eSh0dW4tJmd0O2RldikgfHwgIW5ldGRldl9tY19lbXB0eSh0dW4tJmd0O2RldilgKS4KCi4uLnRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgLUVCVVNZYC4KClRoZSByYXRpb25hbGUgaXMgY2xlYXI6IGNoYW5naW5nIHRoZSBgYWRkcl9sZW5gIHdoaWxlIHRob3NlIGxpc3RzIGFyZSBwb3B1bGF0ZWQgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBJdCBzY3JlYW1zIG1lbW9yeSBjb3JydXB0aW9uIG9yIGFkZHJlc3MtbGVuZ3RoIG1pc21hdGNoZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGJ1Z3Mgd2hlbiB0aG9zZSBleGlzdGluZyBhZGRyZXNzZXMgYXJlIGFjY2Vzc2VkLCBmcmVlZCwgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGVkIHdpdGggdGhlIG5ldyBhZGRyZXNzIGxlbmd0aC4gVGhpcyBpcyBhIGNsYXNzaWMgJiMzNDtzeXpib3QgYnVnJiMzNDsgd2FpdGluZyB0byBoYXBwZW4sIGlmIEkgaGFkIHRvIGd1ZXNzLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IEFic29sdXRlbHkuIFRoZSBUVU4vVEFQIGRyaXZlciBpcyBhIHN0YW5kYXJkLCBzb2Z0d2FyZS1iYXNlZCB2aXJ0dWFsIG5ldHdvcmtpbmcgY29tcG9uZW50LiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBgL2Rldi9uZXQvdHVuYCBhbmQgaGVhdmlseSB1dGlsaXplZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIG1ha2luZyBpdCBhIHZlcnkgYWNjZXNzaWJsZSB0YXJnZXQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBsb2dpYyB3aXRoaW4gdGhlIFRVTiBkcml2ZXIgdGhhdCBkaXJlY3RseSBhZmZlY3RzIGhvdyBpdCBoYW5kbGVzIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgYW5kIGFzc29jaWF0ZWQgYWRkcmVzcyBsaXN0cy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBmdXp6aW5nIGNhbiB1bmNvdmVyIHN1YnRsZSwgZXhwbG9pdGFibGUgYnVncy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBzeW1ib2xzIGZvciBmdXp6aW5nLiBgdHVuX2Nocl9pb2N0bGAgaXMgbm9uLXN0YXRpYywgc28gdGhlIG9yaWdpbmFsIGFzc2Vzc21lbnQgbG9va3MgbGlrZSB0aGUgYmVzdCBlbnRyeXBvaW50LiBJdCBsb29rcyBsaWtlIGBfX3R1bl9jaHJfaW9jdGxgIGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZ3JlcCBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGRyaXZlciB0byBmaW5kIHRoZSBlbnRyeXBvaW50LiBJIHdpbGwgc3RhcnQgd2l0aCB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU1MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvdHVuLmMtODctXG5kcml2ZXJzL25ldC90dW4uYzo4ODpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvdHVuLmMtODktXHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjIyPXN0cnVjdCB2ZXRoIHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMjYtXG5kcml2ZXJzL25ldC90dW4uYzoyMjc6c3RhdGljIHZvaWQgdHVuX2Zsb3dfaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKTtcbmRyaXZlcnMvbmV0L3R1bi5jOjIyODpzdGF0aWMgdm9pZCB0dW5fZmxvd191bmluaXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bik7XG5kcml2ZXJzL25ldC90dW4uYy0yMjktXG5kcml2ZXJzL25ldC90dW4uYzoyMzA6c3RhdGljIGludCB0dW5fbmFwaV9yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbmRyaXZlcnMvbmV0L3R1bi5jLTIzMS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjU3LVxuZHJpdmVycy9uZXQvdHVuLmM6MjU4OnN0YXRpYyBpbnQgdHVuX25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC90dW4uYy0yNTkte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI2OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3MDpzdGF0aWMgdm9pZCB0dW5fbmFwaV9pbml0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy0yNzEtXHRcdFx0ICBib29sIG5hcGlfZW4sIGJvb2wgbmFwaV9mcmFncylcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yODAtXG5kcml2ZXJzL25ldC90dW4uYzoyODE6c3RhdGljIHZvaWQgdHVuX25hcGlfZW5hYmxlKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0yODIte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI4Ni1cbmRyaXZlcnMvbmV0L3R1bi5jOjI4NzpzdGF0aWMgdm9pZCB0dW5fbmFwaV9kaXNhYmxlKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0yODgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5Mi1cbmRyaXZlcnMvbmV0L3R1bi5jOjI5MzpzdGF0aWMgdm9pZCB0dW5fbmFwaV9kZWwoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTI5NC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjk4LVxuZHJpdmVycy9uZXQvdHVuLmM6Mjk5OnN0YXRpYyBib29sIHR1bl9uYXBpX2ZyYWdzX2VuYWJsZWQoY29uc3Qgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTMwMC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzAzLVxuZHJpdmVycy9uZXQvdHVuLmM6MzA0OnN0YXRpYyBpbmxpbmUgdTMyIHR1bl9oYXNoZm4odTMyIHJ4aGFzaClcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzA4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA5OnN0YXRpYyBzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKnR1bl9mbG93X2ZpbmQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiByeGhhc2gpXG5kcml2ZXJzL25ldC90dW4uYy0zMTAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxOS1cbmRyaXZlcnMvbmV0L3R1bi5jOjMyMDpzdGF0aWMgc3RydWN0IHR1bl9mbG93X2VudHJ5ICp0dW5fZmxvd19jcmVhdGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTMyMS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQwLVxuZHJpdmVycy9uZXQvdHVuLmM6MzQxOnN0YXRpYyB2b2lkIHR1bl9mbG93X2RlbGV0ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKmUpXG5kcml2ZXJzL25ldC90dW4uYy0zNDIte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM0OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjM1MDpzdGF0aWMgdm9pZCB0dW5fZmxvd19mbHVzaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMzUxLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjQtXG5kcml2ZXJzL25ldC90dW4uYzozNjU6c3RhdGljIHZvaWQgdHVuX2Zsb3dfZGVsZXRlX2J5X3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHUxNiBxdWV1ZV9pbmRleClcbmRyaXZlcnMvbmV0L3R1bi5jLTM2Ni17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzgxLVxuZHJpdmVycy9uZXQvdHVuLmM6MzgyOnN0YXRpYyB2b2lkIHR1bl9mbG93X2NsZWFudXAoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5kcml2ZXJzL25ldC90dW4uYy0zODMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTQxMy1cbmRyaXZlcnMvbmV0L3R1bi5jOjQxNDpzdGF0aWMgdm9pZCB0dW5fZmxvd191cGRhdGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdTMyIHJ4aGFzaCxcbmRyaXZlcnMvbmV0L3R1bi5jLTQxNS1cdFx0XHQgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy00NTEtICovXG5kcml2ZXJzL25ldC90dW4uYzo0NTI6c3RhdGljIGlubGluZSB2b2lkIHR1bl9mbG93X3NhdmVfcnBzX3J4aGFzaChzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKmUsIHUzMiBoYXNoKVxuZHJpdmVycy9uZXQvdHVuLmMtNDUzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy00NjMtICovXG5kcml2ZXJzL25ldC90dW4uYzo0NjQ6c3RhdGljIHUxNiB0dW5fYXV0b21xX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdHVuLmMtNDY1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy00ODItXG5kcml2ZXJzL25ldC90dW4uYzo0ODM6c3RhdGljIHUxNiB0dW5fZWJwZl9zZWxlY3RfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3R1bi5jLTQ4NC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNDk5LVxuZHJpdmVycy9uZXQvdHVuLmM6NTAwOnN0YXRpYyB1MTYgdHVuX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdHVuLmMtNTAxLVx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTUxNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjUxNjpzdGF0aWMgaW5saW5lIGJvb2wgdHVuX25vdF9jYXBhYmxlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy01MTcte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTUyNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjUyNjpzdGF0aWMgdm9pZCB0dW5fc2V0X3JlYWxfbnVtX3F1ZXVlcyhzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtNTI3LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01MzEtXG5kcml2ZXJzL25ldC90dW4uYzo1MzI6c3RhdGljIHZvaWQgdHVuX2Rpc2FibGVfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTUzMy17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNTM4LVxuZHJpdmVycy9uZXQvdHVuLmM6NTM5OnN0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2VuYWJsZV9xdWV1ZShzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuZHJpdmVycy9uZXQvdHVuLmMtNTQwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01NDgtXG5kcml2ZXJzL25ldC90dW4uYzo1NDk6dm9pZCB0dW5fcHRyX2ZyZWUodm9pZCAqcHRyKVxuZHJpdmVycy9uZXQvdHVuLmMtNTUwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01NjAtfVxuZHJpdmVycy9uZXQvdHVuLmM6NTYxOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9wdHJfZnJlZSk7XG5kcml2ZXJzL25ldC90dW4uYy01NjItXG5kcml2ZXJzL25ldC90dW4uYzo1NjM6c3RhdGljIHZvaWQgdHVuX3F1ZXVlX3B1cmdlKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy01NjQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTU3My1cbmRyaXZlcnMvbmV0L3R1bi5jOjU3NDpzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbmRyaXZlcnMvbmV0L3R1bi5jLTU3NS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNjQ0LVxuZHJpdmVycy9uZXQvdHVuLmM6NjQ1OnN0YXRpYyB2b2lkIHR1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbmRyaXZlcnMvbmV0L3R1bi5jLTY0Ni17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNjYxLVxuZHJpdmVycy9uZXQvdHVuLmM6NjYyOnN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy02NjMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcwNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjcwNjpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuZHJpdmVycy9uZXQvdHVuLmMtNzA3LVx0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNzI0LVxuZHJpdmVycy9uZXQvdHVuLmM6NzI1OnN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTcyNi1cdFx0ICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtODIyLVxuZHJpdmVycy9uZXQvdHVuLmM6ODIzOnN0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2dldChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuZHJpdmVycy9uZXQvdHVuLmMtODI0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy04MzUtXG5kcml2ZXJzL25ldC90dW4uYzo4MzY6c3RhdGljIHZvaWQgdHVuX3B1dChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtODM3LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy04NDEtLyogVEFQIGZpbHRlcmluZyAqL1xuZHJpdmVycy9uZXQvdHVuLmM6ODQyOnN0YXRpYyB2b2lkIGFkZHJfaGFzaF9zZXQodTMyICptYXNrLCBjb25zdCB1OCAqYWRkcilcbmRyaXZlcnMvbmV0L3R1bi5jLTg0My17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtODQ3LVxuZHJpdmVycy9uZXQvdHVuLmM6ODQ4OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWRkcl9oYXNoX3Rlc3QoY29uc3QgdTMyICptYXNrLCBjb25zdCB1OCAqYWRkcilcbmRyaXZlcnMvbmV0L3R1bi5jLTg0OS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtODUzLVxuZHJpdmVycy9uZXQvdHVuLmM6ODU0OnN0YXRpYyBpbnQgdXBkYXRlX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCB2b2lkIF9fdXNlciAqYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtODU1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy05MTMtLyogUmV0dXJuczogMCAtIGRyb3AsICE9MCAtIGFjY2VwdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6OTE0OnN0YXRpYyBpbnQgcnVuX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdHVuLmMtOTE1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy05MzYtICovXG5kcml2ZXJzL25ldC90dW4uYzo5Mzc6c3RhdGljIGludCBjaGVja19maWx0ZXIoc3RydWN0IHRhcF9maWx0ZXIgKmZpbHRlciwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3R1bi5jLTkzOC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9OTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzO1xuZHJpdmVycy9uZXQvdHVuLmMtOTQ4LVxuZHJpdmVycy9uZXQvdHVuLmM6OTQ5OnN0YXRpYyBpbnQgdHVuX25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy05NTAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTk4OC0vKiBOZXQgZGV2aWNlIGRldGFjaCBmcm9tIGZkLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6OTg5OnN0YXRpYyB2b2lkIHR1bl9uZXRfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy05OTAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTk5NC0vKiBOZXQgZGV2aWNlIG9wZW4uICovXG5kcml2ZXJzL25ldC90dW4uYzo5OTU6c3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTk5Ni17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTAwMi0vKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTAwMzpzdGF0aWMgaW50IHR1bl9uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEwMjctLyogTmV0IGRldmljZSBzdGFydCB4bWl0ICovXG5kcml2ZXJzL25ldC90dW4uYzoxMDI4OnN0YXRpYyB2b2lkIHR1bl9hdXRvbXFfeG1pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdHVuLmMtMTAyOS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTA0NS1cbmRyaXZlcnMvbmV0L3R1bi5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTEwNDctXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDU4LS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTA1OTpzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMTY4LVxuZHJpdmVycy9uZXQvdHVuLmM6MTE2OTpzdGF0aWMgdm9pZCB0dW5fbmV0X21jbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMTE3MC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE3Ny1cbmRyaXZlcnMvbmV0L3R1bi5jOjExNzg6c3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC90dW4uYy0xMTc5LVx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE4NS1cbmRyaXZlcnMvbmV0L3R1bi5jOjExODY6c3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxuZHJpdmVycy9uZXQvdHVuLmMtMTE4Ny17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTIwMT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvdHVuLmM6MTIwMjp0dW5fbmV0X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG5kcml2ZXJzL25ldC90dW4uYy0xMjAzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjExLVxuZHJpdmVycy9uZXQvdHVuLmM6MTIxMjpzdGF0aWMgaW50IHR1bl94ZHBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMTMtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTI0MS1cbmRyaXZlcnMvbmV0L3R1bi5jOjEyNDI6c3RhdGljIGludCB0dW5feGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXG5kcml2ZXJzL25ldC90dW4uYy0xMjQzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjUxLVxuZHJpdmVycy9uZXQvdHVuLmM6MTI1MjpzdGF0aWMgaW50IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2FycmllcilcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjc5LVxuZHJpdmVycy9uZXQvdHVuLmM6MTI4MDpzdGF0aWMgdm9pZCBfX3R1bl94ZHBfZmx1c2hfdGZpbGUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODEte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEyODctXG5kcml2ZXJzL25ldC90dW4uYzoxMjg4OnN0YXRpYyBpbnQgdHVuX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuZHJpdmVycy9uZXQvdHVuLmMtMTI4OS1cdFx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLCB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTMzNi1cbmRyaXZlcnMvbmV0L3R1bi5jOjEzMzc6c3RhdGljIGludCB0dW5feGRwX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuZHJpdmVycy9uZXQvdHVuLmMtMTMzOC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTM1MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEzNjgtXG5kcml2ZXJzL25ldC90dW4uYzoxMzY5OnN0YXRpYyB2b2lkIHR1bl9mbG93X2luaXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbmRyaXZlcnMvbmV0L3R1bi5jLTEzNzAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEzODEtXG5kcml2ZXJzL25ldC90dW4uYzoxMzgyOnN0YXRpYyB2b2lkIHR1bl9mbG93X3VuaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMTM4My17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTM5MS0vKiBJbml0aWFsaXplIG5ldCBkZXZpY2UuICovXG5kcml2ZXJzL25ldC90dW4uYzoxMzkyOnN0YXRpYyB2b2lkIHR1bl9uZXRfaW5pdGlhbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMTM5My17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTQzMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE0MzI6c3RhdGljIGJvb2wgdHVuX3NvY2tfd3JpdGVhYmxlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0xNDMzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xNDQxLS8qIFBvbGwgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjE0NDI6c3RhdGljIF9fcG9sbF90IHR1bl9jaHJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NDMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE0NzUtXG5kcml2ZXJzL25ldC90dW4uYzoxNDc2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX25hcGlfYWxsb2NfZnJhZ3Moc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NzctXHRcdFx0XHRcdCAgICBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE1MzItICogbGluZWFyIGlzIGEgaGludCBhcyB0byBob3cgbXVjaCB0byBjb3B5ICh1c3VhbGx5IGhlYWRlcnMpLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTUzMzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE1MzQtXHRcdFx0XHQgICAgIHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTU1OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE1NjA6c3RhdGljIHZvaWQgdHVuX3J4X2JhdGNoZWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE1NjEtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1vcmUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTU5OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE2MDA6c3RhdGljIGJvb2wgdHVuX2Nhbl9idWlsZF9za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MDEtXHRcdFx0ICAgICAgaW50IGxlbiwgaW50IG5vYmxvY2ssIGJvb2wgemVyb2NvcHkpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTYyMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjE2MjI6c3RhdGljIHN0cnVjdCBza19idWZmICpfX3R1bl9idWlsZF9za2Ioc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MjMtXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfZnJhZyAqYWxsb2NfZnJhZywgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE2NDMtXG5kcml2ZXJzL25ldC90dW4uYzoxNjQ0OnN0YXRpYyBpbnQgdHVuX3hkcF9hY3Qoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2NDUtXHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGFjdClcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xNjgxLVxuZHJpdmVycy9uZXQvdHVuLmM6MTY4MjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9idWlsZF9za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTE2ODMtXHRcdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTc3OC0vKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjE3Nzk6c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy0xNzgwLVx0XHRcdCAgICB2b2lkICptc2dfY29udHJvbCwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwNzYtXG5kcml2ZXJzL25ldC90dW4uYzoyMDc3OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmRyaXZlcnMvbmV0L3R1bi5jLTIwNzgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMDk3OnN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcl94ZHAoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTgtXHRcdFx0XHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjQtLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjIxMjU6c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG5kcml2ZXJzL25ldC90dW4uYy0yMTI2LVx0XHRcdCAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDktLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG5kcml2ZXJzL25ldC90dW4uYzoyMjEwOnN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMTEtXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjI0Mi1cbmRyaXZlcnMvbmV0L3R1bi5jOjIyNDM6c3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNDQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyNTUtXG5kcml2ZXJzL25ldC90dW4uYzoyMjU2OnN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy0yMjU3LVx0XHRcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMjk3LVxuZHJpdmVycy9uZXQvdHVuLmM6MjI5ODpzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMjI5OS1cdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIzMzQtXG5kcml2ZXJzL25ldC90dW4uYzoyMzM1OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIzMzYte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIzNTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMzU3OnN0YXRpYyB2b2lkIHR1bl9wcm9nX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5kcml2ZXJzL25ldC90dW4uYy0yMzU4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMzY0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjM2NTpzdGF0aWMgaW50IF9fdHVuX3NldF9lYnBmKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG5kcml2ZXJzL25ldC90dW4uYy0yMzY2LVx0XHRcdCAgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIzODktXG5kcml2ZXJzL25ldC90dW4uYzoyMzkwOnN0YXRpYyB2b2lkIHR1bl9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMjM5MS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjQwMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI0MDI6c3RhdGljIHZvaWQgdHVuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0yNDAzLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNDE5LSAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MjQyMDpzdGF0aWMgaW50IHR1bl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5kcml2ZXJzL25ldC90dW4uYy0yNDIxLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNDI3LVxuZHJpdmVycy9uZXQvdHVuLmM6MjQyODpzdGF0aWMgc2l6ZV90IHR1bl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdHVuLmMtMjQyOS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjQ0NC1cbmRyaXZlcnMvbmV0L3R1bi5jOjI0NDU6c3RhdGljIGludCB0dW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0yNDQ2LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNDg2PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB0dW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNDk0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjQ5NTpzdGF0aWMgdm9pZCB0dW5fc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG5kcml2ZXJzL25ldC90dW4uYy0yNDk2LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNTE0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjUxNTpzdGF0aWMgdm9pZCB0dW5fcHV0X3BhZ2Uoc3RydWN0IHR1bl9wYWdlICp0cGFnZSlcbmRyaXZlcnMvbmV0L3R1bi5jLTI1MTYte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI1MjAtXG5kcml2ZXJzL25ldC90dW4uYzoyNTIxOnN0YXRpYyBpbnQgdHVuX3hkcF9vbmUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTI1MjItXHRcdCAgICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTYtXG5kcml2ZXJzL25ldC90dW4uYzoyNjU3OnN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI3MTEtXG5kcml2ZXJzL25ldC90dW4uYzoyNzEyOnN0YXRpYyBpbnQgdHVuX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbixcbmRyaXZlcnMvbmV0L3R1bi5jLTI3MTMtXHRcdCAgICAgICBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjc0OS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3NTA6c3RhdGljIGludCB0dW5fcHRyX3BlZWtfbGVuKHZvaWQgKnB0cilcbmRyaXZlcnMvbmV0L3R1bi5jLTI3NTEte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI3NjMtXG5kcml2ZXJzL25ldC90dW4uYzoyNzY0OnN0YXRpYyBpbnQgdHVuX3BlZWtfbGVuKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL25ldC90dW4uYy0yNzY1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNzg3PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdHVuX3Byb3RvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI3OTItXG5kcml2ZXJzL25ldC90dW4uYzoyNzkzOnN0YXRpYyBpbnQgdHVuX2ZsYWdzKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy0yNzk0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNzk3LVxuZHJpdmVycy9uZXQvdHVuLmM6Mjc5ODpzdGF0aWMgc3NpemVfdCB0dW5fZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9uZXQvdHVuLmMtMjc5OS1cdFx0XHQgICAgICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjgwNC1cbmRyaXZlcnMvbmV0L3R1bi5jOjI4MDU6c3RhdGljIHNzaXplX3Qgb3duZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9uZXQvdHVuLmMtMjgwNi1cdFx0XHQgIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yODE0LVxuZHJpdmVycy9uZXQvdHVuLmM6MjgxNTpzdGF0aWMgc3NpemVfdCBncm91cF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL25ldC90dW4uYy0yODE2LVx0XHRcdCAgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI4MjQtXG5kcml2ZXJzL25ldC90dW4uYzoyODI1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyh0dW5fZmxhZ3MpO1xuZHJpdmVycy9uZXQvdHVuLmM6MjgyNjpzdGF0aWMgREVWSUNFX0FUVFJfUk8ob3duZXIpO1xuZHJpdmVycy9uZXQvdHVuLmM6MjgyNzpzdGF0aWMgREVWSUNFX0FUVFJfUk8oZ3JvdXApO1xuZHJpdmVycy9uZXQvdHVuLmMtMjgyOC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yODM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHR1bl9hdHRyX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI4MzktXG5kcml2ZXJzL25ldC90dW4uYzoyODQwOnN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG5kcml2ZXJzL25ldC90dW4uYy0yODQxLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yOTgzLVxuZHJpdmVycy9uZXQvdHVuLmM6Mjk4NDpzdGF0aWMgdm9pZCB0dW5fZ2V0X2lmZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbmRyaXZlcnMvbmV0L3R1bi5jLTI5ODUte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5OTUtICogcHJpdnMgcmVxdWlyZWQuICovXG5kcml2ZXJzL25ldC90dW4uYzoyOTk2OnN0YXRpYyBpbnQgc2V0X29mZmxvYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25ldC90dW4uYy0yOTk3LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ5LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA1MDpzdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBpbnQgbilcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNTEte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjQtXG5kcml2ZXJzL25ldC90dW4uYzozMDY1OnN0YXRpYyBpbnQgdHVuX2F0dGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjYte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMwODQtXG5kcml2ZXJzL25ldC90dW4uYzozMDg1OnN0YXRpYyB2b2lkIHR1bl9zZXRfc25kYnVmKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy0zMDg2LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMDk1LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA5NjpzdGF0aWMgaW50IHR1bl9zZXRfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuZHJpdmVycy9uZXQvdHVuLmMtMzA5Ny17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzEzMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjMxMzI6c3RhdGljIGludCB0dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxuZHJpdmVycy9uZXQvdHVuLmMtMzEzMy1cdFx0XHR2b2lkIF9fdXNlciAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTUyLS8qIFJldHVybiBjb3JyZWN0IHZhbHVlIGZvciB0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuIGJhc2VkIG9uIHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZS4gKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjMxNTM6c3RhdGljIHVuc2lnbmVkIGNoYXIgdHVuX2dldF9hZGRyX2xlbih1bnNpZ25lZCBzaG9ydCB0eXBlKVxuZHJpdmVycy9uZXQvdHVuLmMtMzE1NC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzE5MC1cbmRyaXZlcnMvbmV0L3R1bi5jOjMxOTE6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9uZXQvdHVuLmMtMzE5Mi1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcsIGludCBpZnJlcV9sZW4pXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ4OC1cbmRyaXZlcnMvbmV0L3R1bi5jOjM0ODk6c3RhdGljIGxvbmcgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0OTAtXHRcdFx0ICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG5kcml2ZXJzL25ldC90dW4uYzozNDk2OnN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5Ny1cdFx0XHQgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUyMy1cbmRyaXZlcnMvbmV0L3R1bi5jOjM1MjQ6c3RhdGljIGludCB0dW5fY2hyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pXG5kcml2ZXJzL25ldC90dW4uYy0zNTI1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNTQ3LVxuZHJpdmVycy9uZXQvdHVuLmM6MzU0ODpzdGF0aWMgaW50IHR1bl9jaHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0zNTQ5LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNTg2LVxuZHJpdmVycy9uZXQvdHVuLmM6MzU4NzpzdGF0aWMgaW50IHR1bl9jaHJfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0zNTg4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNTk2LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZHJpdmVycy9uZXQvdHVuLmM6MzU5NzpzdGF0aWMgdm9pZCB0dW5fY2hyX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25ldC90dW4uYy0zNTk4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjM1PXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0dW5fbWlzY2RldiA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjQzLVxuZHJpdmVycy9uZXQvdHVuLmM6MzY0NDpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvdHVuLmMtMzY0NS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2NTUtXG5kcml2ZXJzL25ldC90dW4uYzozNjU2OnN0YXRpYyBpbnQgdHVuX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvdHVuLmMtMzY1Ny1cdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjY0LVxuZHJpdmVycy9uZXQvdHVuLmM6MzY2NTpzdGF0aWMgaW50IHR1bl9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NjYtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzY3My1cbmRyaXZlcnMvbmV0L3R1bi5jOjM2NzQ6c3RhdGljIHZvaWQgdHVuX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXG5kcml2ZXJzL25ldC90dW4uYy0zNjc1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjkwLVxuZHJpdmVycy9uZXQvdHVuLmM6MzY5MTpzdGF0aWMgdTMyIHR1bl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTM2OTIte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2OTctXG5kcml2ZXJzL25ldC90dW4uYzozNjk4OnN0YXRpYyB2b2lkIHR1bl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKVxuZHJpdmVycy9uZXQvdHVuLmMtMzY5OS17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzcwNC1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MDU6c3RhdGljIGludCB0dW5fZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC90dW4uYy0zNzA2LVx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzcxNi1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MTc6c3RhdGljIGludCB0dW5fc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC90dW4uYy0zNzE4LVx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzczMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MzI6c3RhdGljIHZvaWQgdHVuX2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTIzCgkJCQkJCQlvdXRwdXQ6IDEyNwoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFZlcmRpY3QgZm9yIHRoZSBUVU4vVEFQIERyaXZlciYjMzk7cyBpb2N0bCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBfX3R1bl9jaHJfaW9jdGxgIGFuZCBgdHVuX2Nocl9pb2N0bGAgYXMgdGhlIGtleSB0YXJnZXRzLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UsIGFuZCBwZXJoYXBzIHRoZWlyIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHR1bl9jaHJfY29tcGF0X2lvY3RsYCBhbmQgYHR1bl9nZXRfYWRkcl9sZW5gLCBpbiB0aGUgZm9jdXMgc3ltYm9sIGxpc3QuIE5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGVzZSBhcmUgcmVhbGx5IHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBvcGVyYXRpb25zLiBDaGVja2luZyBgdHVuX2Nocl9pb2N0bGAgYW5kIGBfX3R1bl9jaHJfaW9jdGxgIG1ha2VzIHNlbnNlLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCB0aGUgYFRVTmAgY29uZmlnIGlzIGNydWNpYWwsIGFsb25nIHdpdGggYElORVRgIHNpbmNlIGl0JiMzOTtzIGEgZGVwZW5kZW5jeS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgVFVOYCBkZXBlbmRzIG9uIGBJTkVUYC4gT2theSwgc28gYFRVTmAgYW5kIGBJTkVUYCBhcmUgb3VyIEVuYWJsZUNvbmZpZ3MuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgc2V0IGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LgoKTm93LCBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBhbGlnbmVkLiBZZXMsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLiBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgdHVuX2Nocl9pb2N0bGAgYW5kIGBfX3R1bl9jaHJfaW9jdGxgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc2V0IGFzIGBUVU5gIGFuZCBgSU5FVGAuIEZpbmFsbHksIEkgaGF2ZSBhIGNvbmNpc2UgcmVhc29uIHdoeSB0aGVzZSBjaG9pY2VzIHdlcmUgbWFkZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fY2hyX2lvY3RsJiMzNDssCiAgICAmIzM0O19fdHVuX2Nocl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgVFVOIGRyaXZlciYjMzk7cyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fY2hyX2lvY3RsJiMzNDssCiAgICAmIzM0O19fdHVuX2Nocl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgVFVOIGRyaXZlciYjMzk7cyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBfX3R1bl9jaHJfaW9jdGwoKWAgZm9yIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgY29tbWFuZC4gU3BlY2lmaWNhbGx5LCBpdCByZWplY3RzIGNoYW5naW5nIHRoZSBkZXZpY2UgdHlwZSBpZiB0aGUgbmV3IGFkZHJlc3MgbGVuZ3RoIChgdHVuX2dldF9hZGRyX2xlbihhcmcpYCkgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGBkZXYtXHUwMDNlYWRkcl9sZW5gIHdoaWxlIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgYXJlIG5vbi1lbXB0eS4gXG5cblRoaXMgY2hhbmdlIHByZXZlbnRzIGFkZHJlc3MgbGVuZ3RoIG1pc21hdGNoIGlzc3VlcyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gb3BlcmF0aW5nIG9uIGV4aXN0aW5nIGBkZXYtXHUwMDNldWNgIGFuZCBgZGV2LVx1MDAzZW1jYCBsaXN0cyAod2hpY2ggYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlOTY5ZmVhODA2YjA3OTc4ZjM2OGU0OThmOWRmZDBmYmMwMmFjOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTMzNDEsNiAmIzQzOzMzNDEsMTAgQEAgc3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJbmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLSZndDtkZXYsCiAJCQkJICAgJiMzNDtMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXG4mIzM0Oyk7CiAJCQlyZXQgPSAtRUJVU1k7CiYjNDM7CQl9IGVsc2UgaWYgKHR1bl9nZXRfYWRkcl9sZW4oYXJnKSAhPSB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW4gJmFtcDsmYW1wOwomIzQzOwkJCSAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi0mZ3Q7ZGV2KSB8fAomIzQzOwkJCSAgICAhbmV0ZGV2X21jX2VtcHR5KHR1bi0mZ3Q7ZGV2KSkpIHsKJiM0MzsJCQlyZXQgPSAtRUJVU1k7CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1BSRV9UWVBFX0NIQU5HRSwKIAkJCQkJCSAgICAgICB0dW4tJmd0O2Rldik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2gganVzdGlmaWVzIGl0cyBvd24gS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXBwcm9hY2gsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMgYW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYHR1bi5jYCBmaWxlLiBJJiMzOTtsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciYjMzk7cyBxdWlja2VzdCBhbmQgbW9zdCBlZmZpY2llbnQg4oCTIHRvIGV4YW1pbmUgdGhlIGNvZGUgc3Vycm91bmRpbmcgbGluZSAzMzQxIGluIGBkcml2ZXJzL25ldC90dW4uY2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UsIG5vdCBqdXN0IHRoZSAqd2hhdCouIAoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBzcGVjaWZpYyBjaGFuZ2U6IGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYW4gYWRkaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGB0dW5fZ2V0X2FkZHJfbGVuYCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgRUJVU1lgIGVycm9yIGlmIHRoZSBhZGRyZXNzIGxlbmd0aCBkb2VzbiYjMzk7dCBtYXRjaCBhbmQgZWl0aGVyIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3NlcyBhcmUgYWxyZWFkeSBjb25maWd1cmVkIG9uIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjaGVjayBpcyBwcm90ZWN0aW5nIGFnYWluc3QuIElzIGl0IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBBIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHk/IEEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIHNvcnQgb2YgY2hlY2sgbWlnaHQgYmUgY3JpdGljYWwgZm9yIHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdHVuLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBgdHVuLmNgIGFuZCBuZXR3b3JraW5nIGRyaXZlcnMsIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgYnVncyBjYW4gaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucy4gQmFzZWQgb24gbXkgcmV2aWV3LCBJJiMzOTtsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzI1Olx0XHRjYXNlIFRVTlNFVEdST1VQOlxuMzMyNjpcdFx0XHQvKiBTZXQgZ3JvdXAgb2YgdGhlIGRldmljZSAqL1xuMzMyNzpcdFx0XHRncm91cCA9IG1ha2Vfa2dpZChjdXJyZW50X3VzZXJfbnMoKSwgYXJnKTtcbjMzMjg6XHRcdFx0aWYgKCFnaWRfdmFsaWQoZ3JvdXApKSB7XG4zMzI5Olx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjMzMzA6XHRcdFx0XHRicmVhaztcbjMzMzE6XHRcdFx0fVxuMzMzMjpcdFx0XHRXUklURV9PTkNFKHR1bi1cdTAwM2Vncm91cCwgZ3JvdXApO1xuMzMzMzpcdFx0XHRkb19ub3RpZnkgPSB0cnVlO1xuMzMzNDpcdFx0XHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXHUwMDNlZGV2LCBcJiMzNDtncm91cCBzZXQgdG8gJXVcXG5cJiMzNDssXG4zMzM1Olx0XHRcdFx0ICAgZnJvbV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgZ3JvdXApKTtcbjMzMzY6XHRcdFx0YnJlYWs7XG4zMzM3Olx0XG4zMzM4Olx0XHRjYXNlIFRVTlNFVExJTks6XG4zMzM5Olx0XHRcdC8qIE9ubHkgYWxsb3cgc2V0dGluZyB0aGUgdHlwZSB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqL1xuMzM0MDpcdFx0XHRpZiAodHVuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB7XG4zMzQxOlx0XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbjMzNDI6XHRcdFx0XHRcdCAgIFwmIzM0O0xpbmt0eXBlIHNldCBmYWlsZWQgYmVjYXVzZSBpbnRlcmZhY2UgaXMgdXBcXG5cJiMzNDspO1xuMzM0MzpcdFx0XHRcdHJldCA9IC1FQlVTWTtcbjMzNDQ6XHRcdFx0fSBlbHNlIGlmICh0dW5fZ2V0X2FkZHJfbGVuKGFyZykgIT0gdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbiBcdTAwMjZcdTAwMjZcbjMzNDU6XHRcdFx0XHQgICAoIW5ldGRldl91Y19lbXB0eSh0dW4tXHUwMDNlZGV2KSB8fFxuMzM0NjpcdFx0XHRcdCAgICAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpKSkge1xuMzM0NzpcdFx0XHRcdHJldCA9IC1FQlVTWTtcbjMzNDg6XHRcdFx0fSBlbHNlIHtcbjMzNDk6XHRcdFx0XHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1BSRV9UWVBFX0NIQU5HRSxcbjMzNTA6XHRcdFx0XHRcdFx0XHQgICAgICAgdHVuLVx1MDAzZWRldik7XG4zMzUxOlx0XHRcdFx0cmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTtcbjMzNTI6XHRcdFx0XHRpZiAocmV0KSB7XG4zMzUzOlx0XHRcdFx0XHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXHUwMDNlZGV2LFxuMzM1NDpcdFx0XHRcdFx0XHQgICBcJiMzNDtSZWZ1c2VkIHRvIGNoYW5nZSBkZXZpY2UgdHlwZVxcblwmIzM0Oyk7XG4zMzU1Olx0XHRcdFx0XHRicmVhaztcbjMzNTY6XHRcdFx0XHR9XG4zMzU3Olx0XHRcdFx0dHVuLVx1MDAzZWRldi1cdTAwM2V0eXBlID0gKGludCkgYXJnO1xuMzM1ODpcdFx0XHRcdHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSk7XG4zMzU5Olx0XHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldiwgXCYjMzQ7bGlua3R5cGUgc2V0IHRvICVkXFxuXCYjMzQ7LFxuMzM2MDpcdFx0XHRcdFx0ICAgdHVuLVx1MDAzZWRldi1cdTAwM2V0eXBlKTtcbjMzNjE6XHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1BPU1RfVFlQRV9DSEFOR0UsXG4zMzYyOlx0XHRcdFx0XHRcdFx0IHR1bi1cdTAwM2VkZXYpO1xuMzM2MzpcdFx0XHR9XG4zMzY0Olx0XHRcdGJyZWFrO1xuMzM2NTpcdFxuMzM2NjpcdFx0Y2FzZSBUVU5TRVRERUJVRzpcbjMzNjc6XHRcdFx0dHVuLVx1MDAzZW1zZ19lbmFibGUgPSAodTMyKWFyZztcbjMzNjg6XHRcdFx0YnJlYWs7XG4zMzY5Olx0XG4zMzcwOlx0XHRjYXNlIFRVTlNFVE9GRkxPQUQ6XG4zMzcxOlx0XHRcdHJldCA9IHNldF9vZmZsb2FkKHR1biwgYXJnKTtcbjMzNzI6XHRcdFx0YnJlYWs7XG4zMzczOlx0XG4zMzc0Olx0XHRjYXNlIFRVTlNFVFRYRklMVEVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHR1bl9nZXRfYWRkcl9sZW5gIGFuZCB0aGUgQnVnIEZpeCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB0dW5fZ2V0X2FkZHJfbGVuYCBmdW5jdGlvbiBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcyBzcGVjaWZpYyBidWcgYW5kIGl0cyBmaXguIE15IGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGVyZSBpdCYjMzk7cyB1c2VkIGFuZCwgaG9wZWZ1bGx5LCBjbHVlcyBhYm91dCBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29udGV4dC4gVGhhdCYjMzk7bGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlIHRoYXQmIzM5O3MgYmVlbiBmbGFnZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fZ2V0X2FkZHJfbGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTMxMzI9c3RhdGljIGludCB0dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxNTItLyogUmV0dXJuIGNvcnJlY3QgdmFsdWUgZm9yIHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gYmFzZWQgb24gdHVuLVx1MDAzZWRldi1cdTAwM2V0eXBlLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzE1MzpzdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXG5kcml2ZXJzL25ldC90dW4uYy0zMTU0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zMTkxPXN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMzQzLVx0XHRcdHJldCA9IC1FQlVTWTtcbmRyaXZlcnMvbmV0L3R1bi5jOjMzNDQ6XHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC90dW4uYy0zMzQ1LVx0XHRcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cdTAwM2VkZXYpIHx8XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzM1Ny1cdFx0XHR0dW4tXHUwMDNlZGV2LVx1MDAzZXR5cGUgPSAoaW50KSBhcmc7XG5kcml2ZXJzL25ldC90dW4uYzozMzU4Olx0XHRcdHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZSk7XG5kcml2ZXJzL25ldC90dW4uYy0zMzU5LVx0XHRcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O2xpbmt0eXBlIHNldCB0byAlZFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHR1bl9nZXRfYWRkcl9sZW5gIGZ1bmN0aW9uLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgYSBzcGVjaWZpYyBlZGdlIGNhc2UuICoqSW52ZXN0aWdhdGluZyBgdHVuX2dldF9hZGRyX2xlbmAmIzM5O3MgQmVoYXZpb3Igd2l0aCBOb24tRW1wdHkgVUMvTUMgTGlzdHMqKi4gTXkgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyBgYWRkcl9sZW5gIGV2ZW4gd2hlbiB0aGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgbGlzdHMgYXJlbiYjMzk7dCBlbXB0eT8gSXQgY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nLCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYywgYmVoYXZpb3IsIGRlcGVuZGluZyBvbiB0aGUgaW50ZW5kZWQgZGVzaWduLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgaW50byBgZHJpdmVycy9uZXQvdHVuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE1My4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9naWMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHJlc2lkZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGluIHRoYXQgZnVuY3Rpb24sIGFuZCBob3cgaXQgaGFuZGxlcyB0aG9zZSBsaXN0IGNvbmRpdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0aW9uIGluZmx1ZW5jZXMgdGhlIG92ZXJhbGwgYWRkcmVzcyBsZW5ndGggZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1MDpcdH1cbjMxNTE6XHRcbjMxNTI6XHQvKiBSZXR1cm4gY29ycmVjdCB2YWx1ZSBmb3IgdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbiBiYXNlZCBvbiB0dW4tXHUwMDNlZGV2LVx1MDAzZXR5cGUuICovXG4zMTUzOlx0c3RhdGljIHVuc2lnbmVkIGNoYXIgdHVuX2dldF9hZGRyX2xlbih1bnNpZ25lZCBzaG9ydCB0eXBlKVxuMzE1NDpcdHtcbjMxNTU6XHRcdHN3aXRjaCAodHlwZSkge1xuMzE1NjpcdFx0Y2FzZSBBUlBIUkRfSVA2R1JFOlxuMzE1NzpcdFx0Y2FzZSBBUlBIUkRfVFVOTkVMNjpcbjMxNTg6XHRcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpO1xuMzE1OTpcdFx0Y2FzZSBBUlBIUkRfSVBHUkU6XG4zMTYwOlx0XHRjYXNlIEFSUEhSRF9UVU5ORUw6XG4zMTYxOlx0XHRjYXNlIEFSUEhSRF9TSVQ6XG4zMTYyOlx0XHRcdHJldHVybiA0O1xuMzE2MzpcdFx0Y2FzZSBBUlBIUkRfRVRIRVI6XG4zMTY0Olx0XHRcdHJldHVybiBFVEhfQUxFTjtcbjMxNjU6XHRcdGNhc2UgQVJQSFJEX0lFRUU4MDIxNTQ6XG4zMTY2Olx0XHRjYXNlIEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1I6XG4zMTY3Olx0XHRcdHJldHVybiBJRUVFODAyMTU0X0VYVEVOREVEX0FERFJfTEVOO1xuMzE2ODpcdFx0Y2FzZSBBUlBIUkRfUEhPTkVUX1BJUEU6XG4zMTY5Olx0XHRjYXNlIEFSUEhSRF9QUFA6XG4zMTcwOlx0XHRjYXNlIEFSUEhSRF9OT05FOlxuMzE3MTpcdFx0XHRyZXR1cm4gMDtcbjMxNzI6XHRcdGNhc2UgQVJQSFJEXzZMT1dQQU46XG4zMTczOlx0XHRcdHJldHVybiBFVUk2NF9BRERSX0xFTjtcbjMxNzQ6XHRcdGNhc2UgQVJQSFJEX0ZEREk6XG4zMTc1Olx0XHRcdHJldHVybiBGRERJX0tfQUxFTjtcbjMxNzY6XHRcdGNhc2UgQVJQSFJEX0hJUFBJOlxuMzE3NzpcdFx0XHRyZXR1cm4gSElQUElfQUxFTjtcbjMxNzg6XHRcdGNhc2UgQVJQSFJEX0lFRUU4MDI6XG4zMTc5Olx0XHRcdHJldHVybiBGQ19BTEVOO1xuMzE4MDpcdFx0Y2FzZSBBUlBIUkRfUk9TRTpcbjMxODE6XHRcdFx0cmV0dXJuIFJPU0VfQUREUl9MRU47XG4zMTgyOlx0XHRjYXNlIEFSUEhSRF9ORVRST006XG4zMTgzOlx0XHRcdHJldHVybiBBWDI1X0FERFJfTEVOO1xuMzE4NDpcdFx0Y2FzZSBBUlBIUkRfTE9DQUxUTEs6XG4zMTg1Olx0XHRcdHJldHVybiBMVEFMS19BTEVOO1xuMzE4NjpcdFx0ZGVmYXVsdDpcbjMxODc6XHRcdFx0cmV0dXJuIDA7XG4zMTg4Olx0XHR9XG4zMTg5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTg2CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDg1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRVTlNFVExJTksgQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYFRVTlNFVExJTktgIGNoYW5nZXMgYHR1bi0mZ3Q7ZGV2LSZndDt0eXBlYCwgaXQgYWxzbyBjaGFuZ2VzIGB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW5gLiBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdW5pY2FzdCAoYGRldi0mZ3Q7dWNgKSBvciBtdWx0aWNhc3QgKGBkZXYtJmd0O21jYCkgYWRkcmVzc2VzIG9uIHRoZSBkZXZpY2UsIHRoaXMgY2FuIGxlYWQgdG8gc2VyaW91cyBwcm9ibGVtcy4gT3BlcmF0aW9ucyB1c2luZyB0aG9zZSBsaXN0cyAoZmx1c2hpbmcsIGNvbXBhcmluZywgaXRlcmF0aW5nLCBhZGRpbmcvZGVsZXRpbmcpIHRoZW4gdXNlIHRoZSAqbmV3KiBgZGV2LSZndDthZGRyX2xlbmAsIGJ1dCB0aGUgZXhpc3RpbmcgZW50cmllcyBzdGlsbCBoYXZlIHRoZSAqb2xkKiBsZW5ndGguIFRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIGhhc2ggdGFibGUgbWlzbWF0Y2hlcywgYW5kLCB1bHRpbWF0ZWx5LCBtZW1vcnkgY29ycnVwdGlvbi4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBjb21taXQgaGlzdG9yeSwgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgZGV2X3VjYCBhbmQgYGRldl9tY2AgaW50ZXJhY3Qgd2l0aCBgZGV2LSZndDthZGRyX2xlbmAgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gTG9va2luZyBhdCBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AsIG1ldGhvZHMgbGlrZSBgX19od19hZGRyX2RlbGAgYW5kIGBfX2h3X2FkZHJfYWRkYCBjbGVhcmx5IHVzZSBgYWRkcl9sZW5gIGRlcml2ZWQgZnJvbSBgZGV2LSZndDthZGRyX2xlbmAsIGNvbmZpcm1pbmcgdGhlIHZ1bG5lcmFiaWxpdHkuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgc2FuaXR5IGNoZWNrLCB3aGljaCBpcyBnb29kLiBJdCBkb2VzIHNvbWV0aGluZyBsaWtlOiBgZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi0mZ3Q7ZGV2LSZndDthZGRyX2xlbiAmYW1wOyZhbXA7ICghbmV0ZGV2X3VjX2VtcHR5KHR1bi0mZ3Q7ZGV2KSB8fCAhbmV0ZGV2X21jX2VtcHR5KHR1bi0mZ3Q7ZGV2KSkpIHsgcmV0ID0gLUVCVVNZOyB9YC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGxlbmd0aCBjaGFuZ2Ugd2hlbiB0aGUgbGlzdHMgYXJlbiYjMzk7dCBlbXB0eSwgcmV0dXJuaW5nIGFuIGVycm9yLiBUaGF0JiMzOTtzIGEgc29saWQgZGVmZW5zZS4KCk5vdywgbGV0JiMzOTtzIGFuYWx5emUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSAqbmV3KiByaXNrcy4gRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgcmVhZHMgYGFyZ2AsIGB0dW4tJmd0O2Rldi0mZ3Q7YWRkcl9sZW5gLCBhbmQgY2hlY2tzIGBuZXRkZXZfdWNfZW1wdHlgIGFuZCBgbmV0ZGV2X21jX2VtcHR5YCB3aGljaCBjaGVjayBpZiB0aGUgbGlzdCBpcyBlbXB0eSAobGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7dWMubGlzdCkgZXRjLikuIERvZXMgaXQgY29weSBhbnl0aGluZyB0byB1c2Vyc3BhY2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzPyBOby4gRG9lcyBpdCBtZXNzIHdpdGggYm91bmRzIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwPyBOb3BlLiBJdCYjMzk7cyBzdHJpY3RseSAqcmVzdHJpY3RpdmUqLgoKR2l2ZW4gdGhhdCwgdGhlIGJ1ZyBpcyBhYm91dCAqcHJldmVudGluZyogb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSBsZW5ndGggbWlzbWF0Y2hlcyBpbiB0aGUgYG5ldF9kZXZpY2VgIGFkZHJlc3MgbGlzdHMuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgdHlwZSBvZiBpc3N1ZSwgc2luY2UgS0FTQU4gZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCkxldCBtZSBmb3JtdWxhdGUgdGhlIGBLTVNBTlJlYXNvbmluZ2AgdG8gYmUgYXMgY2xlYXIgYXMgcG9zc2libGUuIFRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIHVuZGVyIGBUVU5TRVRMSU5LYCB0byBkaXNhbGxvdyBjaGFuZ2luZyB0aGUgbmV0d29yayBkZXZpY2UgbGluayB0eXBlIChhbmQgdGhlcmVmb3JlIGBkZXYtJmd0O2FkZHJfbGVuYCkgaWYgdGhlIGRldmljZSYjMzk7cyB1bmljYXN0IChgZGV2LSZndDt1Y2ApIG9yIG11bHRpY2FzdCAoYGRldi0mZ3Q7bWNgKSBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFRoaXMgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2hlcyBpbiBleGlzdGluZyBhZGRyZXNzIGxpc3QgZW50cmllcywgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgYWRkcmVzcyBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHN1YnNlcXVlbnQgYWRkcmVzcyBsb29rdXBzL21vZGlmaWNhdGlvbnMgKGlzc3VlcyBjb3ZlcmVkIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLgoKUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIGZvciB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgaXQgcmVqZWN0cyBjaGFuZ2luZyB0aGUgZGV2aWNlIHR5cGUgaWYgdGhlIG5ldyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBgZGV2LVx1MDAzZWFkZHJfbGVuYCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFxuXG5UaGlzIGNoYW5nZSBwcmV2ZW50cyBhZGRyZXNzIGxlbmd0aCBtaXNtYXRjaCBpc3N1ZXMgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIG9wZXJhdGluZyBvbiBleGlzdGluZyBgZGV2LVx1MDAzZXVjYCBhbmQgYGRldi1cdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYF9fdHVuX2Nocl9pb2N0bCgpYCBmb3IgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIGl0IHJlamVjdHMgY2hhbmdpbmcgdGhlIGRldmljZSB0eXBlIGlmIHRoZSBuZXcgYWRkcmVzcyBsZW5ndGggKGB0dW5fZ2V0X2FkZHJfbGVuKGFyZylgKSBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgYGRldi1cdTAwM2VhZGRyX2xlbmAgd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBhcmUgbm9uLWVtcHR5LiBcblxuVGhpcyBjaGFuZ2UgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2ggaXNzdWVzIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBvcGVyYXRpbmcgb24gZXhpc3RpbmcgYGRldi1cdTAwM2V1Y2AgYW5kIGBkZXYtXHUwMDNlbWNgIGxpc3RzICh3aGljaCBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NTcuNTM4MDk4Nzg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3OTU3MDI0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcIl9fdHVuX2Nocl9pb2N0bFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYF9fdHVuX2Nocl9pb2N0bCgpYCBmb3IgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIGl0IHJlamVjdHMgY2hhbmdpbmcgdGhlIGRldmljZSB0eXBlIGlmIHRoZSBuZXcgYWRkcmVzcyBsZW5ndGggKGB0dW5fZ2V0X2FkZHJfbGVuKGFyZylgKSBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgYGRldi1cXHUwMDNlYWRkcl9sZW5gIHdoaWxlIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgYXJlIG5vbi1lbXB0eS4gXFxuXFxuVGhpcyBjaGFuZ2UgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2ggaXNzdWVzIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBvcGVyYXRpbmcgb24gZXhpc3RpbmcgYGRldi1cXHUwMDNldWNgIGFuZCBgZGV2LVxcdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBUVU4gZHJpdmVyJ3MgVFVOU0VUTElOSyBpb2N0bCBoYW5kbGVyIChfX3R1bl9jaHJfaW9jdGwpIHRvIHJlamVjdCBsaW5rIHR5cGUgY2hhbmdlcyB3aXRoIC1FQlVTWSBpZiB0aGUgbmV3IGxpbmsgdHlwZSBoYXMgYSBkaWZmZXJlbnQgYWRkcmVzcyBsZW5ndGggd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBvbiB0aGUgbmV0ZGV2aWNlIGFyZSBub3QgZW1wdHkuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUwOjU3LjUzODEwMzQ0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3ODAzMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmU5NjlmZWE4MDZiMDc5NzhmMzY4ZTQ5OGY5ZGZkMGZiYzAyYWM5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuQEAgLTMzNDEsNiArMzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiTGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0fSBlbHNlIGlmICh0dW5fZ2V0X2FkZHJfbGVuKGFyZykgIT0gdHVuLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cXHUwMDNlZGV2KSB8fFxcbitcXHRcXHRcXHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXFx1MDAzZWRldikpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB0dW4tXFx1MDAzZWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUwOjU3LjkxNjU4MTk5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzA5MzM0MTg0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX2Nocl9pb2N0bFwiLFxuICAgIFwiX190dW5fY2hyX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIFRVTiBkcml2ZXIncyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmU5NjlmZWE4MDZiMDc5NzhmMzY4ZTQ5OGY5ZGZkMGZiYzAyYWM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTMzNDEsNiArMzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbiBcdFx0XHRcdCAgIFwiTGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxcblwiKTtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVx1MDAzZWRldikgfHxcbitcdFx0XHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXHUwMDNlZGV2KSkpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NTcuOTE2NTgzNjcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyMzc4NDA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFR1biBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQuIEknbGwgc3RhcnQgYnkgaW5zcGVjdGluZyB0aGUgZGlmZiB0byBnZXQgYSBnZW5lcmFsIG92ZXJ2aWV3IG9mIHRoZSBtb2RpZmljYXRpb25zLiBUaGVuLCBJJ2xsIHplcm8gaW4gb24gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZHJpdmVycy9uZXQvdHVuLmNgLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBuZXR3b3JrLXJlbGF0ZWQgaXNzdWVzLCB0aGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJ2xsIGxldmVyYWdlIG15IHVzdWFsIHdvcmtmbG93LiBJIHdpbGwgdXNlIGEgYHJlYWQtZmlsZWAgY29tbWFuZCwgdG8gcGlucG9pbnQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzM0MSB3aXRoaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhhdCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTowMi41NDAzNzA0OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMzMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMzMxOlxcdFxcdFxcdH1cXG4zMzMyOlxcdFxcdFxcdFdSSVRFX09OQ0UodHVuLVxcdTAwM2Vncm91cCwgZ3JvdXApO1xcbjMzMzM6XFx0XFx0XFx0ZG9fbm90aWZ5ID0gdHJ1ZTtcXG4zMzM0OlxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwiZ3JvdXAgc2V0IHRvICV1XFxcXG5cXFwiLFxcbjMzMzU6XFx0XFx0XFx0XFx0ICAgZnJvbV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGdyb3VwKSk7XFxuMzMzNjpcXHRcXHRcXHRicmVhaztcXG4zMzM3OlxcdFxcbjMzMzg6XFx0XFx0Y2FzZSBUVU5TRVRMSU5LOlxcbjMzMzk6XFx0XFx0XFx0LyogT25seSBhbGxvdyBzZXR0aW5nIHRoZSB0eXBlIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duICovXFxuMzM0MDpcXHRcXHRcXHRpZiAodHVuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxuMzM0MTpcXHRcXHRcXHRcXHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXFx1MDAzZWRldixcXG4zMzQyOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXFxcXG5cXFwiKTtcXG4zMzQzOlxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4zMzQ0OlxcdFxcdFxcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiBcXHUwMDI2XFx1MDAyNlxcbjMzNDU6XFx0XFx0XFx0XFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVxcdTAwM2VkZXYpIHx8XFxuMzM0NjpcXHRcXHRcXHRcXHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXFx1MDAzZWRldikpKSB7XFxuMzM0NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuMzM0ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjMzNDk6XFx0XFx0XFx0XFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXFxuMzM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHVuLVxcdTAwM2VkZXYpO1xcbjMzNTE6XFx0XFx0XFx0XFx0cmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTtcXG4zMzUyOlxcdFxcdFxcdFxcdGlmIChyZXQpIHtcXG4zMzUzOlxcdFxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LFxcbjMzNTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIlJlZnVzZWQgdG8gY2hhbmdlIGRldmljZSB0eXBlXFxcXG5cXFwiKTtcXG4zMzU1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNTY6XFx0XFx0XFx0XFx0fVxcbjMzNTc6XFx0XFx0XFx0XFx0dHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPSAoaW50KSBhcmc7XFxuMzM1ODpcXHRcXHRcXHRcXHR0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlKTtcXG4zMzU5OlxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwibGlua3R5cGUgc2V0IHRvICVkXFxcXG5cXFwiLFxcbjMzNjA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUpO1xcbjMzNjE6XFx0XFx0XFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFLFxcbjMzNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHR1bi1cXHUwMDNlZGV2KTtcXG4zMzYzOlxcdFxcdFxcdH1cXG4zMzY0OlxcdFxcdFxcdGJyZWFrO1xcbjMzNjU6XFx0XFxuMzM2NjpcXHRcXHRjYXNlIFRVTlNFVERFQlVHOlxcbjMzNjc6XFx0XFx0XFx0dHVuLVxcdTAwM2Vtc2dfZW5hYmxlID0gKHUzMilhcmc7XFxuMzM2ODpcXHRcXHRcXHRicmVhaztcXG4zMzY5OlxcdFxcbjMzNzA6XFx0XFx0Y2FzZSBUVU5TRVRPRkZMT0FEOlxcbjMzNzE6XFx0XFx0XFx0cmV0ID0gc2V0X29mZmxvYWQodHVuLCBhcmcpO1xcbjMzNzI6XFx0XFx0XFx0YnJlYWs7XFxuMzM3MzpcXHRcXG4zMzc0OlxcdFxcdGNhc2UgVFVOU0VUVFhGSUxURVI6XFxuMzM3NTpcXHRcXHRcXHQvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi9cXG4zMzc2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzM3NzpcXHRcXHRcXHRpZiAoKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxcbjMzNzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzM3OTpcXHRcXHRcXHRyZXQgPSB1cGRhdGVfZmlsdGVyKFxcdTAwMjZ0dW4tXFx1MDAzZXR4Zmx0LCAodm9pZCBfX3VzZXIgKilhcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTowMi41NDA1MTY5MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjQ1OTY3MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGB0dW5fY2hyX2lvY3RsYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZnVuY3Rpb24gdGhhdCBjb250YWlucyB0aGUgY3VycmVudCBjb2RlIHNuaXBwZXQg4oCTIHVuZGVyc3RhbmRpbmcgaXRzIGltbWVkaWF0ZSBjb250ZXh0IGlzIGNydWNpYWwuIFRoZW4sIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGlzIGBfX3R1bl9jaHJfaW9jdGxgIG9yIGB0dW5fY2hyX2lvY3RsYCBmdW5jdGlvbi4gQSBxdWljayBgZ3JlcGAgbWlnaHQgYmUgaGVscGZ1bCB0byB1bmNvdmVyIGFsbCB0aGUgY2FsbCBzaXRlcywgb3IgSSBjYW4ganVzdCBjYXJlZnVsbHkgcmVhZCB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBHZXR0aW5nIGEgc2Vuc2Ugb2YgdGhlIGV4ZWN1dGlvbiBmbG93IHdpbGwgYmUgaW1wb3J0YW50LiBJJ2xsIHByb2JhYmx5IGFsc28gbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZmlsZSwgbWF5YmUgZXZlbiBhIGZldyBsaW5lcyBiZWZvcmUgdG8gZ3Jhc3AgdGhlIHNpdHVhdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgdGhhdCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjEwLjc4NjQ4Nzc5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMjAwOlxcdFxcdGt1aWRfdCBvd25lcjtcXG4zMjAxOlxcdFxcdGtnaWRfdCBncm91cDtcXG4zMjAyOlxcdFxcdGludCBpZmluZGV4O1xcbjMyMDM6XFx0XFx0aW50IHNuZGJ1ZjtcXG4zMjA0OlxcdFxcdGludCByZXQ7XFxuMzIwNTpcXHRcXHRib29sIGRvX25vdGlmeSA9IGZhbHNlO1xcbjMyMDY6XFx0XFxuMzIwNzpcXHRcXHRpZiAoY21kID09IFRVTlNFVElGRiB8fCBjbWQgPT0gVFVOU0VUUVVFVUUgfHxcXG4zMjA4OlxcdFxcdCAgICAoX0lPQ19UWVBFKGNtZCkgPT0gU09DS19JT0NfVFlQRSBcXHUwMDI2XFx1MDAyNiBjbWQgIT0gU0lPQ0dTS05TKSkge1xcbjMyMDk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZpZnIsIGFyZ3AsIGlmcmVxX2xlbikpXFxuMzIxMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMjExOlxcdFxcdH0gZWxzZSB7XFxuMzIxMjpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmlmciwgMCwgc2l6ZW9mKGlmcikpO1xcbjMyMTM6XFx0XFx0fVxcbjMyMTQ6XFx0XFx0aWYgKGNtZCA9PSBUVU5HRVRGRUFUVVJFUykge1xcbjMyMTU6XFx0XFx0XFx0LyogQ3VycmVudGx5IHRoaXMganVzdCBtZWFuczogXFxcIndoYXQgSUZGIGZsYWdzIGFyZSB2YWxpZD9cXFwiLlxcbjMyMTY6XFx0XFx0XFx0ICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZXZlciBjaGVja2VkIGZvciBpbnZhbGlkIGZsYWdzIG9uXFxuMzIxNzpcXHRcXHRcXHQgKiBUVU5TRVRJRkYuXFxuMzIxODpcXHRcXHRcXHQgKi9cXG4zMjE5OlxcdFxcdFxcdHJldHVybiBwdXRfdXNlcihJRkZfVFVOIHwgSUZGX1RBUCB8IElGRl9OT19DQVJSSUVSIHxcXG4zMjIwOlxcdFxcdFxcdFxcdFxcdFRVTl9GRUFUVVJFUywgKHVuc2lnbmVkIGludCBfX3VzZXIqKWFyZ3ApO1xcbjMyMjE6XFx0XFx0fSBlbHNlIGlmIChjbWQgPT0gVFVOU0VUUVVFVUUpIHtcXG4zMjIyOlxcdFxcdFxcdHJldHVybiB0dW5fc2V0X3F1ZXVlKGZpbGUsIFxcdTAwMjZpZnIpO1xcbjMyMjM6XFx0XFx0fSBlbHNlIGlmIChjbWQgPT0gU0lPQ0dTS05TKSB7XFxuMzIyNDpcXHRcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4zMjI1OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMzIyNjpcXHRcXHRcXHRyZXR1cm4gb3Blbl9yZWxhdGVkX25zKFxcdTAwMjZuZXQtXFx1MDAzZW5zLCBnZXRfbmV0X25zKTtcXG4zMjI3OlxcdFxcdH1cXG4zMjI4OlxcdFxcbjMyMjk6XFx0XFx0cnRubF9sb2NrKCk7XFxuMzIzMDpcXHRcXG4zMjMxOlxcdFxcdHR1biA9IHR1bl9nZXQodGZpbGUpO1xcbjMyMzI6XFx0XFx0aWYgKGNtZCA9PSBUVU5TRVRJRkYpIHtcXG4zMjMzOlxcdFxcdFxcdHJldCA9IC1FRVhJU1Q7XFxuMzIzNDpcXHRcXHRcXHRpZiAodHVuKVxcbjMyMzU6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzIzNjpcXHRcXG4zMjM3OlxcdFxcdFxcdGlmci5pZnJfbmFtZVtJRk5BTVNJWi0xXSA9ICdcXFxcMCc7XFxuMzIzODpcXHRcXG4zMjM5OlxcdFxcdFxcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXFx1MDAyNmlmcik7XFxuMzI0MDpcXHRcXG4zMjQxOlxcdFxcdFxcdGlmIChyZXQpXFxuMzI0MjpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjQzOlxcdFxcbjMyNDQ6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2aWZyLCBpZnJlcV9sZW4pKVxcbjMyNDU6XFx0XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4zMjQ2OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjMyNDc6XFx0XFx0fVxcbjMyNDg6XFx0XFx0aWYgKGNtZCA9PSBUVU5TRVRJRklOREVYKSB7XFxuMzI0OTpcXHRcXHRcXHRyZXQgPSAtRVBFUk07XFxuMzI1MDpcXHRcXHRcXHRpZiAodHVuKVxcbjMyNTE6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzI1MjpcXHRcXG4zMjUzOlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMzI1NDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmlmaW5kZXgsIGFyZ3AsIHNpemVvZihpZmluZGV4KSkpXFxuMzI1NTpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjU2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzI1NzpcXHRcXHRcXHRpZiAoaWZpbmRleCBcXHUwMDNjIDApXFxuMzI1ODpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjU5OlxcdFxcdFxcdHJldCA9IDA7XFxuMzI2MDpcXHRcXHRcXHR0ZmlsZS1cXHUwMDNlaWZpbmRleCA9IGlmaW5kZXg7XFxuMzI2MTpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4zMjYyOlxcdFxcdH1cXG4zMjYzOlxcdFxcbjMyNjQ6XFx0XFx0cmV0ID0gLUVCQURGRDtcXG4zMjY1OlxcdFxcdGlmICghdHVuKVxcbjMyNjY6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzI2NzpcXHRcXG4zMjY4OlxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwidHVuX2Nocl9pb2N0bCBjbWQgJXVcXFxcblxcXCIsIGNtZCk7XFxuMzI2OTpcXHRcXG4zMjcwOlxcdFxcdG5ldCA9IGRldl9uZXQodHVuLVxcdTAwM2VkZXYpO1xcbjMyNzE6XFx0XFx0cmV0ID0gMDtcXG4zMjcyOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuMzI3MzpcXHRcXHRjYXNlIFRVTkdFVElGRjpcXG4zMjc0OlxcdFxcdFxcdHR1bl9nZXRfaWZmKHR1biwgXFx1MDAyNmlmcik7XFxuMzI3NTpcXHRcXG4zMjc2OlxcdFxcdFxcdGlmICh0ZmlsZS1cXHUwMDNlZGV0YWNoZWQpXFxuMzI3NzpcXHRcXHRcXHRcXHRpZnIuaWZyX2ZsYWdzIHw9IElGRl9ERVRBQ0hfUVVFVUU7XFxuMzI3ODpcXHRcXHRcXHRpZiAoIXRmaWxlLVxcdTAwM2Vzb2NrZXQuc2stXFx1MDAzZXNrX2ZpbHRlcilcXG4zMjc5OlxcdFxcdFxcdFxcdGlmci5pZnJfZmxhZ3MgfD0gSUZGX05PRklMVEVSO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MToxMC43ODY2NDI2ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODEyMzk2MDY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHR1bl9jaHJfaW9jdGxgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgdHVuX2Nocl9pb2N0bGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IGRlZmluaXRpb24uIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBsb29rZWQgYXQgdGhlIGxvdy1sZXZlbCBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSBmb3IgdGhlIFRVTiBkcml2ZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIHNvdXJjZSBhbmQgY29uZmlybWluZyBob3cgaXQgaGFuZGxlcyB0aG9zZSBpb2N0bCBjYWxscy4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHNlZSB3aGljaCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciB1c2VyLXNwYWNlIHByb2Nlc3NlcyBhcmUgKmNhbGxpbmcqIGB0dW5fY2hyX2lvY3RsYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gV2hhdCBmdW5jdGlvbmFsaXR5IGlzIHJlbHlpbmcgb24gdGhlc2UgaW9jdGxzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHN0YW5kYXJkIFRVTi9UQVAgb3BlcmF0aW9ucywgb3IgYXJlIHRoZXJlIGN1c3RvbSBleHRlbnNpb25zIGluIHBsYXk/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgbWFwIHRoZSBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjI4LjkxMDYwNTg1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDMwOlxcdFxcdFxcdGJyZWFrO1xcbjM0MzE6XFx0XFxuMzQzMjpcXHRcXHRjYXNlIFRVTkRFVEFDSEZJTFRFUjpcXG4zNDMzOlxcdFxcdFxcdC8qIENhbiBiZSBzZXQgb25seSBmb3IgVEFQcyAqL1xcbjM0MzQ6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4zNDM1OlxcdFxcdFxcdGlmICgodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRVTl9UWVBFX01BU0spICE9IElGRl9UQVApXFxuMzQzNjpcXHRcXHRcXHRcXHRicmVhaztcXG4zNDM3OlxcdFxcdFxcdHJldCA9IDA7XFxuMzQzODpcXHRcXHRcXHR0dW5fZGV0YWNoX2ZpbHRlcih0dW4sIHR1bi1cXHUwMDNlbnVtcXVldWVzKTtcXG4zNDM5OlxcdFxcdFxcdGJyZWFrO1xcbjM0NDA6XFx0XFxuMzQ0MTpcXHRcXHRjYXNlIFRVTkdFVEZJTFRFUjpcXG4zNDQyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzQ0MzpcXHRcXHRcXHRpZiAoKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVU5fVFlQRV9NQVNLKSAhPSBJRkZfVEFQKVxcbjM0NDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzQ0NTpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjM0NDY6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2dHVuLVxcdTAwM2VmcHJvZywgc2l6ZW9mKHR1bi1cXHUwMDNlZnByb2cpKSlcXG4zNDQ3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0NDg6XFx0XFx0XFx0cmV0ID0gMDtcXG4zNDQ5OlxcdFxcdFxcdGJyZWFrO1xcbjM0NTA6XFx0XFxuMzQ1MTpcXHRcXHRjYXNlIFRVTlNFVFNURUVSSU5HRUJQRjpcXG4zNDUyOlxcdFxcdFxcdHJldCA9IHR1bl9zZXRfZWJwZih0dW4sIFxcdTAwMjZ0dW4tXFx1MDAzZXN0ZWVyaW5nX3Byb2csIGFyZ3ApO1xcbjM0NTM6XFx0XFx0XFx0YnJlYWs7XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdFxcdGNhc2UgVFVOU0VURklMVEVSRUJQRjpcXG4zNDU2OlxcdFxcdFxcdHJldCA9IHR1bl9zZXRfZWJwZih0dW4sIFxcdTAwMjZ0dW4tXFx1MDAzZWZpbHRlcl9wcm9nLCBhcmdwKTtcXG4zNDU3OlxcdFxcdFxcdGJyZWFrO1xcbjM0NTg6XFx0XFxuMzQ1OTpcXHRcXHRjYXNlIFRVTlNFVENBUlJJRVI6XFxuMzQ2MDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjM0NjE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjYXJyaWVyLCBhcmdwLCBzaXplb2YoY2FycmllcikpKVxcbjM0NjI6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzQ2MzpcXHRcXG4zNDY0OlxcdFxcdFxcdHJldCA9IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIodHVuLVxcdTAwM2VkZXYsIChib29sKWNhcnJpZXIpO1xcbjM0NjU6XFx0XFx0XFx0YnJlYWs7XFxuMzQ2NjpcXHRcXG4zNDY3OlxcdFxcdGNhc2UgVFVOR0VUREVWTkVUTlM6XFxuMzQ2ODpcXHRcXHRcXHRyZXQgPSAtRVBFUk07XFxuMzQ2OTpcXHRcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4zNDcwOlxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjM0NzE6XFx0XFx0XFx0cmV0ID0gb3Blbl9yZWxhdGVkX25zKFxcdTAwMjZuZXQtXFx1MDAzZW5zLCBnZXRfbmV0X25zKTtcXG4zNDcyOlxcdFxcdFxcdGJyZWFrO1xcbjM0NzM6XFx0XFxuMzQ3NDpcXHRcXHRkZWZhdWx0OlxcbjM0NzU6XFx0XFx0XFx0cmV0ID0gdHVuX3ZuZXRfaW9jdGwoXFx1MDAyNnR1bi1cXHUwMDNldm5ldF9oZHJfc3osIFxcdTAwMjZ0dW4tXFx1MDAzZWZsYWdzLCBjbWQsIGFyZ3ApO1xcbjM0NzY6XFx0XFx0XFx0YnJlYWs7XFxuMzQ3NzpcXHRcXHR9XFxuMzQ3ODpcXHRcXG4zNDc5OlxcdFxcdGlmIChkb19ub3RpZnkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjI4LjkxMDc4Njg3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NzQwMjcwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3Rpbmc6XG5cbioqRXhhbWluaW5nIExpbmUgMzQ4MCBhbmQgQmV5b25kKipcblxuQWxyaWdodCwgSSdtIGF0IGxpbmUgMzQ4MC4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgd2hhdCBJIGRvIGFib3V0IHRoaXMgY29kZWJhc2UsIEkgaGF2ZSBhIGZldyBpbW1lZGlhdGUgdGhpbmdzIEknbSBsb29raW5nIGZvci4gSXMgdGhpcyBhIGNyaXRpY2FsIHNlY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQ/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb24sIGEgZnVuY3Rpb24gY2FsbCwgYSBzcGVjaWZpYyBhbGdvcml0aG0gaW1wbGVtZW50YXRpb24sIG9yIG1lcmVseSBhIGNvbW1lbnQ/IEJhc2VkIG9uIHRoZSBjdXJyZW50IG1vZHVsZSBjb250ZXh0LCB0aGUgc3Vycm91bmRpbmcgdmFyaWFibGVzLCBhbmQgdGhlIG92ZXJhbGwgcHJvZ3JhbSBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBsaW5lIHNpZ25pZmllcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gcmVjb25zdHJ1Y3QgdGhlIGNvbnRyb2wgZmxvdyB0aGF0IHdpbGwgYnJpbmcgdGhlIHByb2dyYW0gdG8gdGhpcyBzcGVjaWZpYyBsaW5lLiBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwcmVjb25kaXRpb25zLCB0aGUgcG9zc2libGUgaW5wdXRzIHRoYXQgY291bGQgYmUgY2F1c2luZyB0aGlzIGxpbmUgdG8gYmUgZXhlY3V0ZWQsIGFuZCB0aGUgc3Vic2VxdWVudCBsb2dpYyB0aGlzIGxpbmUgbWlnaHQgdHJpZ2dlci4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgcGFyc2UgdGhlIHN5bnRheCwgaWRlbnRpZnkgYW55IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYmVpbmcgdXNlZCwgYW5kIGRldGVybWluZSB0aGVpciBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdtIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiwgbGlrZSByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBpc3N1ZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIGFsc28gaGF2ZSB0byBrZWVwIG15IGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIHBhdHRlcm5zIG9yIGxvZ2ljIHRoYXQgc2VlbXMgb3V0IG9mIHBsYWNlLCBwb3RlbnRpYWxseSBpbmRpY2F0aW5nIGEgYnVnIG9yIGFuIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eS4gVGhpcyBsaW5lIGlzIGp1c3QgYSBwb2ludCBpbiB0aW1lLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgcHJlc2VudCBhbmQgZnV0dXJlIHN0YXRlIHJlbGF0aXZlIHRvIHRoZSBjb2RlLCBhbmQgaG93IHRoZSBwcm9ncmFtIGFycml2ZWQgYXQgdGhpcyBtb21lbnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzYuMzg0ODE2NTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDgwOlxcdFxcdFxcdG5ldGRldl9zdGF0ZV9jaGFuZ2UodHVuLVxcdTAwM2VkZXYpO1xcbjM0ODE6XFx0XFxuMzQ4MjpcXHR1bmxvY2s6XFxuMzQ4MzpcXHRcXHRydG5sX3VubG9jaygpO1xcbjM0ODQ6XFx0XFx0aWYgKHR1bilcXG4zNDg1OlxcdFxcdFxcdHR1bl9wdXQodHVuKTtcXG4zNDg2OlxcdFxcdHJldHVybiByZXQ7XFxuMzQ4NzpcXHR9XFxuMzQ4ODpcXHRcXG4zNDg5OlxcdHN0YXRpYyBsb25nIHR1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuMzQ5MDpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjM0OTE6XFx0e1xcbjM0OTI6XFx0XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcXG4zNDkzOlxcdH1cXG4zNDk0OlxcdFxcbjM0OTU6XFx0I2lmZGVmIENPTkZJR19DT01QQVRcXG4zNDk2OlxcdHN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbjM0OTc6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjM0OTg6XFx0e1xcbjM0OTk6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4zNTAwOlxcdFxcdGNhc2UgVFVOU0VUSUZGOlxcbjM1MDE6XFx0XFx0Y2FzZSBUVU5HRVRJRkY6XFxuMzUwMjpcXHRcXHRjYXNlIFRVTlNFVFRYRklMVEVSOlxcbjM1MDM6XFx0XFx0Y2FzZSBUVU5HRVRTTkRCVUY6XFxuMzUwNDpcXHRcXHRjYXNlIFRVTlNFVFNOREJVRjpcXG4zNTA1OlxcdFxcdGNhc2UgU0lPQ0dJRkhXQUREUjpcXG4zNTA2OlxcdFxcdGNhc2UgU0lPQ1NJRkhXQUREUjpcXG4zNTA3OlxcdFxcdFxcdGFyZyA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKTtcXG4zNTA4OlxcdFxcdFxcdGJyZWFrO1xcbjM1MDk6XFx0XFx0ZGVmYXVsdDpcXG4zNTEwOlxcdFxcdFxcdGFyZyA9IChjb21wYXRfdWxvbmdfdClhcmc7XFxuMzUxMTpcXHRcXHRcXHRicmVhaztcXG4zNTEyOlxcdFxcdH1cXG4zNTEzOlxcdFxcbjM1MTQ6XFx0XFx0LypcXG4zNTE1OlxcdFxcdCAqIGNvbXBhdF9pZnJlcSBpcyBzaG9ydGVyIHRoYW4gaWZyZXEsIHNvIHdlIG11c3Qgbm90IGFjY2VzcyBiZXlvbmRcXG4zNTE2OlxcdFxcdCAqIHRoZSBlbmQgb2YgdGhhdCBzdHJ1Y3R1cmUuIEFsbCBmaWVsZHMgdGhhdCBhcmUgdXNlZCBpbiB0aGlzXFxuMzUxNzpcXHRcXHQgKiBkcml2ZXIgYXJlIGNvbXBhdGlibGUgdGhvdWdoLCB3ZSBkb24ndCBuZWVkIHRvIGNvbnZlcnQgdGhlXFxuMzUxODpcXHRcXHQgKiBjb250ZW50cy5cXG4zNTE5OlxcdFxcdCAqL1xcbjM1MjA6XFx0XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpKTtcXG4zNTIxOlxcdH1cXG4zNTIyOlxcdCNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovXFxuMzUyMzpcXHRcXG4zNTI0OlxcdHN0YXRpYyBpbnQgdHVuX2Nocl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKVxcbjM1MjU6XFx0e1xcbjM1MjY6XFx0XFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4zNTI3OlxcdFxcdGludCByZXQ7XFxuMzUyODpcXHRcXG4zNTI5OlxcdFxcdGlmIChvbikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTozNi4zODUxMzkyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1MDcwMzI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYHR1bl9jaHJfaW9jdGxgIFVzYWdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdHVuLmNgIGZpbGUuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgZGlmZmVyZW50IGZpbGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB1c2luZyB0aGlzIHNwZWNpZmljIGlvY3RsIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgYHR1bmAgZGV2aWNlIGRyaXZlci4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgc2VhcmNoaW5nIGZvciBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZSwgYW5kIHRoZW4gdHJ5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjM4LjIzNTg0NTg3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDA0MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MzE1Mz1zdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTkwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxOTE6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxOTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgaWZyZXFfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzI2Ny1cXG5kcml2ZXJzL25ldC90dW4uYzozMjY4OlxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwidHVuX2Nocl9pb2N0bCBjbWQgJXVcXFxcblxcXCIsIGNtZCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzI2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0ODgtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4OTpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0OTAtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC90dW4uYy0zNDkxLXtcXG5kcml2ZXJzL25ldC90dW4uYzozNDkyOlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZiAoc3RydWN0IGlmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5My19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDk2PXN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzUxOS1cXHQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzozNTIwOlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzUyMS19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNjE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzYyMi1cXHQucG9sbFxcdD0gdHVuX2Nocl9wb2xsLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2MjM6XFx0LnVubG9ja2VkX2lvY3RsXFx0PSB0dW5fY2hyX2lvY3RsLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2MjQtI2lmZGVmIENPTkZJR19DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzguMzUyODU1NTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzE3MTcxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkcyBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVFVOIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgYHR1bi5jYCBkcml2ZXIgaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBmaW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkcml2ZXIuIEknbGwgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGBkcml2ZXJzL25ldC90dW4uY2Agb3IsIG1vcmUgbGlrZWx5LCBhIEtjb25maWcgc3ltYm9sIHRpZWQgdG8gaXRzIGVuYWJsZW1lbnQuIFRoYXQgc2hvdWxkIHRlbGwgbWUgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGNvbnRyb2wgd2hldGhlciB0aGUgVFVOIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgYnVpbHQgYXMgYSBtb2R1bGUuXG5cbk5leHQsIGFzc3VtaW5nIEkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyAob3IgZXZlbiBpZiBJICpkb24ndCogZmluZCBhIGRpcmVjdCByZWZlcmVuY2UgYW5kIEkgbmVlZCBtb3JlIGNvbnRleHQpLCBJJ2xsIHBpdm90IGFuZCBleGFtaW5lIHRoZSBgTWFrZWZpbGVgIGluIGBkcml2ZXJzL25ldC9gLiBTcGVjaWZpY2FsbHksIEknbGwgYGdyZXBgIHRocm91Z2ggdGhlIGBNYWtlZmlsZWAgdG8gc2VlIGhvdyB0aG9zZSBjb25maWcgc3ltYm9scyBmcm9tIEtjb25maWcgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGB0dW4ub2AgaXMgYnVpbHQuIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb21waWxlciBkaXJlY3RpdmVzIGRlY2lkZSB3aGF0IGdldHMgY29tcGlsZWQgYmFzZWQgb24gdGhlIEtjb25maWcgb3B0aW9ucy4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZmluYWwgYW5zd2VyLiBIb3BlZnVsbHksIEkgY2FuIGNsZWFybHkgbWFwIHRoZSBjb25maWcgb3B0aW9ucyB0byB0aGUgZHJpdmVyJ3MgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjQyLjMyNDU3NTYwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzcxMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1blxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVUX1RFQU0pICs9IHRlYW0vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzI6b2JqLSQoQ09ORklHX1RVTikgKz0gdHVuLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zMy1vYmotJChDT05GSUdfVEFQKSArPSB0YXAub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQxPW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgKz0gZW4vaHZfdmhjYV9zdGF0cy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQyOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0VTV0lUQ0gpICAgICArPSBsYWcvbXAubyBsYWcvcG9ydF9zZWwubyBsaWIvZ2VuZXZlLm8gbGliL3BvcnRfdHVuLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00My1cXHRcXHRcXHRcXHRcXHRlbl9yZXAubyBlbi9yZXAvYm9uZC5vIGVuL21vZF9oZHIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NDU9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICs9IGVuX3RjLm8gZW4vcmVwL3RjLm8gZW4vcmVwL25laWdoLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0NjpcXHRcXHRcXHRcXHRcXHRsaWIvZnNfY2hhaW5zLm8gZW4vdGNfdHVuLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00Ny1cXHRcXHRcXHRcXHRcXHRlc3cvaW5kaXJfdGFibGUubyBlbi90Y190dW5fZW5jYXAubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NTM9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICs9IGVuL3RjL2FjdC9hY3QubyBlbi90Yy9hY3QvZHJvcC5vIGVuL3RjL2FjdC90cmFwLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01NC1cXHRcXHRcXHRcXHRcXHRlbi90Yy9hY3QvYWNjZXB0Lm8gZW4vdGMvYWN0L21hcmsubyBlbi90Yy9hY3QvZ290by5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NTU6XFx0XFx0XFx0XFx0XFx0ZW4vdGMvYWN0L3R1bi5vIGVuL3RjL2FjdC9jc3VtLm8gZW4vdGMvYWN0L3BlZGl0Lm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01Ni1cXHRcXHRcXHRcXHRcXHRlbi90Yy9hY3Qvdmxhbi5vIGVuL3RjL2FjdC92bGFuX21hbmdsZS5vIGVuL3RjL2FjdC9tcGxzLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMDQ1PW5mcF90dW5uZWxfbG9va3VwX29mZmxvYWRlZF9tYWNzKHN0cnVjdCBuZnBfYXBwICphcHAsIGNvbnN0IHU4ICptYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEwNDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMDQ5OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIG1hYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEwNTAtXFx0XFx0XFx0XFx0ICAgICAgb2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTA3Nz1uZnBfdHVubmVsX2FkZF9zaGFyZWRfbWFjKHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMTI4OlxcdFxcdGlmIChyaGFzaHRhYmxlX2luc2VydF9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTI5LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZlbnRyeS1cXHUwMDNlaHRfbm9kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTE1MC1lcnJfcmVtb3ZlX2hhc2g6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMTUxOlxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcywgXFx1MDAyNmVudHJ5LVxcdTAwM2VodF9ub2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTE1Mi1cXHRcXHRcXHQgICAgICAgb2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTE2Mz1uZnBfdHVubmVsX2RlbF9zaGFyZWRfbWFjKHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEyMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxMjI4OlxcdFdBUk5fT05fT05DRShyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMjI5LVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZW50cnktXFx1MDAzZWh0X25vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTE1MDc9aW50IG5mcF90dW5uZWxfY29uZmlnX3N0YXJ0KHN0cnVjdCBuZnBfYXBwICphcHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MTItXFx0LyogSW5pdGlhbGlzZSByaGFzaCBmb3IgTUFDIG9mZmxvYWQgdHJhY2tpbmcuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTEzOlxcdGVyciA9IHJoYXNodGFibGVfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUxNC1cXHRcXHRcXHQgICAgICBcXHUwMDI2b2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUzMC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTMxOlxcdFxcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUzMi1cXHRcXHRcXHRcXHRcXHQgICAgbmZwX2NoZWNrX3JoYXNodGFibGVfZW1wdHksIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTM5PXZvaWQgbmZwX3R1bm5lbF9jb25maWdfc3RvcChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTU4LVxcdC8qIERlc3Ryb3kgcmhhc2guIEVudHJpZXMgc2hvdWxkIGJlIGNsZWFuZWQgb24gbmV0ZGV2IG5vdGlmaWVyIHVucmVnLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTU1OTpcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1NjAtXFx0XFx0XFx0XFx0ICAgIG5mcF9jaGVja19yaGFzaHRhYmxlX2VtcHR5LCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NDIuNTExOTUxNDg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5OTk4MzI0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBlbWJlZGRlZCBzeXN0ZW1zIGRldmVsb3BtZW50IG9yIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKkNoZWNraW5nIHRoZSBUVU4vVEFQIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGRlZXBlciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSBUVU4vVEFQIGRyaXZlci4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBuZXR3b3JraW5nLXJlbGF0ZWQgaXNzdWUgb3IgSSdtIHRyeWluZyB0byB1dGlsaXplIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbi4gTm8gcG9pbnQgd2FzdGluZyB0aW1lIGd1ZXNzaW5nOyBsZXQncyBjaGVjayBgQ09ORklHX1RVTmAgaW4gdGhlIEtjb25maWcsIHRvIHNlZSBpZiBpdCdzIHNldCB0byBcInlcIiAoYnVpbHQtaW4pIG9yIFwibVwiIChtb2R1bGUpLiBUaGVuIEkgY2FuIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTo0OS41MTE3ODY4MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDQ3NTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NDkuNjQyMjY3NTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzI0MzU3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBtb2R1bGUgaXMgc2V0IHVwLiBMZXQncyBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBhcm91bmQgbGluZSAzOTEuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZSBjYXJkcy4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjaXNpb25zIGdldCBtYWRlLCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzcGVsbGVkIG91dC4gSSBjYW4gb2Z0ZW4gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGludGVuZGVkIHVzZSBjYXNlIGp1c3QgYnkgcmVhZGluZyB0aGlzIHNlY3Rpb24sIGFuZCB0aGF0IGNhbiBzaGFwZSBhbGwgZnVydGhlciBhbmFseXNpcy4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NTEuNzc0NzA1NDQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzg4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg4OlxcdFxcdGRlcGVuZHMgb24gUklPTkVUXFxuIDM4OTpcXHRcXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuIDM5MDpcXHRcXG4gMzkxOlxcdGNvbmZpZyBUVU5cXG4gMzkyOlxcdFxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuIDM5MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMzk0OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAzOTU6XFx0XFx0aGVscFxcbiAzOTY6XFx0XFx0ICBUVU4vVEFQIHByb3ZpZGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbiBmb3IgdXNlciBzcGFjZVxcbiAzOTc6XFx0XFx0ICBwcm9ncmFtcy4gIEl0IGNhbiBiZSB2aWV3ZWQgYXMgYSBzaW1wbGUgUG9pbnQtdG8tUG9pbnQgb3IgRXRoZXJuZXRcXG4gMzk4OlxcdFxcdCAgZGV2aWNlLCB3aGljaCBpbnN0ZWFkIG9mIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gYSBwaHlzaWNhbCBtZWRpYSxcXG4gMzk5OlxcdFxcdCAgcmVjZWl2ZXMgdGhlbSBmcm9tIHVzZXIgc3BhY2UgcHJvZ3JhbSBhbmQgaW5zdGVhZCBvZiBzZW5kaW5nIHBhY2tldHNcXG4gNDAwOlxcdFxcdCAgdmlhIHBoeXNpY2FsIG1lZGlhIHdyaXRlcyB0aGVtIHRvIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0uXFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXFxuIDQwMzpcXHRcXHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXFxuIDQwNDpcXHRcXHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcXG4gNDA1OlxcdFxcdCAgYWxsIHJvdXRlcyBjb3JyZXNwb25kaW5nIHRvIGl0LlxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHQgIFBsZWFzZSByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiA0MDg6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gNDA5OlxcdFxcbiA0MTA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDQxMTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHR1bi5cXG4gNDEyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTo1MS43NzQ3ODgwNzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODAxNTQ1NTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IFRVTi9UQVAgRHJpdmVyJ3MgYFRVTlNFVExJTktgIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBUVU4vVEFQIGRyaXZlciAoYGRyaXZlcnMvbmV0L3R1bi5jYCkuIFNwZWNpZmljYWxseSwgaXQncyBjb25jZXJuZWQgd2l0aCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgY2FsbCwgd2hpY2ggaXMgdXNlZCB0byBzZXQgdGhlIGxpbmsgdHlwZSBvZiB0aGUgVFVOIGRldmljZS4gSSBzZWUgdGhlIGNoZWNrIGhlcmUg4oCTIHdoZW4gdGhlIHVzZXIgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBsaW5rIHR5cGUgYW5kICpzaW11bHRhbmVvdXNseSo6XG5cbjEuICBUaGUgbmV3IGxpbmsgdHlwZSdzIGFkZHJlc3MgbGVuZ3RoIChgdHVuX2dldF9hZGRyX2xlbihhcmcpYCkgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGRldmljZSdzIGFkZHJlc3MgbGVuZ3RoIChgdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbmApLlxuMi4gIFRoZSBkZXZpY2UgaGFzIGVpdGhlciBleGlzdGluZyB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gaXRzIGxpc3RzIChgIW5ldGRldl91Y19lbXB0eSh0dW4tXHUwMDNlZGV2KSB8fCAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpYCkuXG5cbi4uLnRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgLUVCVVNZYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogY2hhbmdpbmcgdGhlIGBhZGRyX2xlbmAgd2hpbGUgdGhvc2UgbGlzdHMgYXJlIHBvcHVsYXRlZCBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIEl0IHNjcmVhbXMgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYWRkcmVzcy1sZW5ndGggbWlzbWF0Y2hlcywgbGVhZGluZyB0byBwb3RlbnRpYWwgYnVncyB3aGVuIHRob3NlIGV4aXN0aW5nIGFkZHJlc3NlcyBhcmUgYWNjZXNzZWQsIGZyZWVkLCBvciBvdGhlcndpc2UgbWFuaXB1bGF0ZWQgd2l0aCB0aGUgbmV3IGFkZHJlc3MgbGVuZ3RoLiBUaGlzIGlzIGEgY2xhc3NpYyBcInN5emJvdCBidWdcIiB3YWl0aW5nIHRvIGhhcHBlbiwgaWYgSSBoYWQgdG8gZ3Vlc3MuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBBYnNvbHV0ZWx5LiBUaGUgVFVOL1RBUCBkcml2ZXIgaXMgYSBzdGFuZGFyZCwgc29mdHdhcmUtYmFzZWQgdmlydHVhbCBuZXR3b3JraW5nIGNvbXBvbmVudC4gSXQncyBhY2Nlc3NpYmxlIHZpYSBgL2Rldi9uZXQvdHVuYCBhbmQgaGVhdmlseSB1dGlsaXplZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIG1ha2luZyBpdCBhIHZlcnkgYWNjZXNzaWJsZSB0YXJnZXQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbG9naWMgd2l0aGluIHRoZSBUVU4gZHJpdmVyIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBob3cgaXQgaGFuZGxlcyB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGFuZCBhc3NvY2lhdGVkIGFkZHJlc3MgbGlzdHMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgZnV6emluZyBjYW4gdW5jb3ZlciBzdWJ0bGUsIGV4cGxvaXRhYmxlIGJ1Z3MuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHN5bWJvbHMgZm9yIGZ1enppbmcuIGB0dW5fY2hyX2lvY3RsYCBpcyBub24tc3RhdGljLCBzbyB0aGUgb3JpZ2luYWwgYXNzZXNzbWVudCBsb29rcyBsaWtlIHRoZSBiZXN0IGVudHJ5cG9pbnQuIEl0IGxvb2tzIGxpa2UgYF9fdHVuX2Nocl9pb2N0bGAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBncmVwIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyIHRvIGZpbmQgdGhlIGVudHJ5cG9pbnQuIEkgd2lsbCBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjU5Ljc5MDI0NTc1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3Nzg3MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTUwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC90dW4uYy04Ny1cXG5kcml2ZXJzL25ldC90dW4uYzo4ODpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTg5LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIyMj1zdHJ1Y3QgdmV0aCB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjI3OnN0YXRpYyB2b2lkIHR1bl9mbG93X2luaXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bik7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjI4OnN0YXRpYyB2b2lkIHR1bl9mbG93X3VuaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKTtcXG5kcml2ZXJzL25ldC90dW4uYy0yMjktXFxuZHJpdmVycy9uZXQvdHVuLmM6MjMwOnN0YXRpYyBpbnQgdHVuX25hcGlfcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuZHJpdmVycy9uZXQvdHVuLmMtMjMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI1Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTg6c3RhdGljIGludCB0dW5fbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG5kcml2ZXJzL25ldC90dW4uYy0yNTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjY5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3MDpzdGF0aWMgdm9pZCB0dW5fbmFwaV9pbml0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjcxLVxcdFxcdFxcdCAgYm9vbCBuYXBpX2VuLCBib29sIG5hcGlfZnJhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODAtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjgxOnN0YXRpYyB2b2lkIHR1bl9uYXBpX2VuYWJsZShzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODYtXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjg3OnN0YXRpYyB2b2lkIHR1bl9uYXBpX2Rpc2FibGUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0yODgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjkyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI5MzpzdGF0aWMgdm9pZCB0dW5fbmFwaV9kZWwoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0yOTQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjk4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI5OTpzdGF0aWMgYm9vbCB0dW5fbmFwaV9mcmFnc19lbmFibGVkKGNvbnN0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwMy1cXG5kcml2ZXJzL25ldC90dW4uYzozMDQ6c3RhdGljIGlubGluZSB1MzIgdHVuX2hhc2hmbih1MzIgcnhoYXNoKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMDgtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzA5OnN0YXRpYyBzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKnR1bl9mbG93X2ZpbmQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiByeGhhc2gpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxOS1cXG5kcml2ZXJzL25ldC90dW4uYzozMjA6c3RhdGljIHN0cnVjdCB0dW5fZmxvd19lbnRyeSAqdHVuX2Zsb3dfY3JlYXRlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtMzIxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0MTpzdGF0aWMgdm9pZCB0dW5fZmxvd19kZWxldGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9mbG93X2VudHJ5ICplKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNDktXFxuZHJpdmVycy9uZXQvdHVuLmM6MzUwOnN0YXRpYyB2b2lkIHR1bl9mbG93X2ZsdXNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzUxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NC1cXG5kcml2ZXJzL25ldC90dW4uYzozNjU6c3RhdGljIHZvaWQgdHVuX2Zsb3dfZGVsZXRlX2J5X3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHUxNiBxdWV1ZV9pbmRleClcXG5kcml2ZXJzL25ldC90dW4uYy0zNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzgxLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM4MjpzdGF0aWMgdm9pZCB0dW5fZmxvd19jbGVhbnVwKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM4My17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy00MTMtXFxuZHJpdmVycy9uZXQvdHVuLmM6NDE0OnN0YXRpYyB2b2lkIHR1bl9mbG93X3VwZGF0ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCB1MzIgcnhoYXNoLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTQxNS1cXHRcXHRcXHQgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQ1MS0gKi9cXG5kcml2ZXJzL25ldC90dW4uYzo0NTI6c3RhdGljIGlubGluZSB2b2lkIHR1bl9mbG93X3NhdmVfcnBzX3J4aGFzaChzdHJ1Y3QgdHVuX2Zsb3dfZW50cnkgKmUsIHUzMiBoYXNoKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQ1My17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy00NjMtICovXFxuZHJpdmVycy9uZXQvdHVuLmM6NDY0OnN0YXRpYyB1MTYgdHVuX2F1dG9tcV9zZWxlY3RfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC90dW4uYy00NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNDgyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjQ4MzpzdGF0aWMgdTE2IHR1bl9lYnBmX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQ4NC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy00OTktXFxuZHJpdmVycy9uZXQvdHVuLmM6NTAwOnN0YXRpYyB1MTYgdHVuX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTUwMS1cXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTUxNS1cXG5kcml2ZXJzL25ldC90dW4uYzo1MTY6c3RhdGljIGlubGluZSBib29sIHR1bl9ub3RfY2FwYWJsZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTUxNy17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy01MjUtXFxuZHJpdmVycy9uZXQvdHVuLmM6NTI2OnN0YXRpYyB2b2lkIHR1bl9zZXRfcmVhbF9udW1fcXVldWVzKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtNTI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTUzMS1cXG5kcml2ZXJzL25ldC90dW4uYzo1MzI6c3RhdGljIHZvaWQgdHVuX2Rpc2FibGVfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy01MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNTM4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjUzOTpzdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bl9lbmFibGVfcXVldWUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy01NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNTQ4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU0OTp2b2lkIHR1bl9wdHJfZnJlZSh2b2lkICpwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmMtNTUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTU2MC19XFxuZHJpdmVycy9uZXQvdHVuLmM6NTYxOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9wdHJfZnJlZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtNTYyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU2MzpzdGF0aWMgdm9pZCB0dW5fcXVldWVfcHVyZ2Uoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy01NjQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNTczLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU3NDpzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcXG5kcml2ZXJzL25ldC90dW4uYy01NzUte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNjQ0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjY0NTpzdGF0aWMgdm9pZCB0dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtNjQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTY2MS1cXG5kcml2ZXJzL25ldC90dW4uYzo2NjI6c3RhdGljIHZvaWQgdHVuX2RldGFjaF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy02NjMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNzA1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjcwNjpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTcwNy1cXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTcyNC1cXG5kcml2ZXJzL25ldC90dW4uYzo3MjU6c3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTcyNi1cXHRcXHQgICAgICBib29sIHNraXBfZmlsdGVyLCBib29sIG5hcGksIGJvb2wgbmFwaV9mcmFncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTgyMi1cXG5kcml2ZXJzL25ldC90dW4uYzo4MjM6c3RhdGljIHN0cnVjdCB0dW5fc3RydWN0ICp0dW5fZ2V0KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtODI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTgzNS1cXG5kcml2ZXJzL25ldC90dW4uYzo4MzY6c3RhdGljIHZvaWQgdHVuX3B1dChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy04NDEtLyogVEFQIGZpbHRlcmluZyAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjg0MjpzdGF0aWMgdm9pZCBhZGRyX2hhc2hfc2V0KHUzMiAqbWFzaywgY29uc3QgdTggKmFkZHIpXFxuZHJpdmVycy9uZXQvdHVuLmMtODQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTg0Ny1cXG5kcml2ZXJzL25ldC90dW4uYzo4NDg6c3RhdGljIHVuc2lnbmVkIGludCBhZGRyX2hhc2hfdGVzdChjb25zdCB1MzIgKm1hc2ssIGNvbnN0IHU4ICphZGRyKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTg0OS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy04NTMtXFxuZHJpdmVycy9uZXQvdHVuLmM6ODU0OnN0YXRpYyBpbnQgdXBkYXRlX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCB2b2lkIF9fdXNlciAqYXJnKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTg1NS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy05MTMtLyogUmV0dXJuczogMCAtIGRyb3AsICE9MCAtIGFjY2VwdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjkxNDpzdGF0aWMgaW50IHJ1bl9maWx0ZXIoc3RydWN0IHRhcF9maWx0ZXIgKmZpbHRlciwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC90dW4uYy05MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtOTM2LSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjkzNzpzdGF0aWMgaW50IGNoZWNrX2ZpbHRlcihzdHJ1Y3QgdGFwX2ZpbHRlciAqZmlsdGVyLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTkzOC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz05NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHM7XFxuZHJpdmVycy9uZXQvdHVuLmMtOTQ4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjk0OTpzdGF0aWMgaW50IHR1bl9uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTk1MC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy05ODgtLyogTmV0IGRldmljZSBkZXRhY2ggZnJvbSBmZC4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzo5ODk6c3RhdGljIHZvaWQgdHVuX25ldF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy05OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtOTk0LS8qIE5ldCBkZXZpY2Ugb3Blbi4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzo5OTU6c3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy05OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAwMi0vKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjEwMDM6c3RhdGljIGludCB0dW5fbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAwNC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDI3LS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjEwMjg6c3RhdGljIHZvaWQgdHVuX2F1dG9tcV94bWl0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAyOS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDQ1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0xMDQ3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTA1OC0vKiBOZXQgZGV2aWNlIHN0YXJ0IHhtaXQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDU5OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNjgtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTE2OTpzdGF0aWMgdm9pZCB0dW5fbmV0X21jbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE3Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoxMTc4OnN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNzktXFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMTg1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjExODY6c3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExODcte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTIwMT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMDI6dHVuX25ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTIxMS1cXG5kcml2ZXJzL25ldC90dW4uYzoxMjEyOnN0YXRpYyBpbnQgdHVuX3hkcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMTMtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI0MjpzdGF0aWMgaW50IHR1bl94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcXG5kcml2ZXJzL25ldC90dW4uYy0xMjQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI1MjpzdGF0aWMgaW50IHR1bl9uZXRfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2FycmllcilcXG5kcml2ZXJzL25ldC90dW4uYy0xMjUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNzktXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4MDpzdGF0aWMgdm9pZCBfX3R1bl94ZHBfZmx1c2hfdGZpbGUoc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0xMjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODctXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4ODpzdGF0aWMgaW50IHR1bl94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbixcXG5kcml2ZXJzL25ldC90dW4uYy0xMjg5LVxcdFxcdFxcdHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzMzYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTMzNzpzdGF0aWMgaW50IHR1bl94ZHBfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuZHJpdmVycy9uZXQvdHVuLmMtMTMzOC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMzUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMzY4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjEzNjk6c3RhdGljIHZvaWQgdHVuX2Zsb3dfaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTM4MS1cXG5kcml2ZXJzL25ldC90dW4uYzoxMzgyOnN0YXRpYyB2b2lkIHR1bl9mbG93X3VuaW5pdChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzODMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTM5MS0vKiBJbml0aWFsaXplIG5ldCBkZXZpY2UuICovXFxuZHJpdmVycy9uZXQvdHVuLmM6MTM5MjpzdGF0aWMgdm9pZCB0dW5fbmV0X2luaXRpYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMzkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0MzEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTQzMjpzdGF0aWMgYm9vbCB0dW5fc29ja193cml0ZWFibGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0xNDMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NDEtLyogUG9sbCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE0NDI6c3RhdGljIF9fcG9sbF90IHR1bl9jaHJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG5kcml2ZXJzL25ldC90dW4uYy0xNDQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE0NzUtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTQ3NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9uYXBpX2FsbG9jX2ZyYWdzKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTQ3Ny1cXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE1MzItICogbGluZWFyIGlzIGEgaGludCBhcyB0byBob3cgbXVjaCB0byBjb3B5ICh1c3VhbGx5IGhlYWRlcnMpLiAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE1MzM6c3RhdGljIHN0cnVjdCBza19idWZmICp0dW5fYWxsb2Nfc2tiKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTUzNC1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNTU5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE1NjA6c3RhdGljIHZvaWQgdHVuX3J4X2JhdGNoZWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG5kcml2ZXJzL25ldC90dW4uYy0xNTYxLVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBtb3JlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTU5OS1cXG5kcml2ZXJzL25ldC90dW4uYzoxNjAwOnN0YXRpYyBib29sIHR1bl9jYW5fYnVpbGRfc2tiKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTYwMS1cXHRcXHRcXHQgICAgICBpbnQgbGVuLCBpbnQgbm9ibG9jaywgYm9vbCB6ZXJvY29weSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MjEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTYyMjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fdHVuX2J1aWxkX3NrYihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2MjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2ZyYWcgKmFsbG9jX2ZyYWcsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE2NDMtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTY0NDpzdGF0aWMgaW50IHR1bl94ZHBfYWN0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csXFxuZHJpdmVycy9uZXQvdHVuLmMtMTY0NS1cXHRcXHQgICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBhY3QpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNjgxLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE2ODI6c3RhdGljIHN0cnVjdCBza19idWZmICp0dW5fYnVpbGRfc2tiKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtMTY4My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNzc4LS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE3Nzk6c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTc4MC1cXHRcXHRcXHQgICAgdm9pZCAqbXNnX2NvbnRyb2wsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwNzYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjA3NzpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZHJpdmVycy9uZXQvdHVuLmMtMjA3OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMDk2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIwOTc6c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyX3hkcChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTgtXFx0XFx0XFx0XFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjQtLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoyMTI1OnN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjYtXFx0XFx0XFx0ICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjA5LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMTA6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMTEtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjQyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIyNDM6c3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0yMjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNTUtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjI1NjpzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNTctXFx0XFx0XFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjI5Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoyMjk4OnN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjI5OS1cXHRcXHRcXHQgICBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjMzNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzM1OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5kcml2ZXJzL25ldC90dW4uYy0yMzM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIzNTYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjM1NzpzdGF0aWMgdm9pZCB0dW5fcHJvZ19mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIzNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjM2NC1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzY1OnN0YXRpYyBpbnQgX190dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0yMzY2LVxcdFxcdFxcdCAgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjM4OS1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzkwOnN0YXRpYyB2b2lkIHR1bl9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIzOTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjQwMS1cXG5kcml2ZXJzL25ldC90dW4uYzoyNDAyOnN0YXRpYyB2b2lkIHR1bl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0MDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjQxOS0gKi9cXG5kcml2ZXJzL25ldC90dW4uYzoyNDIwOnN0YXRpYyBpbnQgdHVuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG5kcml2ZXJzL25ldC90dW4uYy0yNDIxLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0MjctXFxuZHJpdmVycy9uZXQvdHVuLmM6MjQyODpzdGF0aWMgc2l6ZV90IHR1bl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjQ0NC1cXG5kcml2ZXJzL25ldC90dW4uYzoyNDQ1OnN0YXRpYyBpbnQgdHVuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0NDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjQ4Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdHVuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNDk0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI0OTU6c3RhdGljIHZvaWQgdHVuX3NvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI0OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjUxNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTE1OnN0YXRpYyB2b2lkIHR1bl9wdXRfcGFnZShzdHJ1Y3QgdHVuX3BhZ2UgKnRwYWdlKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI1MTYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjUyMC1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTIxOnN0YXRpYyBpbnQgdHVuX3hkcF9vbmUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0yNTIyLVxcdFxcdCAgICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjY1Ni1cXG5kcml2ZXJzL25ldC90dW4uYzoyNjU3OnN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5kcml2ZXJzL25ldC90dW4uYy0yNjU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI3MTEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjcxMjpzdGF0aWMgaW50IHR1bl9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtMjcxMy1cXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc0OS1cXG5kcml2ZXJzL25ldC90dW4uYzoyNzUwOnN0YXRpYyBpbnQgdHVuX3B0cl9wZWVrX2xlbih2b2lkICpwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc1MS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNzYzLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3NjQ6c3RhdGljIGludCB0dW5fcGVla19sZW4oc3RydWN0IHNvY2tldCAqc29jaylcXG5kcml2ZXJzL25ldC90dW4uYy0yNzY1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI3ODc9c3RhdGljIHN0cnVjdCBwcm90byB0dW5fcHJvdG8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNzkyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3OTM6c3RhdGljIGludCB0dW5fZmxhZ3Moc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG5kcml2ZXJzL25ldC90dW4uYy0yNzk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI3OTctXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjc5ODpzdGF0aWMgc3NpemVfdCB0dW5fZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTI3OTktXFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgwNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyODA1OnN0YXRpYyBzc2l6ZV90IG93bmVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL25ldC90dW4uYy0yODA2LVxcdFxcdFxcdCAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgxNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyODE1OnN0YXRpYyBzc2l6ZV90IGdyb3VwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL25ldC90dW4uYy0yODE2LVxcdFxcdFxcdCAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgyNC1cXG5kcml2ZXJzL25ldC90dW4uYzoyODI1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyh0dW5fZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI4MjY6c3RhdGljIERFVklDRV9BVFRSX1JPKG93bmVyKTtcXG5kcml2ZXJzL25ldC90dW4uYzoyODI3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhncm91cCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjgyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI4MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODM5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI4NDA6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yODQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5ODMtXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjk4NDpzdGF0aWMgdm9pZCB0dW5fZ2V0X2lmZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yOTg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5OTUtICogcHJpdnMgcmVxdWlyZWQuICovXFxuZHJpdmVycy9uZXQvdHVuLmM6Mjk5NjpzdGF0aWMgaW50IHNldF9vZmZsb2FkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5OTcte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA0OS1cXG5kcml2ZXJzL25ldC90dW4uYzozMDUwOnN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfZmlsdGVyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIGludCBuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA2NC1cXG5kcml2ZXJzL25ldC90dW4uYzozMDY1OnN0YXRpYyBpbnQgdHVuX2F0dGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG5kcml2ZXJzL25ldC90dW4uYy0zMDY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwODQtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzA4NTpzdGF0aWMgdm9pZCB0dW5fc2V0X3NuZGJ1ZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwODYte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA5NS1cXG5kcml2ZXJzL25ldC90dW4uYzozMDk2OnN0YXRpYyBpbnQgdHVuX3NldF9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA5Ny17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTMxLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxMzI6c3RhdGljIGludCB0dW5fc2V0X2VicGYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9wcm9nIF9fcmN1ICoqcHJvZ19wLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxMzMtXFx0XFx0XFx0dm9pZCBfX3VzZXIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTUyLS8qIFJldHVybiBjb3JyZWN0IHZhbHVlIGZvciB0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gYmFzZWQgb24gdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUuICovXFxuZHJpdmVycy9uZXQvdHVuLmM6MzE1MzpzdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzE1NC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTkwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxOTE6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxOTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgaWZyZXFfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ4OC1cXG5kcml2ZXJzL25ldC90dW4uYzozNDg5OnN0YXRpYyBsb25nIHR1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5MC1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5NS0jaWZkZWYgQ09ORklHX0NPTVBBVFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0OTY6c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ5Ny1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNTIzLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1MjQ6c3RhdGljIGludCB0dW5fY2hyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzUyNS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNTQ3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1NDg6c3RhdGljIGludCB0dW5fY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzU4Ni1cXG5kcml2ZXJzL25ldC90dW4uYzozNTg3OnN0YXRpYyBpbnQgdHVuX2Nocl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25ldC90dW4uYy0zNTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1OTYtI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuZHJpdmVycy9uZXQvdHVuLmM6MzU5NzpzdGF0aWMgdm9pZCB0dW5fY2hyX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzU5OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNjM1PXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0dW5fbWlzY2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NDMtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzY0NDpzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM2NDUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjU1LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2NTY6c3RhdGljIGludCB0dW5fZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY1Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjY0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2NjU6c3RhdGljIGludCB0dW5fc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY2Ni1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjczLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2NzQ6c3RhdGljIHZvaWQgdHVuX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY3NS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjkwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2OTE6c3RhdGljIHUzMiB0dW5fZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjk3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2OTg6c3RhdGljIHZvaWQgdHVuX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY5OS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzA0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM3MDU6c3RhdGljIGludCB0dW5fZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzcwNi1cXHRcXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzcxNi1cXG5kcml2ZXJzL25ldC90dW4uYzozNzE3OnN0YXRpYyBpbnQgdHVuX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MTgtXFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MzEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzczMjpzdGF0aWMgdm9pZCB0dW5fZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjAwLjEwODAzODY4M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjY4NDczOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgVmVyZGljdCBmb3IgdGhlIFRVTi9UQVAgRHJpdmVyJ3MgaW9jdGwgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIEkndmUgaWRlbnRpZmllZCBgX190dW5fY2hyX2lvY3RsYCBhbmQgYHR1bl9jaHJfaW9jdGxgIGFzIHRoZSBrZXkgdGFyZ2V0cywgc28gSSdsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UsIGFuZCBwZXJoYXBzIHRoZWlyIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHR1bl9jaHJfY29tcGF0X2lvY3RsYCBhbmQgYHR1bl9nZXRfYWRkcl9sZW5gLCBpbiB0aGUgZm9jdXMgc3ltYm9sIGxpc3QuIE5vdywgbGV0J3MgdmVyaWZ5IHRoZXNlIGFyZSByZWFsbHkgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIG9wZXJhdGlvbnMuIENoZWNraW5nIGB0dW5fY2hyX2lvY3RsYCBhbmQgYF9fdHVuX2Nocl9pb2N0bGAgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGBUVU5gIGNvbmZpZyBpcyBjcnVjaWFsLCBhbG9uZyB3aXRoIGBJTkVUYCBzaW5jZSBpdCdzIGEgZGVwZW5kZW5jeS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgVFVOYCBkZXBlbmRzIG9uIGBJTkVUYC4gT2theSwgc28gYFRVTmAgYW5kIGBJTkVUYCBhcmUgb3VyIEVuYWJsZUNvbmZpZ3MuIEknbGwgbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBzZXQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbk5vdywgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZC4gWWVzLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gTXkgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbmZpcm1lZDogYHR1bl9jaHJfaW9jdGxgIGFuZCBgX190dW5fY2hyX2lvY3RsYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCBhcyBgVFVOYCBhbmQgYElORVRgLiBGaW5hbGx5LCBJIGhhdmUgYSBjb25jaXNlIHJlYXNvbiB3aHkgdGhlc2UgY2hvaWNlcyB3ZXJlIG1hZGUsIGFuZCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMywiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDguNzc2NTE1NDU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0ODE2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcIl9fdHVuX2Nocl9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBUVU4gZHJpdmVyJ3MgVFVOU0VUTElOSyBpb2N0bCBoYW5kbGVyIChfX3R1bl9jaHJfaW9jdGwpIHRvIHJlamVjdCBsaW5rIHR5cGUgY2hhbmdlcyB3aXRoIC1FQlVTWSBpZiB0aGUgbmV3IGxpbmsgdHlwZSBoYXMgYSBkaWZmZXJlbnQgYWRkcmVzcyBsZW5ndGggd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBvbiB0aGUgbmV0ZGV2aWNlIGFyZSBub3QgZW1wdHkuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX2Nocl9pb2N0bFwiLFxuICAgIFwiX190dW5fY2hyX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIFRVTiBkcml2ZXIncyBUVU5TRVRMSU5LIGlvY3RsIGhhbmRsZXIgKF9fdHVuX2Nocl9pb2N0bCkgdG8gcmVqZWN0IGxpbmsgdHlwZSBjaGFuZ2VzIHdpdGggLUVCVVNZIGlmIHRoZSBuZXcgbGluayB0eXBlIGhhcyBhIGRpZmZlcmVudCBhZGRyZXNzIGxlbmd0aCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIG9uIHRoZSBuZXRkZXZpY2UgYXJlIG5vdCBlbXB0eS4gVGhpcyBsb2dpYyBpcyBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDguODUwMDAzMjk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY0NTEwODcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjA4Ljg1MDQwMDg2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NjQ0NzA2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgX190dW5fY2hyX2lvY3RsKClgIGZvciB0aGUgYFRVTlNFVExJTktgIGlvY3RsIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgaXQgcmVqZWN0cyBjaGFuZ2luZyB0aGUgZGV2aWNlIHR5cGUgaWYgdGhlIG5ldyBhZGRyZXNzIGxlbmd0aCAoYHR1bl9nZXRfYWRkcl9sZW4oYXJnKWApIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgd2hpbGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyBhcmUgbm9uLWVtcHR5LiBcXG5cXG5UaGlzIGNoYW5nZSBwcmV2ZW50cyBhZGRyZXNzIGxlbmd0aCBtaXNtYXRjaCBpc3N1ZXMgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIG9wZXJhdGluZyBvbiBleGlzdGluZyBgZGV2LVxcdTAwM2V1Y2AgYW5kIGBkZXYtXFx1MDAzZW1jYCBsaXN0cyAod2hpY2ggYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmU5NjlmZWE4MDZiMDc5NzhmMzY4ZTQ5OGY5ZGZkMGZiYzAyYWM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggNWEzMDI3MDlhNjhhYS4uZTViNzcyOWE5NjdkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTMzNDEsNiArMzM0MSwxMCBAQCBzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVx1MDAzZWRldixcbiBcdFx0XHRcdCAgIFwiTGlua3R5cGUgc2V0IGZhaWxlZCBiZWNhdXNlIGludGVyZmFjZSBpcyB1cFxcblwiKTtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVx1MDAzZWRldikgfHxcbitcdFx0XHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXHUwMDNlZGV2KSkpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR1bi1cdTAwM2VkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDguODUwNDAxNjc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyNDU5MDQxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgS01TQU4gRnV6emluZyBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGp1c3RpZmllcyBpdHMgb3duIEtNU0FOIGZ1enppbmcgcnVuLiBNeSBpbml0aWFsIGFwcHJvYWNoLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSBkb2VzIGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGB0dW4uY2AgZmlsZS4gSSdsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlcidzIHF1aWNrZXN0IGFuZCBtb3N0IGVmZmljaWVudCDigJMgdG8gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyBsaW5lIDMzNDEgaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZSwgbm90IGp1c3QgdGhlICp3aGF0Ki4gXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgc3BlY2lmaWMgY2hhbmdlOiBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYW4gYWRkaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGB0dW5fZ2V0X2FkZHJfbGVuYCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgRUJVU1lgIGVycm9yIGlmIHRoZSBhZGRyZXNzIGxlbmd0aCBkb2Vzbid0IG1hdGNoIGFuZCBlaXRoZXIgdW5pY2FzdCBvciBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBhbHJlYWR5IGNvbmZpZ3VyZWQgb24gdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoZWNrIGlzIHByb3RlY3RpbmcgYWdhaW5zdC4gSXMgaXQgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IEEgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eT8gQSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvcj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgc29ydCBvZiBjaGVjayBtaWdodCBiZSBjcml0aWNhbCBmb3Igc29tZSBvYnNjdXJlIGNvcm5lciBjYXNlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHR1bi5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgYHR1bi5jYCBhbmQgbmV0d29ya2luZyBkcml2ZXJzLCB0aGlzIGlzIGFuIGFyZWEgd2hlcmUgc3VidGxlIGJ1Z3MgY2FuIGhhdmUgc2VyaW91cyBpbXBsaWNhdGlvbnMuIEJhc2VkIG9uIG15IHJldmlldywgSSdsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MTguMDk2MzA4NzQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzI1OlxcdFxcdGNhc2UgVFVOU0VUR1JPVVA6XFxuMzMyNjpcXHRcXHRcXHQvKiBTZXQgZ3JvdXAgb2YgdGhlIGRldmljZSAqL1xcbjMzMjc6XFx0XFx0XFx0Z3JvdXAgPSBtYWtlX2tnaWQoY3VycmVudF91c2VyX25zKCksIGFyZyk7XFxuMzMyODpcXHRcXHRcXHRpZiAoIWdpZF92YWxpZChncm91cCkpIHtcXG4zMzI5OlxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMzMzMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMzMxOlxcdFxcdFxcdH1cXG4zMzMyOlxcdFxcdFxcdFdSSVRFX09OQ0UodHVuLVxcdTAwM2Vncm91cCwgZ3JvdXApO1xcbjMzMzM6XFx0XFx0XFx0ZG9fbm90aWZ5ID0gdHJ1ZTtcXG4zMzM0OlxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwiZ3JvdXAgc2V0IHRvICV1XFxcXG5cXFwiLFxcbjMzMzU6XFx0XFx0XFx0XFx0ICAgZnJvbV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGdyb3VwKSk7XFxuMzMzNjpcXHRcXHRcXHRicmVhaztcXG4zMzM3OlxcdFxcbjMzMzg6XFx0XFx0Y2FzZSBUVU5TRVRMSU5LOlxcbjMzMzk6XFx0XFx0XFx0LyogT25seSBhbGxvdyBzZXR0aW5nIHRoZSB0eXBlIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duICovXFxuMzM0MDpcXHRcXHRcXHRpZiAodHVuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxuMzM0MTpcXHRcXHRcXHRcXHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXFx1MDAzZWRldixcXG4zMzQyOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJMaW5rdHlwZSBzZXQgZmFpbGVkIGJlY2F1c2UgaW50ZXJmYWNlIGlzIHVwXFxcXG5cXFwiKTtcXG4zMzQzOlxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4zMzQ0OlxcdFxcdFxcdH0gZWxzZSBpZiAodHVuX2dldF9hZGRyX2xlbihhcmcpICE9IHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiBcXHUwMDI2XFx1MDAyNlxcbjMzNDU6XFx0XFx0XFx0XFx0ICAgKCFuZXRkZXZfdWNfZW1wdHkodHVuLVxcdTAwM2VkZXYpIHx8XFxuMzM0NjpcXHRcXHRcXHRcXHQgICAgIW5ldGRldl9tY19lbXB0eSh0dW4tXFx1MDAzZWRldikpKSB7XFxuMzM0NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuMzM0ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjMzNDk6XFx0XFx0XFx0XFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QUkVfVFlQRV9DSEFOR0UsXFxuMzM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHVuLVxcdTAwM2VkZXYpO1xcbjMzNTE6XFx0XFx0XFx0XFx0cmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTtcXG4zMzUyOlxcdFxcdFxcdFxcdGlmIChyZXQpIHtcXG4zMzUzOlxcdFxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LFxcbjMzNTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIlJlZnVzZWQgdG8gY2hhbmdlIGRldmljZSB0eXBlXFxcXG5cXFwiKTtcXG4zMzU1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNTY6XFx0XFx0XFx0XFx0fVxcbjMzNTc6XFx0XFx0XFx0XFx0dHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPSAoaW50KSBhcmc7XFxuMzM1ODpcXHRcXHRcXHRcXHR0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gPSB0dW5fZ2V0X2FkZHJfbGVuKHR1bi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlKTtcXG4zMzU5OlxcdFxcdFxcdFxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwibGlua3R5cGUgc2V0IHRvICVkXFxcXG5cXFwiLFxcbjMzNjA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUpO1xcbjMzNjE6XFx0XFx0XFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFLFxcbjMzNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHR1bi1cXHUwMDNlZGV2KTtcXG4zMzYzOlxcdFxcdFxcdH1cXG4zMzY0OlxcdFxcdFxcdGJyZWFrO1xcbjMzNjU6XFx0XFxuMzM2NjpcXHRcXHRjYXNlIFRVTlNFVERFQlVHOlxcbjMzNjc6XFx0XFx0XFx0dHVuLVxcdTAwM2Vtc2dfZW5hYmxlID0gKHUzMilhcmc7XFxuMzM2ODpcXHRcXHRcXHRicmVhaztcXG4zMzY5OlxcdFxcbjMzNzA6XFx0XFx0Y2FzZSBUVU5TRVRPRkZMT0FEOlxcbjMzNzE6XFx0XFx0XFx0cmV0ID0gc2V0X29mZmxvYWQodHVuLCBhcmcpO1xcbjMzNzI6XFx0XFx0XFx0YnJlYWs7XFxuMzM3MzpcXHRcXG4zMzc0OlxcdFxcdGNhc2UgVFVOU0VUVFhGSUxURVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjE4LjA5NjU0NTg3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTAxOTkxOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdHVuX2dldF9hZGRyX2xlbmAgYW5kIHRoZSBCdWcgRml4KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdHVuX2dldF9hZGRyX2xlbmAgZnVuY3Rpb24gYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgc3BlY2lmaWMgYnVnIGFuZCBpdHMgZml4LiBNeSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGVyZSBpdCdzIHVzZWQgYW5kLCBob3BlZnVsbHksIGNsdWVzIGFib3V0IGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBjb250ZXh0LiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpc3N1ZSB0aGF0J3MgYmVlbiBmbGFnZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoyMi45OTg1NDI3NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjY3OTA2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2dldF9hZGRyX2xlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0zMTMyPXN0YXRpYyBpbnQgdHVuX3NldF9lYnBmKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fcHJvZyBfX3JjdSAqKnByb2dfcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxNTItLyogUmV0dXJuIGNvcnJlY3QgdmFsdWUgZm9yIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiBiYXNlZCBvbiB0dW4tXFx1MDAzZWRldi1cXHUwMDNldHlwZS4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzozMTUzOnN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcXG5kcml2ZXJzL25ldC90dW4uYy0zMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxOTE9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzM0My1cXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuZHJpdmVycy9uZXQvdHVuLmM6MzM0NDpcXHRcXHR9IGVsc2UgaWYgKHR1bl9nZXRfYWRkcl9sZW4oYXJnKSAhPSB0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC90dW4uYy0zMzQ1LVxcdFxcdFxcdCAgICghbmV0ZGV2X3VjX2VtcHR5KHR1bi1cXHUwMDNlZGV2KSB8fFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzM1Ny1cXHRcXHRcXHR0dW4tXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9IChpbnQpIGFyZztcXG5kcml2ZXJzL25ldC90dW4uYzozMzU4OlxcdFxcdFxcdHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbiA9IHR1bl9nZXRfYWRkcl9sZW4odHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNTktXFx0XFx0XFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVxcdTAwM2VkZXYsIFxcXCJsaW5rdHlwZSBzZXQgdG8gJWRcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjI0LjU2NTMzOTAyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTY5MTY3MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdHVuX2dldF9hZGRyX2xlbmAgZnVuY3Rpb24uIEknbSBjdXJpb3VzIGFib3V0IGEgc3BlY2lmaWMgZWRnZSBjYXNlLiAqKkludmVzdGlnYXRpbmcgYHR1bl9nZXRfYWRkcl9sZW5gJ3MgQmVoYXZpb3Igd2l0aCBOb24tRW1wdHkgVUMvTUMgTGlzdHMqKi4gTXkgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyBgYWRkcl9sZW5gIGV2ZW4gd2hlbiB0aGUgdW5pY2FzdCBvciBtdWx0aWNhc3QgbGlzdHMgYXJlbid0IGVtcHR5PyBJdCBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcsIG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCBiZWhhdmlvciwgZGVwZW5kaW5nIG9uIHRoZSBpbnRlbmRlZCBkZXNpZ24uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IGludG8gYGRyaXZlcnMvbmV0L3R1bi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxNTMuIFRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4gcmVzaWRlcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGluIHRoYXQgZnVuY3Rpb24sIGFuZCBob3cgaXQgaGFuZGxlcyB0aG9zZSBsaXN0IGNvbmRpdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0aW9uIGluZmx1ZW5jZXMgdGhlIG92ZXJhbGwgYWRkcmVzcyBsZW5ndGggZGV0ZXJtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjMwLjEzNDUwODUzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE1MDpcXHR9XFxuMzE1MTpcXHRcXG4zMTUyOlxcdC8qIFJldHVybiBjb3JyZWN0IHZhbHVlIGZvciB0dW4tXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4gYmFzZWQgb24gdHVuLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUuICovXFxuMzE1MzpcXHRzdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuMzE1NDpcXHR7XFxuMzE1NTpcXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG4zMTU2OlxcdFxcdGNhc2UgQVJQSFJEX0lQNkdSRTpcXG4zMTU3OlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDY6XFxuMzE1ODpcXHRcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7XFxuMzE1OTpcXHRcXHRjYXNlIEFSUEhSRF9JUEdSRTpcXG4zMTYwOlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDpcXG4zMTYxOlxcdFxcdGNhc2UgQVJQSFJEX1NJVDpcXG4zMTYyOlxcdFxcdFxcdHJldHVybiA0O1xcbjMxNjM6XFx0XFx0Y2FzZSBBUlBIUkRfRVRIRVI6XFxuMzE2NDpcXHRcXHRcXHRyZXR1cm4gRVRIX0FMRU47XFxuMzE2NTpcXHRcXHRjYXNlIEFSUEhSRF9JRUVFODAyMTU0OlxcbjMxNjY6XFx0XFx0Y2FzZSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SOlxcbjMxNjc6XFx0XFx0XFx0cmV0dXJuIElFRUU4MDIxNTRfRVhURU5ERURfQUREUl9MRU47XFxuMzE2ODpcXHRcXHRjYXNlIEFSUEhSRF9QSE9ORVRfUElQRTpcXG4zMTY5OlxcdFxcdGNhc2UgQVJQSFJEX1BQUDpcXG4zMTcwOlxcdFxcdGNhc2UgQVJQSFJEX05PTkU6XFxuMzE3MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMTcyOlxcdFxcdGNhc2UgQVJQSFJEXzZMT1dQQU46XFxuMzE3MzpcXHRcXHRcXHRyZXR1cm4gRVVJNjRfQUREUl9MRU47XFxuMzE3NDpcXHRcXHRjYXNlIEFSUEhSRF9GRERJOlxcbjMxNzU6XFx0XFx0XFx0cmV0dXJuIEZERElfS19BTEVOO1xcbjMxNzY6XFx0XFx0Y2FzZSBBUlBIUkRfSElQUEk6XFxuMzE3NzpcXHRcXHRcXHRyZXR1cm4gSElQUElfQUxFTjtcXG4zMTc4OlxcdFxcdGNhc2UgQVJQSFJEX0lFRUU4MDI6XFxuMzE3OTpcXHRcXHRcXHRyZXR1cm4gRkNfQUxFTjtcXG4zMTgwOlxcdFxcdGNhc2UgQVJQSFJEX1JPU0U6XFxuMzE4MTpcXHRcXHRcXHRyZXR1cm4gUk9TRV9BRERSX0xFTjtcXG4zMTgyOlxcdFxcdGNhc2UgQVJQSFJEX05FVFJPTTpcXG4zMTgzOlxcdFxcdFxcdHJldHVybiBBWDI1X0FERFJfTEVOO1xcbjMxODQ6XFx0XFx0Y2FzZSBBUlBIUkRfTE9DQUxUTEs6XFxuMzE4NTpcXHRcXHRcXHRyZXR1cm4gTFRBTEtfQUxFTjtcXG4zMTg2OlxcdFxcdGRlZmF1bHQ6XFxuMzE4NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMTg4OlxcdFxcdH1cXG4zMTg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MzAuMTM0NzQ4MjY0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MzYwMzI3OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOU0VUTElOSyBCdWcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYFRVTlNFVExJTktgIGNoYW5nZXMgYHR1bi1cdTAwM2VkZXYtXHUwMDNldHlwZWAsIGl0IGFsc28gY2hhbmdlcyBgdHVuLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbmAuIElmIHRoZXJlIGFyZSBleGlzdGluZyB1bmljYXN0IChgZGV2LVx1MDAzZXVjYCkgb3IgbXVsdGljYXN0IChgZGV2LVx1MDAzZW1jYCkgYWRkcmVzc2VzIG9uIHRoZSBkZXZpY2UsIHRoaXMgY2FuIGxlYWQgdG8gc2VyaW91cyBwcm9ibGVtcy4gT3BlcmF0aW9ucyB1c2luZyB0aG9zZSBsaXN0cyAoZmx1c2hpbmcsIGNvbXBhcmluZywgaXRlcmF0aW5nLCBhZGRpbmcvZGVsZXRpbmcpIHRoZW4gdXNlIHRoZSAqbmV3KiBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgYnV0IHRoZSBleGlzdGluZyBlbnRyaWVzIHN0aWxsIGhhdmUgdGhlICpvbGQqIGxlbmd0aC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgaGFzaCB0YWJsZSBtaXNtYXRjaGVzLCBhbmQsIHVsdGltYXRlbHksIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUgY29tbWl0IGhpc3RvcnksIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGRldl91Y2AgYW5kIGBkZXZfbWNgIGludGVyYWN0IHdpdGggYGRldi1cdTAwM2VhZGRyX2xlbmAgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gTG9va2luZyBhdCBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AsIG1ldGhvZHMgbGlrZSBgX19od19hZGRyX2RlbGAgYW5kIGBfX2h3X2FkZHJfYWRkYCBjbGVhcmx5IHVzZSBgYWRkcl9sZW5gIGRlcml2ZWQgZnJvbSBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgY29uZmlybWluZyB0aGUgdnVsbmVyYWJpbGl0eS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHNhbml0eSBjaGVjaywgd2hpY2ggaXMgZ29vZC4gSXQgZG9lcyBzb21ldGhpbmcgbGlrZTogYGVsc2UgaWYgKHR1bl9nZXRfYWRkcl9sZW4oYXJnKSAhPSB0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuIFx1MDAyNlx1MDAyNiAoIW5ldGRldl91Y19lbXB0eSh0dW4tXHUwMDNlZGV2KSB8fCAhbmV0ZGV2X21jX2VtcHR5KHR1bi1cdTAwM2VkZXYpKSkgeyByZXQgPSAtRUJVU1k7IH1gLiBFc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIHRoZSBsZW5ndGggY2hhbmdlIHdoZW4gdGhlIGxpc3RzIGFyZW4ndCBlbXB0eSwgcmV0dXJuaW5nIGFuIGVycm9yLiBUaGF0J3MgYSBzb2xpZCBkZWZlbnNlLlxuXG5Ob3csIGxldCdzIGFuYWx5emUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSAqbmV3KiByaXNrcy4gRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgcmVhZHMgYGFyZ2AsIGB0dW4tXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuYCwgYW5kIGNoZWNrcyBgbmV0ZGV2X3VjX2VtcHR5YCBhbmQgYG5ldGRldl9tY19lbXB0eWAgd2hpY2ggY2hlY2sgaWYgdGhlIGxpc3QgaXMgZW1wdHkgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXVjLmxpc3QpIGV0Yy4pLiBEb2VzIGl0IGNvcHkgYW55dGhpbmcgdG8gdXNlcnNwYWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcz8gTm8uIERvZXMgaXQgbWVzcyB3aXRoIGJvdW5kcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcD8gTm9wZS4gSXQncyBzdHJpY3RseSAqcmVzdHJpY3RpdmUqLlxuXG5HaXZlbiB0aGF0LCB0aGUgYnVnIGlzIGFib3V0ICpwcmV2ZW50aW5nKiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYXJpc2luZyBmcm9tIGxlbmd0aCBtaXNtYXRjaGVzIGluIHRoZSBgbmV0X2RldmljZWAgYWRkcmVzcyBsaXN0cy4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8gY2F0Y2ggdGhpcyB0eXBlIG9mIGlzc3VlLCBzaW5jZSBLQVNBTiBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTGV0IG1lIGZvcm11bGF0ZSB0aGUgYEtNU0FOUmVhc29uaW5nYCB0byBiZSBhcyBjbGVhciBhcyBwb3NzaWJsZS4gVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBfX3R1bl9jaHJfaW9jdGwoKWAgdW5kZXIgYFRVTlNFVExJTktgIHRvIGRpc2FsbG93IGNoYW5naW5nIHRoZSBuZXR3b3JrIGRldmljZSBsaW5rIHR5cGUgKGFuZCB0aGVyZWZvcmUgYGRldi1cdTAwM2VhZGRyX2xlbmApIGlmIHRoZSBkZXZpY2UncyB1bmljYXN0IChgZGV2LVx1MDAzZXVjYCkgb3IgbXVsdGljYXN0IChgZGV2LVx1MDAzZW1jYCkgYWRkcmVzcyBsaXN0cyBhcmUgbm9uLWVtcHR5LiBUaGlzIHByZXZlbnRzIGFkZHJlc3MgbGVuZ3RoIG1pc21hdGNoZXMgaW4gZXhpc3RpbmcgYWRkcmVzcyBsaXN0IGVudHJpZXMsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIG9yIGFkZHJlc3MgbGlzdCBjb3JydXB0aW9uIGR1cmluZyBzdWJzZXF1ZW50IGFkZHJlc3MgbG9va3Vwcy9tb2RpZmljYXRpb25zIChpc3N1ZXMgY292ZXJlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cblxuUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUyOjQ1LjQ5NTA4MDAwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYF9fdHVuX2Nocl9pb2N0bCgpYCBmb3IgdGhlIGBUVU5TRVRMSU5LYCBpb2N0bCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIGl0IHJlamVjdHMgY2hhbmdpbmcgdGhlIGRldmljZSB0eXBlIGlmIHRoZSBuZXcgYWRkcmVzcyBsZW5ndGggKGB0dW5fZ2V0X2FkZHJfbGVuKGFyZylgKSBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgYGRldi1cXHUwMDNlYWRkcl9sZW5gIHdoaWxlIHVuaWNhc3Qgb3IgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgYXJlIG5vbi1lbXB0eS4gXFxuXFxuVGhpcyBjaGFuZ2UgcHJldmVudHMgYWRkcmVzcyBsZW5ndGggbWlzbWF0Y2ggaXNzdWVzIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBvcGVyYXRpbmcgb24gZXhpc3RpbmcgYGRldi1cXHUwMDNldWNgIGFuZCBgZGV2LVxcdTAwM2VtY2AgbGlzdHMgKHdoaWNoIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBfX3R1bl9jaHJfaW9jdGwoKWAgZm9yIHRoZSBgVFVOU0VUTElOS2AgaW9jdGwgY29tbWFuZC4gU3BlY2lmaWNhbGx5LCBpdCByZWplY3RzIGNoYW5naW5nIHRoZSBkZXZpY2UgdHlwZSBpZiB0aGUgbmV3IGFkZHJlc3MgbGVuZ3RoIChgdHVuX2dldF9hZGRyX2xlbihhcmcpYCkgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGBkZXYtXFx1MDAzZWFkZHJfbGVuYCB3aGlsZSB1bmljYXN0IG9yIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIGFyZSBub24tZW1wdHkuIFxcblxcblRoaXMgY2hhbmdlIHByZXZlbnRzIGFkZHJlc3MgbGVuZ3RoIG1pc21hdGNoIGlzc3VlcyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gb3BlcmF0aW5nIG9uIGV4aXN0aW5nIGBkZXYtXFx1MDAzZXVjYCBhbmQgYGRldi1cXHUwMDNlbWNgIGxpc3RzICh3aGljaCBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[1] Phase: Succeeded StartedAt: 2026-08-29 10:52:56 +0000 UTC FinishedAt: 2026-08-29 10:52:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 10:52:56 +0000 UTC FinishedAt: 2026-08-29 10:52:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2] Phase: Succeeded StartedAt: 2026-08-29 10:52:56 +0000 UTC FinishedAt: 2026-08-29 14:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 10:52:56 +0000 UTC FinishedAt: 2026-08-29 14:33:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 10:52:56 +0000 UTC FinishedAt: 2026-08-29 10:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 10:52:56 +0000 UTC FinishedAt: 2026-08-29 10:53:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-workflow852fd/series-workflow852fd-convert-artifact-1235277663/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 10:53:07 +0000 UTC FinishedAt: 2026-08-29 11:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 10:53:07 +0000 UTC FinishedAt: 2026-08-29 11:09:09 +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:*5463b448-27ac-499c-8609-44d64f52f28e,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-workflow852fd/series-workflow852fd-convert-artifact-1235277663/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": "b73954e4-fe73-4300-a205-d82b7f58e2e4", "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-workflow852fd/series-workflow852fd-build-action-3602103397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 10:53:07 +0000 UTC FinishedAt: 2026-08-29 11:08:59 +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:*5463b448-27ac-499c-8609-44d64f52f28e,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-workflow852fd/series-workflow852fd-convert-artifact-1235277663/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": "b73954e4-fe73-4300-a205-d82b7f58e2e4", "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-workflow852fd/series-workflow852fd-build-action-3602103397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:09:09 +0000 UTC FinishedAt: 2026-08-29 11:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:09:09 +0000 UTC FinishedAt: 2026-08-29 11:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:09:09 +0000 UTC FinishedAt: 2026-08-29 11:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:09:09 +0000 UTC FinishedAt: 2026-08-29 11:09:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-workflow852fd/series-workflow852fd-convert-artifact-1280521710/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:09:19 +0000 UTC FinishedAt: 2026-08-29 11:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:09:19 +0000 UTC FinishedAt: 2026-08-29 11:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b73954e4-fe73-4300-a205-d82b7f58e2e4,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-workflow852fd/series-workflow852fd-build-action-3602103397/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-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:11:14 +0000 UTC FinishedAt: 2026-08-29 11:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:11:14 +0000 UTC FinishedAt: 2026-08-29 11:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:11:14 +0000 UTC FinishedAt: 2026-08-29 11:27:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:11:14 +0000 UTC FinishedAt: 2026-08-29 11:27:44 +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:*5463b448-27ac-499c-8609-44d64f52f28e,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-workflow852fd/series-workflow852fd-convert-artifact-1280521710/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": "90268e9f-17c9-4d7c-9792-7700a60339b5", "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-workflow852fd/series-workflow852fd-build-action-1115490050/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:11:14 +0000 UTC FinishedAt: 2026-08-29 11:27:34 +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:*5463b448-27ac-499c-8609-44d64f52f28e,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-workflow852fd/series-workflow852fd-convert-artifact-1280521710/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": "90268e9f-17c9-4d7c-9792-7700a60339b5", "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-workflow852fd/series-workflow852fd-build-action-1115490050/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:27:44 +0000 UTC FinishedAt: 2026-08-29 11:27:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:27:44 +0000 UTC FinishedAt: 2026-08-29 11:27:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:27:44 +0000 UTC FinishedAt: 2026-08-29 11:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:27:44 +0000 UTC FinishedAt: 2026-08-29 11:29:27 +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:*90268e9f-17c9-4d7c-9792-7700a60339b5,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-workflow852fd/series-workflow852fd-build-action-1115490050/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-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:37 +0000 UTC FinishedAt: 2026-08-29 14:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:37 +0000 UTC FinishedAt: 2026-08-29 14:33:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"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:*b73954e4-fe73-4300-a205-d82b7f58e2e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90268e9f-17c9-4d7c-9792-7700a60339b5,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-workflow852fd/series-workflow852fd-build-action-3602103397/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-workflow852fd/series-workflow852fd-build-action-1115490050/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:37 +0000 UTC FinishedAt: 2026-08-29 11:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:37 +0000 UTC FinishedAt: 2026-08-29 11:29:42 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"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-workflow852fd/series-workflow852fd-convert-artifact-2878941331/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:37 +0000 UTC FinishedAt: 2026-08-29 11:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:37 +0000 UTC FinishedAt: 2026-08-29 11:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:37 +0000 UTC FinishedAt: 2026-08-29 11:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:48 +0000 UTC FinishedAt: 2026-08-29 14:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow852fd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_chr_ioctl","__tun_chr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","INET"],"series_id":"0f0d7907-660f-4af4-b80e-f7f3e5452bcf","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-29 11:29:48 +0000 UTC FinishedAt: 2026-08-29 14:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b73954e4-fe73-4300-a205-d82b7f58e2e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90268e9f-17c9-4d7c-9792-7700a60339b5,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-workflow852fd/series-workflow852fd-build-action-3602103397/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-workflow852fd/series-workflow852fd-build-action-1115490050/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-workflow852fd/series-workflow852fd-convert-artifact-2878941331/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,}