Name: series-workflowcn5hp Phase: Succeeded StartedAt: 2026-07-29 14:41:21 +0000 UTC FinishedAt: 2026-07-29 18:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[0] Phase: Succeeded StartedAt: 2026-07-29 14:41:21 +0000 UTC FinishedAt: 2026-07-29 15:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 14:41:21 +0000 UTC FinishedAt: 2026-07-29 15:07:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "TLS", "TLS_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "TLS", "TLS_DEVICE" ], "series_id": "424efba7-fa9a-474b-9760-7ed353c70dd0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_do_tls", "nsim_tls_init", "nsim_tls_teardown" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZG9fdGxzJiMzNDssCiAgICAmIzM0O25zaW1fdGxzX2luaXQmIzM0OywKICAgICYjMzQ7bnNpbV90bHNfdGVhcmRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGZvciB0ZXN0aW5nIFRMUyBoYXJkd2FyZSBvZmZsb2FkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIG5ldGRldnNpbSBpcyB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWY2ZDAzN2I4MjlhZTZkNzQxMTkxOTBhMjE4NmI4NGU1NGU1YTg2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjA2OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnXG5pbmRleCBmZjc5YzQ2NjcxMmRmLi5jYjRkNGJiODdhZmMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvS2NvbmZpZ1xuQEAgLTYwNyw2ICYjNDM7NjA3LDcgQEAgY29uZmlnIE5FVERFVlNJTVxuIFx0ZGVwZW5kcyBvbiBJTkVUXG4gXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4mIzQzO1x0ZGVwZW5kcyBvbiBUTFMgfHwgVExTPW5cbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFBBR0VfUE9PTFxuIFx0c2VsZWN0IE5FVF9TSEFQRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcbmluZGV4IDg3NzE4MjA0ZmI0ZGUuLmM3Zjc2MjEzMjNiMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuQEAgLTI1LDMgJiM0MzsyNSw3IEBAIGVuZGlmXG4gaWZuZXEgKCQoQ09ORklHX01BQ1NFQyksKVxuIG5ldGRldnNpbS1vYmpzICYjNDM7PSBtYWNzZWMub1xuIGVuZGlmXG4mIzQzO1xuJiM0MztpZm5lcSAoJChDT05GSUdfVExTX0RFVklDRSksKVxuJiM0MztuZXRkZXZzaW0tb2JqcyAmIzQzOz0gdGxzLm9cbiYjNDM7ZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjhkYzBiMGE3ZDFhMTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTE1MSw2ICYjNDM7MTUxLDggQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKGRyKVxuIFx0XHRnb3RvIG91dF9kcm9wX2ZyZWU7XG4gXG4mIzQzO1x0bnNpbV9kb190bHMoc2tiLCBucywgcGVlcl9ucyk7XG4mIzQzO1xuIFx0cnhxID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRpZiAocnhxIFx1MDAzZT0gcGVlcl9kZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcylcbiBcdFx0cnhxID0gcnhxICUgcGVlcl9kZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcztcbkBAIC0xMDY2LDYgJiM0MzsxMDY4LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFxuIFx0bnNpbV9tYWNzZWNfaW5pdChucyk7XG4gXHRuc2ltX2lwc2VjX2luaXQobnMpO1xuJiM0MztcdG5zaW1fdGxzX2luaXQobnMpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVx1MDAzZW5ldGRldik7XG4gXHRpZiAoZXJyKVxuQEAgLTEwOTMsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5zLVx1MDAzZXBlZXIsIE5VTEwpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbiBlcnJfaXBzZWNfdGVhcmRvd246XG4mIzQzO1x0bnNpbV90bHNfdGVhcmRvd24obnMpO1xuIFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX21hY3NlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX2JwZl91bmluaXQobnMpO1xuQEAgLTExOTUsNiAmIzQzOzExOTksNyBAQCB2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdFJDVV9JTklUX1BPSU5URVIobnMtXHUwMDNlcGVlciwgTlVMTCk7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnMtXHUwMDNlbnNpbV9kZXZfcG9ydCkpIHtcbiYjNDM7XHRcdG5zaW1fdGxzX3RlYXJkb3duKG5zKTtcbiBcdFx0bnNpbV9tYWNzZWNfdGVhcmRvd24obnMpO1xuIFx0XHRuc2ltX2lwc2VjX3RlYXJkb3duKG5zKTtcbiBcdFx0bnNpbV9icGZfdW5pbml0KG5zKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmggYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjU4MmE3NmFjZTlkMzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuQEAgLTU2LDYgJiM0Mzs1NiwyMCBAQCBzdHJ1Y3QgbnNpbV9pcHNlYyB7XG4gXHR1MzIgdHg7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG5zaW1fdGxzIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGNvbm5zO1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcdC8qIHByb3RlY3RzIGNvbm5zIGFuZCB0aGUgY291bnRlcnMgYmVsb3cgKi9cbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpkZmlsZTtcbiYjNDM7XHR1MzIgY291bnQ7XG4mIzQzO1x0dTMyIHR4X2Nvbm47XG4mIzQzO1x0dTMyIHJ4X2Nvbm47XG4mIzQzO1x0YXRvbWljNjRfdCB0eF9wYWNrZXRzO1xuJiM0MztcdGF0b21pYzY0X3QgdHhfYnl0ZXM7XG4mIzQzO1x0YXRvbWljNjRfdCByeF9wYWNrZXRzO1xuJiM0MztcdGF0b21pYzY0X3QgcnhfYnl0ZXM7XG4mIzQzO1x0YXRvbWljNjRfdCByZXN5bmNzO1xuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIE5TSU1fTUFDU0VDX01BWF9TRUNZX0NPVU5UIDNcbiAjZGVmaW5lIE5TSU1fTUFDU0VDX01BWF9SWFNDX0NPVU5UIDFcbiBzdHJ1Y3QgbnNpbV9yeHNjIHtcbkBAIC0xNDEsNiAmIzQzOzE1NSw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xuIFx0Ym9vbCBicGZfbWFwX2FjY2VwdDtcbiBcdHN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjO1xuIFx0c3RydWN0IG5zaW1fbWFjc2VjIG1hY3NlYztcbiYjNDM7XHRzdHJ1Y3QgbnNpbV90bHMgdGxzO1xuIFx0c3RydWN0IG5zaW1fdmxhbiB2bGFuO1xuIFx0c3RydWN0IHtcbiBcdFx0dTMyIGluamVjdF9lcnJvcjtcbkBAIC00MzUsNiAmIzQzOzQ1MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuJiM0Mzt2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuJiM0Mzt2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbiYjNDM7dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiYjNDM7XHRcdCBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbiB2b2lkIG5zaW1fbWFjc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuIHZvaWQgbnNpbV9tYWNzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2OTVmMmUyYmViODBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY1xuQEAgLTAsMCAmIzQzOzEsNDE4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC90bHMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0ZGV2c2ltLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIEVtdWxhdGVkIGtUTFMgb2ZmbG9hZC4gIE5vIGNyeXB0byBpcyBwZXJmb3JtZWQsIHNvIHRoaXMgaXMgb25seSBzZWxmXG4mIzQzOyAqIGNvbnNpc3RlbnQgYmV0d2VlbiB0d28gbmV0ZGV2c2ltIHBvcnRzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNJTV9UTFNfTUFYX0NPTk5cdDMyXG4mIzQzO1xuJiM0MzsvKiBuZXRkZXZfZml4X2ZlYXR1cmVzKCkgZHJvcHMgTkVUSUZfRl9IV19UTFNfUlggdW5sZXNzIHRoZSBkZXZpY2UgYWxzbyBkb2VzXG4mIzQzOyAqIFJYIGNoZWNrc3Vtcywgd2hpY2ggZXZlcnkgb2ZmbG9hZCBjYXBhYmxlIE5JQyBkb2VzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBOU0lNX1RMU19GRUFUVVJFU1x0KE5FVElGX0ZfSFdfVExTX1RYIHwgTkVUSUZfRl9IV19UTFNfUlggfCBcXFxuJiM0MztcdFx0XHRcdCBORVRJRl9GX1JYQ1NVTSlcbiYjNDM7XG4mIzQzO3N0cnVjdCBuc2ltX3Rsc19jb25uIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiYjNDM7XG4mIzQzO1x0LyogSWRlbnRpdHkgYXMgc2VlbiBvbiB0aGUgd2lyZSwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgcG9ydFxuJiM0MztcdCAqIHRoZSBvZmZsb2FkIHdhcyBpbnN0YWxsZWQgb246IGwqIGlzIHRoaXMgc2lkZSwgciogaXMgdGhlIHBlZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9hZGRyIGxhZGRyO1xuJiM0MztcdHN0cnVjdCBpbjZfYWRkciByYWRkcjtcbiYjNDM7XHRfX2JlMTYgbHBvcnQ7XG4mIzQzO1x0X19iZTE2IHJwb3J0O1xuJiM0MztcdHUxNiBmYW1pbHk7XG4mIzQzO1xuJiM0MztcdGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXI7XG4mIzQzO1x0dTMyIHN0YXJ0X3NuO1xuJiM0MztcdHUxNiBjaXBoZXJfdHlwZTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbnNpbV90bHNfdHVwbGUge1xuJiM0MztcdHN0cnVjdCBpbjZfYWRkciBzYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7XG4mIzQzO1x0X19iZTE2IHNwb3J0O1xuJiM0MztcdF9fYmUxNiBkcG9ydDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5zaW1fdGxzX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZ0LVx1MDAzZXNhZGRyKTtcbiYjNDM7XHRcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLVx1MDAzZWRhZGRyLCBcdTAwMjZ0LVx1MDAzZWRhZGRyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwNmgtXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0dC1cdTAwM2VzYWRkciA9IGlwNmgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0XHR0LVx1MDAzZWRhZGRyID0gaXA2aC1cdTAwM2VkYWRkcjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dGggPSB0Y3BfaGRyKHNrYik7XG4mIzQzO1x0dC1cdTAwM2VzcG9ydCA9IHRoLVx1MDAzZXNvdXJjZTtcbiYjNDM7XHR0LVx1MDAzZWRwb3J0ID0gdGgtXHUwMDNlZGVzdDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE9uIFJYIHRoZXJlIGlzIG5vIHNvY2tldCB0byBsb29rIGF0IHlldCwgc28gbWF0Y2ggdGhlIHR1cGxlIGluc3RhbGxlZCBhdFxuJiM0MzsgKiAtXHUwMDNldGxzX2Rldl9hZGQoKSB0aW1lLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzLiAgVGhlIHBhY2tldCBpc1xuJiM0MzsgKiBhcnJpdmluZywgc28gdGhlIHBlZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXMgaXRzIHNvdXJjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjb25uLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpXG4mIzQzO1x0XHRpZiAoY29ubi1cdTAwM2VkaXIgPT0gVExTX09GRkxPQURfQ1RYX0RJUl9SWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjb25uLVx1MDAzZWxwb3J0ID09IHQtXHUwMDNlZHBvcnQgXHUwMDI2XHUwMDI2IGNvbm4tXHUwMDNlcnBvcnQgPT0gdC1cdTAwM2VzcG9ydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Y29ubi1cdTAwM2VsYWRkciwgXHUwMDI2dC1cdTAwM2VkYWRkcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmNvbm4tXHUwMDNlcmFkZHIsIFx1MDAyNnQtXHUwMDNlc2FkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc3RhY2sgbGVhdmVzIGEgdGFnIHNpemVkIHBsYWNlaG9sZGVyIGF0IHRoZSBlbmQgb2YgZXZlcnkgcmVjb3JkIGZvclxuJiM0MzsgKiB0aGUgZGV2aWNlIHRvIHdyaXRlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgaW50by4gIFdlIGRvIG5vdCBlbmNyeXB0LCBzb1xuJiM0MzsgKiBub3RoaW5nIGV2ZXIgZmlsbHMgaXQgaW4sIGFuZCBpdCBjb21lcyBmcm9tIGEgcGFnZSBmcmFnIHRoYXQgd2FzIG5ldmVyXG4mIzQzOyAqIHplcm9lZCAtIGNsZWFyIGl0IHJhdGhlciB0aGFuIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb250byB0aGUgd2lyZS5cbiYjNDM7ICpcbiYjNDM7ICogdGxzX2FwcGVuZF9mcmFnKCkgZWl0aGVyIGdyb3dzIHRoZSBsYXN0IGZyYWcgb3IgYWRkcyBvbmUsIHNvIHRoZSB0YWcgaXNcbiYjNDM7ICogYWx3YXlzIHRoZSB0YWlsIG9mIHRoZSByZWNvcmQmIzM5O3MgbGFzdCBmcmFnLiAgQ2xlYXJpbmcgaXQgdGhlcmUgcmF0aGVyIHRoYW5cbiYjNDM7ICogaW4gdGhlIHNrYiBjb3ZlcnMgZXZlcnkgc2VnbWVudCB0aGUgcmVjb3JkIHdhcyBzcGxpdCBpbnRvLCBhbmQgYW55XG4mIzQzOyAqIHJldHJhbnNtaXQgb2YgdGhlbSwgc2luY2UgdGhleSBhbGwgc2hhcmUgdGhlc2UgcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc190eF96ZXJvX3RhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2tiLVx1MDAzZXNrKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqdHhfY3R4O1xuJiM0MztcdHUzMiBzZXEsIGVuZCwgdGFnX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2ZmO1xuJiM0MztcbiYjNDM7XHRvZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IF9fdGNwX2hkcmxlbih0aCk7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2U9IHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRhZ19zaXplID0gY3R4LVx1MDAzZXByb3RfaW5mby50YWdfc2l6ZTtcbiYjNDM7XHRzZXEgPSBudG9obCh0aC1cdTAwM2VzZXEpO1xuJiM0MztcdGVuZCA9IHNlcSAmIzQzOyBza2ItXHUwMDNlbGVuIC0gb2ZmO1xuJiM0MztcdHR4X2N0eCA9IHRsc19vZmZsb2FkX2N0eF90eChjdHgpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eF9jdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdHdoaWxlIChiZWZvcmUoc2VxLCBlbmQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XG4mIzQzO1x0XHRza2JfZnJhZ190ICpmcmFnO1xuJiM0MztcdFx0dTY0IHJjZF9zbjtcbiYjNDM7XG4mIzQzO1x0XHRyZWNvcmQgPSB0bHNfZ2V0X3JlY29yZCh0eF9jdHgsIHNlcSwgXHUwMDI2cmNkX3NuKTtcbiYjNDM7XHRcdGlmICghcmVjb3JkIHx8IHRsc19yZWNvcmRfaXNfc3RhcnRfbWFya2VyKHJlY29yZCkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGZyYWcgPSBcdTAwMjZyZWNvcmQtXHUwMDNlZnJhZ3NbcmVjb3JkLVx1MDAzZW51bV9mcmFncyAtIDFdO1xuJiM0MztcdFx0bWVtc2V0KHNrYl9mcmFnX2FkZHJlc3MoZnJhZykgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShmcmFnKSAtIHRhZ19zaXplLFxuJiM0MztcdFx0ICAgICAgIDAsIHRhZ19zaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRzZXEgPSByZWNvcmQtXHUwMDNlZW5kX3NlcTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9jdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBlbmNyeXB0aW9uIHRoZSBoYXJkd2FyZSB3b3VsZCBkbyBvbiB0aGUgd2F5IG91dC5cbiYjNDM7ICogVGhlIHN0YWNrIGhhcyBhbHJlYWR5IGZyYW1lZCB0aGUgcmVjb3JkIGFuZCB3ZSBkbyBub3QgZW5jcnlwdCwgc28gdGhlIHRhZ1xuJiM0MzsgKiBpcyBhbGwgdGhhdCBpcyBsZWZ0IHRvIGRlYWwgd2l0aC4gIFRoZSBzb2NrZXQgaXMgcmlnaHQgaGVyZSwgc28gaWRlbnRpZnlcbiYjNDM7ICogdGhlIGNvbm5lY3Rpb24gdGhlIHdheSB0aGUgcmVhbCBkcml2ZXJzIGRvLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRuc2ltX3Rsc190eF96ZXJvX3RhZ3Moc2tiKTtcbiYjNDM7XHRhdG9taWM2NF9pbmMoXHUwMDI2bnMtXHUwMDNldGxzLnR4X3BhY2tldHMpO1xuJiM0MztcdGF0b21pYzY0X2FkZChza2ItXHUwMDNlbGVuLCBcdTAwMjZucy1cdTAwM2V0bHMudHhfYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBkZWNyeXB0aW9uIHRoZSBwZWVyJiMzOTtzIGhhcmR3YXJlIHdvdWxkIGRvLCBzaW5jZSB3ZVxuJiM0MzsgKiBhcmUgYWJvdXQgdG8gaGFuZCB0aGUgc2tiIHRvIGl0cyBzdGFjay4gIFdlIGRvIG5vdCBkZWNyeXB0IGVpdGhlciwgc28gYWxsXG4mIzQzOyAqIHRoYXQgaXMgbmVlZGVkIGlzIHRoZSBmbGFnIHRoYXQgdGVsbHMgdGhlIGtUTFMgY29yZSB0aGUgcGF5bG9hZCBpc1xuJiM0MzsgKiBhbHJlYWR5IHBsYWludGV4dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG5zaW1fdGxzX3J4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5zaW1fdGxzX3R1cGxlIHQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghbnNpbV90bHNfcGFyc2Uoc2tiLCBcdTAwMjZ0KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuc2ltX3Rsc19yeF9vZmZsb2FkZWQobnMsIFx1MDAyNnQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbiYjNDM7XHRhdG9taWM2NF9pbmMoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X3BhY2tldHMpO1xuJiM0MztcdGF0b21pYzY0X2FkZChza2ItXHUwMDNlbGVuLCBcdTAwMjZucy1cdTAwM2V0bHMucnhfYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBuZXRkZXZzaW0gaGFzIG5vIHdpcmU6IG5zaW1fc3RhcnRfeG1pdCgpIGhhbmRzIHRoZSBza2Igc3RyYWlnaHQgdG8gdGhlXG4mIzQzOyAqIHBlZXImIzM5O3MgcmVjZWl2ZSBwYXRoLCBzbyB0aGlzIG9uZSBjYWxsIHNpdGUgc3RhbmRzIGluIGZvciB0aGUgaGFyZHdhcmUgb2ZcbiYjNDM7ICogYm90aCBwb3J0cy4gIEl0IGhhcyB0byBydW4gYmVmb3JlIG5zaW1fZm9yd2FyZF9za2IoKSBtb3ZlcyB0aGUgc2tiIG92ZXIsXG4mIzQzOyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG4mIzQzO1x0XHQgc3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucylcbiYjNDM7e1xuJiM0MztcdC8qIG5zaW1fZG9fcHNwKCkgcmFuIGZpcnN0IGFuZCBtYXkgaGF2ZSB3cmFwcGVkIHRoZSByZWNvcmQgc3RyZWFtLCBzb1xuJiM0MztcdCAqIHRoaXMgaXMgbm8gbG9uZ2VyIGEgcGxhaW4gVExTIG92ZXIgVENQIHBhY2tldC4gIE5vIE5JQyBjaGFpbnMgdGhlXG4mIzQzO1x0ICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bnNpbV90bHNfdHgobnMsIHNrYik7XG4mIzQzO1x0bnNpbV90bHNfcngocGVlcl9ucywgc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuc2ltX3Rsc19kZXZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0ICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24sXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbiYjNDM7XHRcdFx0ICAgIHUzMiBzdGFydF9vZmZsb2FkX3RjcF9zbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogTWlycm9yIHRoZSBjaXBoZXIgc3VwcG9ydCBvZiBhIHR5cGljYWwgb2ZmbG9hZCBjYXBhYmxlIE5JQy4gKi9cbiYjNDM7XHRzd2l0Y2ggKGNyeXB0b19pbmZvLVx1MDAzZWNpcGhlcl90eXBlKSB7XG4mIzQzO1x0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4OlxuJiM0MztcdGNhc2UgVExTX0NJUEhFUl9BRVNfR0NNXzI1NjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjb25uID0ga3phbGxvY19vYmooKmNvbm4pO1xuJiM0MztcdGlmICghY29ubilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRjb25uLVx1MDAzZWxhZGRyID0gc2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyO1xuJiM0MztcdFx0Y29ubi1cdTAwM2VyYWRkciA9IHNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVx1MDAzZXNrX3Jjdl9zYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VsYWRkcik7XG4mIzQzO1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVx1MDAzZXNrX2RhZGRyLCBcdTAwMjZjb25uLVx1MDAzZXJhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29ubi1cdTAwM2VmYW1pbHkgPSBzay1cdTAwM2Vza19mYW1pbHk7XG4mIzQzO1x0Y29ubi1cdTAwM2VscG9ydCA9IGh0b25zKGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtKTtcbiYjNDM7XHRjb25uLVx1MDAzZXJwb3J0ID0gc2stXHUwMDNlc2tfZHBvcnQ7XG4mIzQzO1x0Y29ubi1cdTAwM2VkaXIgPSBkaXJlY3Rpb247XG4mIzQzO1x0Y29ubi1cdTAwM2VzdGFydF9zbiA9IHN0YXJ0X29mZmxvYWRfdGNwX3NuO1xuJiM0MztcdGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUgPSBjcnlwdG9faW5mby1cdTAwM2VjaXBoZXJfdHlwZTtcbiYjNDM7XHRjb25uLVx1MDAzZXRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1x0aWYgKG5zLVx1MDAzZXRscy5jb3VudCBcdTAwM2U9IE5TSU1fVExTX01BWF9DT05OKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QsIFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucyk7XG4mIzQzO1x0bnMtXHUwMDNldGxzLmNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG4mIzQzO1x0XHRucy1cdTAwM2V0bHMudHhfY29ubiYjNDM7JiM0Mzs7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bnMtXHUwMDNldGxzLnJ4X2Nvbm4mIzQzOyYjNDM7O1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtmcmVlKGNvbm4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc19kZXZfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuJiM0MztcdFx0XHQgICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbiYjNDM7XHRcdGlmIChjb25uLVx1MDAzZXRsc19jdHggIT0gdGxzX2N0eCB8fCBjb25uLVx1MDAzZWRpciAhPSBkaXJlY3Rpb24pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0bnMtXHUwMDNldGxzLmNvdW50LS07XG4mIzQzO1x0XHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG4mIzQzO1x0XHRcdG5zLVx1MDAzZXRscy50eF9jb25uLS07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG5zLVx1MDAzZXRscy5yeF9jb25uLS07XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1xuJiM0MztcdFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1RMUyAlcyBjb250ZXh0IG5vdCBmb3VuZCBvbiBkZWxcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/IFwmIzM0O3R4XCYjMzQ7IDogXCYjMzQ7cnhcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBOb3RoaW5nIGlzIGV2ZXIgb3V0IG9mIHN5bmMgaGVyZTogdGhlIGVtdWxhdGlvbiBkb2VzIG5vdCBkZWNyeXB0LCBzbyBpdFxuJiM0MzsgKiBuZXZlciBsb3NlcyB0aGUgcmVjb3JkIGJvdW5kYXJpZXMgYW5kIG5ldmVyIGFza3MgZm9yIGEgcmVzeW5jLiAgVGhlIGNvcmVcbiYjNDM7ICogY2FuIHN0aWxsIGNhbGwgaW4gb24gdGhlIFJYIHBhdGgsIHNvIGFjY291bnQgZm9yIGl0IGFuZCBtb3ZlIG9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBuc2ltX3Rsc19kZXZfcmVzeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0ICAgICAgIHUzMiBzZXEsIHU4ICpyY2Rfc24sXG4mIzQzO1x0XHRcdCAgICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRhdG9taWM2NF9pbmMoXHUwMDI2bnMtXHUwMDNldGxzLnJlc3luY3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcbiYjNDM7XHQudGxzX2Rldl9hZGRcdD0gbnNpbV90bHNfZGV2X2FkZCxcbiYjNDM7XHQudGxzX2Rldl9kZWxcdD0gbnNpbV90bHNfZGV2X2RlbCxcbiYjNDM7XHQudGxzX2Rldl9yZXN5bmNcdD0gbnNpbV90bHNfZGV2X3Jlc3luYyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG5zaW1fdGxzX2RiZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuJiM0MztcdFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XG4mIzQzO1x0c2l6ZV90IGJ1ZnNpemU7XG4mIzQzO1x0Y2hhciAqYnVmLCAqcDtcbiYjNDM7XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHQvKiBUd28gZnVsbCBJUHY2IGFkZHJlc3NlcyBhbmQgcG9ydHMgZml0IGluIDE2MCBieXRlcyBhIGxpbmUuICovXG4mIzQzO1x0YnVmc2l6ZSA9IChOU0lNX1RMU19NQVhfQ09OTiAqIDE2MCkgJiM0MzsgMjAwO1xuJiM0MztcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFidWYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cCA9IGJ1ZjtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtjb25uIGNvdW50PSV1IHR4PSV1IHJ4PSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5zLVx1MDAzZXRscy5jb3VudCwgbnMtXHUwMDNldGxzLnR4X2Nvbm4sIG5zLVx1MDAzZXRscy5yeF9jb25uKTtcbiYjNDM7XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDt0eF9wYWNrZXRzPSVsbHUgdHhfYnl0ZXM9JWxsdSByeF9wYWNrZXRzPSVsbHUgcnhfYnl0ZXM9JWxsdSByZXN5bmNzPSVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgYXRvbWljNjRfcmVhZChcdTAwMjZucy1cdTAwM2V0bHMudHhfcGFja2V0cyksXG4mIzQzO1x0XHQgICAgICAgYXRvbWljNjRfcmVhZChcdTAwMjZucy1cdTAwM2V0bHMudHhfYnl0ZXMpLFxuJiM0MztcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X3BhY2tldHMpLFxuJiM0MztcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X2J5dGVzKSxcbiYjNDM7XHRcdCAgICAgICBhdG9taWM2NF9yZWFkKFx1MDAyNm5zLVx1MDAzZXRscy5yZXN5bmNzKSk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAoY29ubi1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4mIzQzO1x0XHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslcyBbJXBJNmNdOiV1IC1cdTAwM2UgWyVwSTZjXToldSBjaXBoZXI9JXUgc249JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggP1xuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDt0eFwmIzM0OyA6IFwmIzM0O3J4XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZWxhZGRyLCBudG9ocyhjb25uLVx1MDAzZWxwb3J0KSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2Y29ubi1cdTAwM2VyYWRkciwgbnRvaHMoY29ubi1cdTAwM2VycG9ydCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXHUwMDNlc3RhcnRfc24pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXMgJXBJNDoldSAtXHUwMDNlICVwSTQ6JXUgY2lwaGVyPSV1IHNuPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25uLVx1MDAzZWRpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYID9cbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7dHhcJiMzNDsgOiBcJiMzNDtyeFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2Y29ubi1cdTAwM2VsYWRkci5zNl9hZGRyMzJbM10sXG4mIzQzO1x0XHRcdFx0ICAgICAgIG50b2hzKGNvbm4tXHUwMDNlbHBvcnQpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZXJhZGRyLnM2X2FkZHIzMlszXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgbnRvaHMoY29ubi1cdTAwM2VycG9ydCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXHUwMDNlc3RhcnRfc24pO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fdGxzX2RiZ19mb3BzID0ge1xuJiM0MztcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4mIzQzO1x0LnJlYWQgPSBuc2ltX3Rsc19kYmdfcmVhZCxcbiYjNDM7XHQubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssXG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4mIzQzO3tcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZXRsc2Rldl9vcHMgPSBcdTAwMjZuc2ltX3Rsc2Rldl9vcHM7XG4mIzQzO1x0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xuJiM0MztcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcbiYjNDM7XG4mIzQzO1x0bnMtXHUwMDNldGxzLmRmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0bHNcJiMzNDssIDA0MDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgbnMtXHUwMDNlbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLCBucyxcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZuc2ltX3Rsc19kYmdfZm9wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubiwgKnRtcDtcbiYjNDM7XHR1MzIgbGVmdDtcbiYjNDM7XG4mIzQzO1x0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVx1MDAzZXRscy5kZmlsZSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1x0bGVmdCA9IG5zLVx1MDAzZXRscy5jb3VudDtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgdG1wLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbiYjNDM7XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XG4mIzQzO1x0fVxuJiM0MztcdG5zLVx1MDAzZXRscy5jb3VudCA9IDA7XG4mIzQzO1x0bnMtXHUwMDNldGxzLnR4X2Nvbm4gPSAwO1xuJiM0MztcdG5zLVx1MDAzZXRscy5yeF9jb25uID0gMDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChsZWZ0KVxuJiM0MztcdFx0bmV0ZGV2X2Vycihucy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O3RlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGxlZnQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlXG5AQCAtMCwwICYjNDM7MSwyIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0Mzt0bHNfb2ZmbG9hZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuaW5kZXggOTgwOGMyZmJhZTllOC4uNWJlYjRlZDY0ZWI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXG5AQCAtMSw1ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7IE9SIE1JVFxuIFxuJiM0MztDRkxBR1MgJiM0Mzs9ICQoS0hEUl9JTkNMVURFUylcbiYjNDM7XG4gVEVTVF9QUk9HUyA6PSBcXFxuIFx0ZGV2bGluay5zaCBcXFxuIFx0ZGV2bGlua19pbl9uZXRucy5zaCBcXFxuQEAgLTE1LDkgJiM0MzsxNywxNCBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRwZWVyLnNoIFxcXG4gXHRwc2FtcGxlLnNoIFxcXG4gXHR0Yy1tcS12aXNpYmlsaXR5LnNoIFxcXG4mIzQzO1x0dGxzLnNoIFxcXG4gXHR1ZHBfdHVubmVsX25pYy5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiYjNDM7VEVTVF9HRU5fRklMRVMgOj0gXFxcbiYjNDM7XHR0bHNfb2ZmbG9hZFxuJiM0MzsjIGVuZCBvZiBURVNUX0dFTl9GSUxFU1xuJiM0MztcbiBURVNUX0ZJTEVTIDo9IFxcXG4gXHRldGh0b29sLWNvbW1vbi5zaFxuICMgZW5kIG9mIFRFU1RfRklMRVNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM5OWUyYzRkMzgyZGZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2hcbkBAIC0wLDAgJiM0MzsxLDI3MSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIEV4ZXJjaXNlIG5ldGRldnNpbSYjMzk7cyBlbXVsYXRlZCBrVExTIGRldmljZSBvZmZsb2FkIG92ZXIgYSBsaW5rZWRcbiYjNDM7IyBuZXRkZXZzaW0gcGFpciwgb25lIHBvcnQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlLlxuJiM0MzsjXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE1NCAjIGtzZnRfc2tpcCBjb21lcyBmcm9tIGxpYi5zaFxuJiM0MztcbiYjNDM7bGliX2Rpcj0kKGRpcm5hbWUgXCYjMzQ7JDBcJiMzNDspXG4mIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li8uLi8uLi8uLi9uZXQvbGliLnNoXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuJiM0Mztzb3VyY2UgXCYjMzQ7JGxpYl9kaXJcJiMzNDsvLi4vLi4vLi4vbmV0L2xpYi5zaFxuJiM0MztcbiYjNDM7TlNJTV9ERVZfMV9JRD0kKCgyNTYgJiM0MzsgUkFORE9NICUgMjU2KSlcbiYjNDM7TlNJTV9ERVZfMV9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzFfSURcbiYjNDM7TlNJTV9ERVZfMl9JRD0kKCg1MTIgJiM0MzsgUkFORE9NICUgMjU2KSlcbiYjNDM7TlNJTV9ERVZfMl9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzJfSURcbiYjNDM7XG4mIzQzO05TSU1fREVWX1NZU19ORVc9L3N5cy9idXMvbmV0ZGV2c2ltL25ld19kZXZpY2VcbiYjNDM7TlNJTV9ERVZfU1lTX0RFTD0vc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVxuJiM0MztOU0lNX0RFVl9TWVNfTElOSz0vc3lzL2J1cy9uZXRkZXZzaW0vbGlua19kZXZpY2VcbiYjNDM7XG4mIzQzO0RFQlVHRlM9L3N5cy9rZXJuZWwvZGVidWcvbmV0ZGV2c2ltXG4mIzQzO05TSU1fREVWXzFfVExTPSRERUJVR0ZTL25ldGRldnNpbSROU0lNX0RFVl8xX0lEL3BvcnRzLzAvdGxzXG4mIzQzO05TSU1fREVWXzJfVExTPSRERUJVR0ZTL25ldGRldnNpbSROU0lNX0RFVl8yX0lEL3BvcnRzLzAvdGxzXG4mIzQzO1xuJiM0MztTUlZfSVA9MTkyLjE2OC4xMy4xXG4mIzQzO0NMSV9JUD0xOTIuMTY4LjEzLjJcbiYjNDM7UE9SVD00NDMzXG4mIzQzO1xuJiM0MztTWU5DRElSPVxuJiM0MztCSU49JGxpYl9kaXIvdGxzX29mZmxvYWRcbiYjNDM7XG4mIzQzO251bV9wYXNzPTBcbiYjNDM7bnVtX2ZhaWw9MFxuJiM0MztcbiYjNDM7Y2hlY2soKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbXNnPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgcmV0PVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIFsgXCYjMzQ7JHJldFwmIzM0OyAtZXEgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O1BBU1M6ICRtc2dcJiMzNDtcbiYjNDM7XHRcdG51bV9wYXNzPSQoKG51bV9wYXNzICYjNDM7IDEpKVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG1zZ1wmIzM0O1xuJiM0MztcdFx0bnVtX2ZhaWw9JCgobnVtX2ZhaWwgJiM0MzsgMSkpXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3LFNDMjMyOSAjIGludm9rZWQgZnJvbSB0aGUgRVhJVCB0cmFwXG4mIzQzO2NsZWFudXAoKVxuJiM0Mzt7XG4mIzQzO1x0aXAgbmV0bnMgZGVsIG5zY2wgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBuc3N2IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRlY2hvIFwmIzM0OyROU0lNX0RFVl8yX0lEXCYjMzQ7IFx1MDAzZSBcJiMzNDskTlNJTV9ERVZfU1lTX0RFTFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBcJiMzNDskTlNJTV9ERVZfMV9JRFwmIzM0OyBcdTAwM2UgXCYjMzQ7JE5TSU1fREVWX1NZU19ERUxcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFsgLW4gXCYjMzQ7JFNZTkNESVJcJiMzNDsgXSBcdTAwMjZcdTAwMjYgcm0gLXJmIFwmIzM0OyRTWU5DRElSXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwKClcbiYjNDM7e1xuJiM0MztcdHNldCAtZVxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyROU0lNX0RFVl8xX0lEXCYjMzQ7IFx1MDAzZSBcJiMzNDskTlNJTV9ERVZfU1lTX05FV1wmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7JE5TSU1fREVWXzJfSURcJiMzNDsgXHUwMDNlIFwmIzM0OyROU0lNX0RFVl9TWVNfTkVXXCYjMzQ7XG4mIzQzO1x0dWRldmFkbSBzZXR0bGUgMlx1MDAzZS9kZXYvbnVsbCB8fCBzbGVlcCAxXG4mIzQzO1xuJiM0MztcdE5TSU1fREVWXzFfTkFNRT0kKGZpbmQgXCYjMzQ7JE5TSU1fREVWXzFfU1lTXCYjMzQ7L25ldCAtbWF4ZGVwdGggMSAtdHlwZSBkICEgXFxcbiYjNDM7XHRcdC1wYXRoIFwmIzM0OyROU0lNX0RFVl8xX1NZU1wmIzM0Oy9uZXQgLWV4ZWMgYmFzZW5hbWUge30gXFw7KVxuJiM0MztcdE5TSU1fREVWXzJfTkFNRT0kKGZpbmQgXCYjMzQ7JE5TSU1fREVWXzJfU1lTXCYjMzQ7L25ldCAtbWF4ZGVwdGggMSAtdHlwZSBkICEgXFxcbiYjNDM7XHRcdC1wYXRoIFwmIzM0OyROU0lNX0RFVl8yX1NZU1wmIzM0Oy9uZXQgLWV4ZWMgYmFzZW5hbWUge30gXFw7KVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBhZGQgbnNzdlxuJiM0MztcdGlwIG5ldG5zIGFkZCBuc2NsXG4mIzQzO1xuJiM0MztcdGlwIGxpbmsgc2V0IFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgbmV0bnMgbnNzdlxuJiM0MztcdGlwIGxpbmsgc2V0IFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgbmV0bnMgbnNjbFxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIG5zc3YgaXAgYWRkciBhZGQgXCYjMzQ7JFNSVl9JUC8yNFwmIzM0OyBkZXYgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0O1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBhZGRyIGFkZCBcJiMzNDskQ0xJX0lQLzI0XCYjMzQ7IGRldiBcJiMzNDskTlNJTV9ERVZfMl9OQU1FXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBsaW5rIHNldCBkZXYgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0OyB1cFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBsaW5rIHNldCBkZXYgXCYjMzQ7JE5TSU1fREVWXzJfTkFNRVwmIzM0OyB1cFxuJiM0MztcbiYjNDM7XHROU0lNX0RFVl8xX0ZEPSQoKDI1NiAmIzQzOyBSQU5ET00gJSAyNTYpKVxuJiM0MztcdGV4ZWMge05TSU1fREVWXzFfRkR9XHUwMDNjL3Zhci9ydW4vbmV0bnMvbnNzdlxuJiM0MztcdE5TSU1fREVWXzFfSUZJRFg9JChpcCBuZXRucyBleGVjIG5zc3YgXFxcbiYjNDM7XHRcdGNhdCAvc3lzL2NsYXNzL25ldC9cJiMzNDskTlNJTV9ERVZfMV9OQU1FXCYjMzQ7L2lmaW5kZXgpXG4mIzQzO1xuJiM0MztcdE5TSU1fREVWXzJfRkQ9JCgoMjU2ICYjNDM7IFJBTkRPTSAlIDI1NikpXG4mIzQzO1x0ZXhlYyB7TlNJTV9ERVZfMl9GRH1cdTAwM2MvdmFyL3J1bi9uZXRucy9uc2NsXG4mIzQzO1x0TlNJTV9ERVZfMl9JRklEWD0kKGlwIG5ldG5zIGV4ZWMgbnNjbCBcXFxuJiM0MztcdFx0Y2F0IC9zeXMvY2xhc3MvbmV0L1wmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsvaWZpbmRleClcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDskTlNJTV9ERVZfMV9GRDokTlNJTV9ERVZfMV9JRklEWCAkTlNJTV9ERVZfMl9GRDokTlNJTV9ERVZfMl9JRklEWFwmIzM0OyBcXFxuJiM0MztcdFx0XHUwMDNlIFwmIzM0OyROU0lNX0RFVl9TWVNfTElOS1wmIzM0O1xuJiM0MztcbiYjNDM7XHRTWU5DRElSPSQobWt0ZW1wIC1kKVxuJiM0MztcdHNldCAmIzQzO2VcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZmVhdHVyZSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuZXRucz1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIGRldj1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXQ9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbmV0bnNcJiMzNDsgZXRodG9vbCAtayBcJiMzNDskZGV2XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfCBcXFxuJiM0MztcdFx0c2VkIC1uIFwmIzM0O3MvXiRmZWF0OiBcXChbYS16XSpcXCkuKi9cXDEvcFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztkYmdfZmllbGQoKVxuJiM0Mzt7XG4mIzQzO1x0c2VkIC1uIFwmIzM0O3MvLipcXFx1MDAzYyQyPVxcKFswLTldKlxcKS4qL1xcMS9wXCYjMzQ7IFwmIzM0OyQxXCYjMzQ7IHwgaGVhZCAtMVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0bHNfc3RhdCgpXG4mIzQzO3tcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyQxXCYjMzQ7IGNhdCAvcHJvYy9uZXQvdGxzX3N0YXQgfCBcXFxuJiM0MztcdFx0c2VkIC1uIFwmIzM0O3MvXiQyIFxcKFswLTldKlxcKS9cXDEvcFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIEJvdGggZW5kcyBwYXJrIG9uY2UgdGhlaXIgb2ZmbG9hZCBpcyBpbnN0YWxsZWQgYW5kIGJlZm9yZSBhbnkgZGF0YSBpc1xuJiM0MzsjIHNlbnQsIHNvIHRoZSBkcml2ZXImIzM5O3MgY29udGV4dCBjb3VudCBjYW4gYmUgc2FtcGxlZCB3aXRob3V0IHJhY2luZyB0aGVcbiYjNDM7IyB0cmFuc2Zlci4gIFBhc3MgXCYjMzQ7bm9zYW1wbGVcJiMzNDsgd2hlbiB0aGUgb2ZmbG9hZCBpcyBleHBlY3RlZCB0byBiZSByZWZ1c2VkLFxuJiM0MzsjIHNpbmNlIHRoZW4gbmVpdGhlciBlbmQgZXZlciByZWFjaGVzIHRoZSBiYXJyaWVyLlxuJiM0MztydW5fcGFpcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBzYW1wbGU9XCYjMzQ7JHsxOi1zYW1wbGV9XCYjMzQ7XG4mIzQzO1x0bG9jYWwgc3J2X3JjIGNsaV9yYyB3YWl0ZWQ9MFxuJiM0MztcbiYjNDM7XHRybSAtZiBcJiMzNDskU1lOQ0RJUlwmIzM0Oy8qLnJlYWR5IFwmIzM0OyRTWU5DRElSXCYjMzQ7L2dvXG4mIzQzO1x0Q09OTlNfMT0wXG4mIzQzO1x0Q09OTlNfMj0wXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNzdiBcJiMzNDskQklOXCYjMzQ7IHNlcnZlciBcJiMzNDskU1JWX0lQXCYjMzQ7IFwmIzM0OyRQT1JUXCYjMzQ7IFwmIzM0OyRTWU5DRElSXCYjMzQ7IFx1MDAyNlxuJiM0MztcdGxvY2FsIHNydl9waWQ9JCFcbiYjNDM7XHRpcCBuZXRucyBleGVjIG5zY2wgXCYjMzQ7JEJJTlwmIzM0OyBjbGllbnQgXCYjMzQ7JFNSVl9JUFwmIzM0OyBcJiMzNDskUE9SVFwmIzM0OyBcJiMzNDskU1lOQ0RJUlwmIzM0OyBcdTAwMjZcbiYjNDM7XHRsb2NhbCBjbGlfcGlkPSQhXG4mIzQzO1xuJiM0MztcdGlmIFsgXCYjMzQ7JHNhbXBsZVwmIzM0OyA9IFwmIzM0O3NhbXBsZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHR3aGlsZSBbICEgLWUgXCYjMzQ7JFNZTkNESVIvc2VydmVyLnJlYWR5XCYjMzQ7IF0gfHxcbiYjNDM7XHRcdCAgICAgIFsgISAtZSBcJiMzNDskU1lOQ0RJUi9jbGllbnQucmVhZHlcJiMzNDsgXTsgZG9cbiYjNDM7XHRcdFx0WyBcJiMzNDskd2FpdGVkXCYjMzQ7IC1nZSAyMDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdFx0c2xlZXAgMC4wNVxuJiM0MztcdFx0XHR3YWl0ZWQ9JCgod2FpdGVkICYjNDM7IDEpKVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0Q09OTlNfMT0kKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMV9UTFNcJiMzNDsgY291bnQpXG4mIzQzO1x0XHRDT05OU18yPSQoZGJnX2ZpZWxkIFwmIzM0OyROU0lNX0RFVl8yX1RMU1wmIzM0OyBjb3VudClcbiYjNDM7XHRcdDogXCYjMzQ7JHtDT05OU18xOj0wfVwmIzM0O1xuJiM0MztcdFx0OiBcJiMzNDske0NPTk5TXzI6PTB9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHR0b3VjaCBcJiMzNDskU1lOQ0RJUi9nb1wmIzM0O1xuJiM0MztcbiYjNDM7XHR3YWl0IFwmIzM0OyRzcnZfcGlkXCYjMzQ7OyBzcnZfcmM9JD9cbiYjNDM7XHR3YWl0IFwmIzM0OyRjbGlfcGlkXCYjMzQ7OyBjbGlfcmM9JD9cbiYjNDM7XG4mIzQzO1x0WyBcJiMzNDskc3J2X3JjXCYjMzQ7IC1lcSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNsaV9yY1wmIzM0OyAtZXEgMCBdXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMjI1xuJiM0MzsjIyMgQ29kZSBzdGFydFxuJiM0MzsjIyNcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JChpZCAtdSlcJiMzNDsgLW5lIDAgXTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogbmVlZCByb290XCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiAhIGNvbW1hbmQgLXYgZXRodG9vbCBcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGV0aHRvb2wgbm90IGZvdW5kXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbICEgLXggXCYjMzQ7JEJJTlwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiAkQklOIG5vdCBidWlsdFwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7bW9kcHJvYmUgbmV0ZGV2c2ltIDJcdTAwM2UvZGV2L251bGxcbiYjNDM7aWYgWyAhIC1kIC9zeXMvYnVzL25ldGRldnNpbSBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBuZXRkZXZzaW0gbm90IGF2YWlsYWJsZVwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7bW9kcHJvYmUgdGxzIDJcdTAwM2UvZGV2L251bGxcbiYjNDM7aWYgWyAhIC1lIC9wcm9jL25ldC90bHNfc3RhdCBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBrZXJuZWwgVExTIG5vdCBhdmFpbGFibGVcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO3NldHVwXG4mIzQzO1xuJiM0MzsjIFRoZSBvZmZsb2FkIGhhcyB0byBiZSBhZHZlcnRpc2VkLCBhbmQgb24gYnkgZGVmYXVsdCBsaWtlIHRoZSBvdGhlclxuJiM0MzsjIG5ldGRldnNpbSBjcnlwdG8gb2ZmbG9hZHMuXG4mIzQzO2ZvciBmIGluIHRscy1ody10eC1vZmZsb2FkIHRscy1ody1yeC1vZmZsb2FkOyBkb1xuJiM0MztcdFsgXCYjMzQ7JChmZWF0dXJlIG5zc3YgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0OyBcJiMzNDskZlwmIzM0OylcJiMzNDsgPSBcJiMzNDtvblwmIzM0OyBdXG4mIzQzO1x0Y2hlY2sgXCYjMzQ7JGYgYWR2ZXJ0aXNlZCBhbmQgb24gYnkgZGVmYXVsdFwmIzM0OyAkP1xuJiM0Mztkb25lXG4mIzQzO1xuJiM0MztbIC1lIFwmIzM0OyROU0lNX0RFVl8xX1RMU1wmIzM0OyBdXG4mIzQzO2NoZWNrIFwmIzM0O3Blci1wb3J0IGRlYnVnZnMgdGxzIGZpbGUgZXhpc3RzXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIE1haW4gZGF0YSBwYXRoIHJ1bi5cbiYjNDM7cnVuX3BhaXJcbiYjNDM7Y2hlY2sgXCYjMzQ7b2ZmbG9hZGVkIFRMUyBkYXRhIHRyYW5zZmVyXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIFNhbXBsZWQgYXQgdGhlIGJhcnJpZXIsIHNvIGVhY2ggcG9ydCBtdXN0IGJlIGhvbGRpbmcgZXhhY3RseSB0aGUgVFggYW5kXG4mIzQzOyMgdGhlIFJYIGNvbnRleHQgb2YgaXRzIG93biBzb2NrZXQuXG4mIzQzO1sgXCYjMzQ7JENPTk5TXzFcJiMzNDsgLWVxIDIgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskQ09OTlNfMlwmIzM0OyAtZXEgMiBdXG4mIzQzO2NoZWNrIFwmIzM0O3R4IGFuZCByeCBjb250ZXh0cyBpbnN0YWxsZWQgb24gYm90aCBwb3J0c1wmIzM0OyAkP1xuJiM0MztcbiYjNDM7IyBCb3RoIGVuZHMgbXVzdCBoYXZlIGdvbmUgdGhyb3VnaCB0aGUgZGV2aWNlIHBhdGgsIG5vdCB0aGUgU1cgZmFsbGJhY2suXG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1J4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1R4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdXG4mIzQzO2NoZWNrIFwmIzM0O2JvdGggZW5kcyB1c2VkIHRoZSBkZXZpY2UgcGF0aFwmIzM0OyAkP1xuJiM0MztcbiYjNDM7WyBcJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzVHhTdylcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKHRsc19zdGF0IG5zY2wgVGxzVHhTdylcJiMzNDsgLWVxIDAgXVxuJiM0MztjaGVjayBcJiMzNDtubyBzaWxlbnQgZmFsbGJhY2sgdG8gdGhlIHNvZnR3YXJlIHBhdGhcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc0RlY3J5cHRFcnJvcilcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRbIFwmIzM0OyQodGxzX3N0YXQgbnNjbCBUbHNEZWNyeXB0RXJyb3IpXCYjMzQ7IC1lcSAwIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7bm8gZGVjcnlwdCBlcnJvcnNcJiMzNDsgJD9cbiYjNDM7XG4mIzQzOyMgVGhlIGRyaXZlciBtdXN0IGhhdmUgc2VlbiB0aGUgcmVjb3JkcyBnbyBieSBpbiBib3RoIGRpcmVjdGlvbnMuXG4mIzQzO1sgXCYjMzQ7JChkYmdfZmllbGQgXCYjMzQ7JE5TSU1fREVWXzFfVExTXCYjMzQ7IHR4X3BhY2tldHMpXCYjMzQ7IC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0WyBcJiMzNDskKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMV9UTFNcJiMzNDsgcnhfcGFja2V0cylcJiMzNDsgLWdlIDEgXSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRbIFwmIzM0OyQoZGJnX2ZpZWxkIFwmIzM0OyROU0lNX0RFVl8yX1RMU1wmIzM0OyB0eF9wYWNrZXRzKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JChkYmdfZmllbGQgXCYjMzQ7JE5TSU1fREVWXzJfVExTXCYjMzQ7IHJ4X3BhY2tldHMpXCYjMzQ7IC1nZSAxIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7ZHJpdmVyIGNvdW50ZWQgb2ZmbG9hZGVkIHBhY2tldHMgYm90aCB3YXlzXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIFNvY2tldHMgYXJlIGNsb3NlZCBieSBub3csIHNvIGV2ZXJ5IGNvbnRleHQgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gYmFjay5cbiYjNDM7WyBcJiMzNDskKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMV9UTFNcJiMzNDsgY291bnQpXCYjMzQ7IC1lcSAwIF0gXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0WyBcJiMzNDskKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMl9UTFNcJiMzNDsgY291bnQpXCYjMzQ7IC1lcSAwIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7YWxsIG9mZmxvYWQgY29udGV4dHMgcmVsZWFzZWQgb24gY2xvc2VcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc0N1cnJUeERldmljZSlcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRbIFwmIzM0OyQodGxzX3N0YXQgbnNzdiBUbHNDdXJyUnhEZXZpY2UpXCYjMzQ7IC1lcSAwIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7bm8gZGV2aWNlIGNvbnRleHRzIGxlZnQgYmVoaW5kXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIFR1cm5pbmcgdGhlIGZlYXR1cmUgb2ZmIGhhcyB0byBtYWtlIHRoZSBvZmZsb2FkIHJlZnVzZSB0aGUgY29ubmVjdGlvbjtcbiYjNDM7IyB0aGUgdGVzdCBiaW5hcnkgaW5zaXN0cyBvbiB0aGUgZGV2aWNlIHBhdGgsIHNvIGl0IG11c3Qgbm93IGZhaWwuXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmXG4mIzQzO1xuJiM0MztydW5fcGFpciBub3NhbXBsZVxuJiM0MztyYz0kP1xuJiM0MztbIFwmIzM0OyRyY1wmIzM0OyAtbmUgMCBdXG4mIzQzO2NoZWNrIFwmIzM0O29mZmxvYWQgZGVjbGluZWQgb25jZSB0aGUgZmVhdHVyZSBpcyBvZmZcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4U3cpXCYjMzQ7IC1nZSAxIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7c29mdHdhcmUgcGF0aCB1c2VkIHdoZW4gb2ZmbG9hZCBpcyBvZmZcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb25cbiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0OyB0bHMtaHctcngtb2ZmbG9hZCBvblxuJiM0MztpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcJiMzNDskTlNJTV9ERVZfMl9OQU1FXCYjMzQ7IHRscy1ody10eC1vZmZsb2FkIG9uXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb25cbiYjNDM7XG4mIzQzO3J1bl9wYWlyXG4mIzQzO2NoZWNrIFwmIzM0O29mZmxvYWQgd29ya3MgYWdhaW4gYWZ0ZXIgcmUtZW5hYmxpbmdcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO2VjaG9cbiYjNDM7ZWNobyBcJiMzNDtwYXNzZWQ6ICRudW1fcGFzcyBmYWlsZWQ6ICRudW1fZmFpbFwmIzM0O1xuJiM0MztbIFwmIzM0OyRudW1fZmFpbFwmIzM0OyAtZXEgMCBdIFx1MDAyNlx1MDAyNiBleGl0IDBcbiYjNDM7ZXhpdCAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rsc19vZmZsb2FkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmI0YmZjZDRmNDRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHNfb2ZmbG9hZC5jXG5AQCAtMCwwICYjNDM7MSw0OTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICoga1RMUyBkZXZpY2Ugb2ZmbG9hZCBkYXRhIHBhdGggZXhlcmNpc2UsIGRyaXZlbiBieSB0bHMuc2guXG4mIzQzOyAqXG4mIzQzOyAqIE9uZSBpbnN0YW5jZSBydW5zIGFzIHRoZSBzZXJ2ZXIgYW5kIG9uZSBhcyB0aGUgY2xpZW50LCBlYWNoIGluIGl0cyBvd25cbiYjNDM7ICogbmV0d29yayBuYW1lc3BhY2UsIGNvbm5lY3RlZCBiYWNrIHRvIGJhY2sgYnkgYSBsaW5rZWQgbmV0ZGV2c2ltIHBhaXIuXG4mIzQzOyAqIEJvdGggZW5kcyBlbmFibGUga1RMUyBhbmQgcmVseSBvbiBuZXRkZXZzaW0mIzM5O3MgZW11bGF0ZWQgVExTIG9mZmxvYWQsIHNvXG4mIzQzOyAqIGV2ZXJ5IHJlY29yZCB0cmF2ZWxzIHRocm91Z2ggbmV0L3Rscy90bHNfZGV2aWNlLmMgcmF0aGVyIHRoYW4gdGhlXG4mIzQzOyAqIHNvZnR3YXJlIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB0d28gcHJvY2Vzc2VzIHJlbmRlenZvdXMgdGhyb3VnaCBhIHNoYXJlZCBkaXJlY3Rvcnkgc28gdGhhdCBuZWl0aGVyXG4mIzQzOyAqIHNpZGUgc2VuZHMgYmVmb3JlIHRoZSBvdGhlciBoYXMgaW5zdGFsbGVkIGl0cyBSWCBvZmZsb2FkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZuZGVmIFNPTF9UTFNcbiYjNDM7I2RlZmluZSBTT0xfVExTXHRcdFx0MjgyXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBUQ1BfVUxQXG4mIzQzOyNkZWZpbmUgVENQX1VMUFx0XHRcdDMxXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBCVUxLX0xFTlx0XHQoMjAwICogMTAyNClcbiYjNDM7I2RlZmluZSBNT1JFX0ZSQUdTXHRcdDY0XG4mIzQzOyNkZWZpbmUgU1BMSUNFX0ZSQUdfTEVOXHRcdDQwOTZcbiYjNDM7I2RlZmluZSBTUExJQ0VfRlJBR1NcdFx0OFxuJiM0MztcbiYjNDM7LyogVExTX01JTl9SRUNPUkRfU0laRV9MSU0gYW5kIFRMU19NQVhfUEFZTE9BRF9TSVpFLCB3aGljaCBhcmUgbm90IHVhcGkuICovXG4mIzQzOyNkZWZpbmUgUkVDX0xJTV9NSU5cdFx0NjRcbiYjNDM7I2RlZmluZSBSRUNfTElNX01BWFx0XHQxNjM4NFxuJiM0MztcbiYjNDM7I2RlZmluZSBTTUFMTF9SRUNTXHRcdDEwMFxuJiM0MzsjZGVmaW5lIFNNQUxMX0xFTlx0XHQoUkVDX0xJTV9NSU4gKiBTTUFMTF9SRUNTKVxuJiM0MztcbiYjNDM7I2RlZmluZSBTWU5DX1RJTUVPVVRfTVNcdFx0MjAwMDBcbiYjNDM7I2RlZmluZSBDT05ORUNUX1RJTUVPVVRfTVNcdDIwMDAwXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcm9sZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICp3aGF0KVxuJiM0Mzt7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyVzOiAlczogJXNcXG5cJiMzNDssIHJvbGUsIHdoYXQsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0ZXhpdCgxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZmFpbChjb25zdCBjaGFyICpmbXQsIC4uLilcbiYjNDM7e1xuJiM0MztcdHZhX2xpc3QgYXA7XG4mIzQzO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDslczogXCYjMzQ7LCByb2xlKTtcbiYjNDM7XHR2YV9zdGFydChhcCwgZm10KTtcbiYjNDM7XHR2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApO1xuJiM0MztcdHZhX2VuZChhcCk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0ZXhpdCgxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXNsZWVwKHVuc2lnbmVkIGludCBtcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyB0cyA9IHtcbiYjNDM7XHRcdC50dl9zZWMgPSBtcyAvIDEwMDAsXG4mIzQzO1x0XHQudHZfbnNlYyA9IChtcyAlIDEwMDApICogMTAwMDAwMEwsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0bmFub3NsZWVwKFx1MDAyNnRzLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogL3Byb2MvbmV0L3Rsc19zdGF0IGlzIHBlciBuZXRucywgc28gYm90aCBlbmRzIGNhbiBjaGVjayB0aGF0IHRoZWlyIG93blxuJiM0MzsgKiBjb25uZWN0aW9uIHJlYWxseSBsYW5kZWQgb24gdGhlIGRldmljZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF90bHNfc3RhdChjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBsaW5lWzI1Nl07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKFwmIzM0Oy9wcm9jL25ldC90bHNfc3RhdFwmIzM0OywgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0ZGllKFwmIzM0O29wZW4gL3Byb2MvbmV0L3Rsc19zdGF0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGNoYXIga2V5WzY0XTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0OyU2M3MgJWx1XCYjMzQ7LCBrZXksIFx1MDAyNnZhbCkgIT0gMilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChrZXksIG5hbWUpKSB7XG4mIzQzO1x0XHRcdGZjbG9zZShmKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRmYWlsKFwmIzM0OyVzIG5vdCBmb3VuZCBpbiAvcHJvYy9uZXQvdGxzX3N0YXRcJiMzNDssIG5hbWUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmaWxsX3BhdHRlcm4oY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgc2VlZClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YnVmW2ldID0gKGNoYXIpKHNlZWQgJiM0MzsgaSAqIDMxICYjNDM7IChpIFx1MDAzZVx1MDAzZSA4KSAqIDcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjaGVja19wYXR0ZXJuKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IHNlZWQsXG4mIzQzO1x0XHRcdCAgY29uc3QgY2hhciAqd2hhdClcbiYjNDM7e1xuJiM0MztcdGNoYXIgKndhbnQgPSBtYWxsb2MobGVuKTtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3YW50KVxuJiM0MztcdFx0ZGllKFwmIzM0O21hbGxvY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZpbGxfcGF0dGVybih3YW50LCBsZW4sIHNlZWQpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChidWZbaV0gIT0gd2FudFtpXSlcbiYjNDM7XHRcdFx0ZmFpbChcJiMzNDslczogcGF5bG9hZCBtaXNtYXRjaCBhdCBieXRlICV6dTogZ290IDB4JTAyeCB3YW50IDB4JTAyeFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICB3aGF0LCBpLCAodW5zaWduZWQgY2hhcilidWZbaV0sXG4mIzQzO1x0XHRcdCAgICAgKHVuc2lnbmVkIGNoYXIpd2FudFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmcmVlKHdhbnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgZG9uZSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChkb25lIFx1MDAzYyBsZW4pIHtcbiYjNDM7XHRcdHNzaXplX3QgbiA9IHNlbmQoZmQsIGJ1ZiAmIzQzOyBkb25lLCBsZW4gLSBkb25lLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGRpZShcJiMzNDtzZW5kXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRvbmUgJiM0Mzs9IG47XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFkX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBkb25lID0gMDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuJiM0MztcdFx0c3NpemVfdCBuID0gcmVjdihmZCwgYnVmICYjNDM7IGRvbmUsIGxlbiAtIGRvbmUsIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O3JlY3ZcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKG4gPT0gMClcbiYjNDM7XHRcdFx0ZmFpbChcJiMzNDtwZWVyIGNsb3NlZCBhZnRlciAlenUgb2YgJXp1IGJ5dGVzXCYjMzQ7LCBkb25lLCBsZW4pO1xuJiM0MztcdFx0ZG9uZSAmIzQzOz0gbjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuYWJsZV9rdGxzKGludCBmZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBjaSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdHhfYmVmb3JlLCByeF9iZWZvcmU7XG4mIzQzO1xuJiM0MztcdHR4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzVHhEZXZpY2VcJiMzNDspO1xuJiM0MztcdHJ4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzUnhEZXZpY2VcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUCwgdGxzKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGNpLmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTjtcbiYjNDM7XHRjaS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyODtcbiYjNDM7XHRtZW1zZXQoY2kuaXYsICYjMzk7aSYjMzk7LCBzaXplb2YoY2kuaXYpKTtcbiYjNDM7XHRtZW1zZXQoY2kua2V5LCAmIzM5O2smIzM5Oywgc2l6ZW9mKGNpLmtleSkpO1xuJiM0MztcdG1lbXNldChjaS5zYWx0LCAmIzM5O3MmIzM5Oywgc2l6ZW9mKGNpLnNhbHQpKTtcbiYjNDM7XHRtZW1zZXQoY2kucmVjX3NlcSwgMCwgc2l6ZW9mKGNpLnJlY19zZXEpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2Y2ksIHNpemVvZihjaSkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1RYKVwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19SWCwgXHUwMDI2Y2ksIHNpemVvZihjaSkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1JYKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZXhlcmNpc2U6IHJlZnVzZSB0byBzaWxlbnRseSBmYWxsIGJhY2sgdG9cbiYjNDM7XHQgKiB0aGUgc29mdHdhcmUgcGF0aCwgb3RoZXJ3aXNlIHRoZSB0ZXN0IHdvdWxkIHBhc3Mgd2l0aG91dCBldmVyXG4mIzQzO1x0ICogdG91Y2hpbmcgdGxzX2RldmljZS5jLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWFkX3Rsc19zdGF0KFwmIzM0O1Rsc1R4RGV2aWNlXCYjMzQ7KSAhPSB0eF9iZWZvcmUgJiM0MzsgMSlcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7VFggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzVHhEZXZpY2UgJWx1IC1cdTAwM2UgJWx1KVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgdHhfYmVmb3JlLCByZWFkX3Rsc19zdGF0KFwmIzM0O1Rsc1R4RGV2aWNlXCYjMzQ7KSk7XG4mIzQzO1x0aWYgKHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzUnhEZXZpY2VcJiMzNDspICE9IHJ4X2JlZm9yZSAmIzQzOyAxKVxuJiM0MztcdFx0ZmFpbChcJiMzNDtSWCBkaWQgbm90IGxhbmQgb24gdGhlIGRldmljZSBwYXRoIChUbHNSeERldmljZSAlbHUgLVx1MDAzZSAlbHUpXCYjMzQ7LFxuJiM0MztcdFx0ICAgICByeF9iZWZvcmUsIHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzUnhEZXZpY2VcJiMzNDspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3luY19wYXRoKGNoYXIgKm91dCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICp3aG8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoKHNpemVfdClzbnByaW50ZihvdXQsIGxlbiwgXCYjMzQ7JXMvJXMucmVhZHlcJiMzNDssIGRpciwgd2hvKSBcdTAwM2U9IGxlbilcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7c3luYyBkaXIgcGF0aCB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcilcbiYjNDM7e1xuJiM0MztcdGNoYXIgbWluZVtQQVRIX01BWF0sIHRoZWlyc1tQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRlZCA9IDA7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRzeW5jX3BhdGgobWluZSwgc2l6ZW9mKG1pbmUpLCBkaXIsIG1lKTtcbiYjNDM7XHRzeW5jX3BhdGgodGhlaXJzLCBzaXplb2YodGhlaXJzKSwgZGlyLCBwZWVyKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0ZGllKFwmIzM0O2NyZWF0ZSBzeW5jIGZpbGVcJiMzNDspO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGFjY2Vzcyh0aGVpcnMsIEZfT0spKSB7XG4mIzQzO1x0XHRpZiAod2FpdGVkIFx1MDAzZT0gU1lOQ19USU1FT1VUX01TKVxuJiM0MztcdFx0XHRmYWlsKFwmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciAlc1wmIzM0OywgcGVlcik7XG4mIzQzO1x0XHRtc2xlZXAoMjApO1xuJiM0MztcdFx0d2FpdGVkICYjNDM7PSAyMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJvdGggZW5kcyBzdG9wIGhlcmUgd2l0aCB0aGVpciBvZmZsb2FkIGluc3RhbGxlZCBhbmQgbm8gZGF0YSBzZW50IHlldCxcbiYjNDM7ICogc28gdGhhdCB0aGUgZHJpdmVyIHN0YXRlIGNhbiBiZSBpbnNwZWN0ZWQgZnJvbSB0aGUgb3V0c2lkZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX2dvKGNvbnN0IGNoYXIgKmRpcilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB3YWl0ZWQgPSAwO1xuJiM0MztcdGNoYXIgZ29bUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRpZiAoKHNpemVfdClzbnByaW50Zihnbywgc2l6ZW9mKGdvKSwgXCYjMzQ7JXMvZ29cJiMzNDssIGRpcikgXHUwMDNlPSBzaXplb2YoZ28pKVxuJiM0MztcdFx0ZmFpbChcJiMzNDtzeW5jIGRpciBwYXRoIHRvbyBsb25nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGFjY2VzcyhnbywgRl9PSykpIHtcbiYjNDM7XHRcdGlmICh3YWl0ZWQgXHUwMDNlPSBTWU5DX1RJTUVPVVRfTVMpXG4mIzQzO1x0XHRcdGZhaWwoXCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIGdvXCYjMzQ7KTtcbiYjNDM7XHRcdG1zbGVlcCgyMCk7XG4mIzQzO1x0XHR3YWl0ZWQgJiM0Mzs9IDIwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU21hbGwgd3JpdGVzIHdpdGggTVNHX01PUkUgYWNjdW11bGF0ZSBpbnRvIG9uZSBvcGVuIHJlY29yZCBiZWZvcmUgaXQgaXNcbiYjNDM7ICogcHVzaGVkLCB3aGljaCBpcyB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0bHNfcHVzaF9kYXRhKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX21zZ19tb3JlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZltNT1JFX0ZSQUdTICYjNDM7IDFdO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBzaXplb2YoYnVmKSwgc2VlZCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1PUkVfRlJBR1M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoc2VuZChmZCwgYnVmICYjNDM7IGksIDEsIE1TR19NT1JFKSAhPSAxKVxuJiM0MztcdFx0XHRkaWUoXCYjMzQ7c2VuZChNU0dfTU9SRSlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2VuZChmZCwgYnVmICYjNDM7IE1PUkVfRlJBR1MsIDEsIDApICE9IDEpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7c2VuZChsYXN0KVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNwbGljZSgpIHJlYWNoZXMgdGxzX3B1c2hfZGF0YSgpIHdpdGggTVNHX1NQTElDRV9QQUdFUyBvbmNlXG4mIzQzOyAqIFRMU19UWF9aRVJPQ09QWV9STyBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGRpc3RpbmN0IGZyYWdtZW50IHBhdGguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX3NwbGljZShpbnQgZmQsIHVuc2lnbmVkIGludCBzZWVkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbU1BMSUNFX0ZSQUdfTEVOXTtcbiYjNDM7XHRpbnQgdmFsID0gMTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7c2V0c29ja29wdChUTFNfVFhfWkVST0NPUFlfUk8pXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgU1BMSUNFX0ZSQUdTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IHBbMl07XG4mIzQzO1xuJiM0MztcdFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQgJiM0MzsgaSAqIFNQTElDRV9GUkFHX0xFTik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBpcGUocCkpXG4mIzQzO1x0XHRcdGRpZShcJiMzNDtwaXBlXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICh3cml0ZShwWzFdLCBidWYsIHNpemVvZihidWYpKSAhPSBzaXplb2YoYnVmKSlcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O3dyaXRlIHRvIHBpcGVcJiMzNDspO1xuJiM0MztcdFx0aWYgKHNwbGljZShwWzBdLCBOVUxMLCBmZCwgTlVMTCwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHRcdCAgIGkgPT0gU1BMSUNFX0ZSQUdTIC0gMSA/IDAgOiBTUExJQ0VfRl9NT1JFKSAhPVxuJiM0MztcdFx0ICAgIHNpemVvZihidWYpKVxuJiM0MztcdFx0XHRkaWUoXCYjMzQ7c3BsaWNlXCYjMzQ7KTtcbiYjNDM7XHRcdGNsb3NlKHBbMF0pO1xuJiM0MztcdFx0Y2xvc2UocFsxXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWwgPSAwO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPIG9mZilcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIHJlY29yZCBjYW4gYmUgdXAgdG8gMTZLLCBzbyBub3JtYWxseSBvbmUgc2VnbWVudCBjYXJyaWVzIGEgcGllY2Ugb2YgYVxuJiM0MzsgKiBzaW5nbGUgcmVjb3JkLiAgU2hyaW5raW5nIHRoZSBsaW1pdCBwdXRzIGEgZG96ZW4gb3Igc28gd2hvbGUgcmVjb3JkcyBpblxuJiM0MzsgKiBldmVyeSBzZWdtZW50IGluc3RlYWQsIHdoaWNoIGlzIHRoZSBtdWx0aS1yZWNvcmQgcGF0aCB0aHJvdWdoIHRoZSBkcml2ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX3NtYWxsX3JlY29yZHMoaW50IGZkLCB1bnNpZ25lZCBpbnQgc2VlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmW1NNQUxMX0xFTl07XG4mIzQzO1x0dWludDE2X3QgbGltaXQ7XG4mIzQzO1xuJiM0MztcdGxpbWl0ID0gUkVDX0xJTV9NSU47XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9NQVhfUEFZTE9BRF9MRU4sIFx1MDAyNmxpbWl0LFxuJiM0MztcdFx0ICAgICAgIHNpemVvZihsaW1pdCkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1RYX01BWF9QQVlMT0FEX0xFTilcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBzaXplb2YoYnVmKSwgc2VlZCk7XG4mIzQzO1x0d3JpdGVfYWxsKGZkLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XG4mIzQzO1x0bGltaXQgPSBSRUNfTElNX01BWDtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgXHUwMDI2bGltaXQsXG4mIzQzO1x0XHQgICAgICAgc2l6ZW9mKGxpbWl0KSkpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7c2V0c29ja29wdChUTFNfVFhfTUFYX1BBWUxPQURfTEVOIHJlc3RvcmUpXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBTRUVEX0MyU19CVUxLXHQweDExXG4mIzQzOyNkZWZpbmUgU0VFRF9TMkNfQlVMS1x0MHgyMlxuJiM0MzsjZGVmaW5lIFNFRURfQzJTX01PUkVcdDB4MzNcbiYjNDM7I2RlZmluZSBTRUVEX0MyU19TUExJQ0VcdDB4NDRcbiYjNDM7I2RlZmluZSBTRUVEX0MyU19TTUFMTFx0MHg1NVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2NsaWVudChpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdGRpZShcJiMzNDttYWxsb2NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSyk7XG4mIzQzO1x0d3JpdGVfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcbiYjNDM7XG4mIzQzO1x0cmVhZF9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pO1xuJiM0MztcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9TMkNfQlVMSywgXCYjMzQ7c2VydmVyIC1cdTAwM2UgY2xpZW50IGJ1bGtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzZW5kX21zZ19tb3JlKGZkLCBTRUVEX0MyU19NT1JFKTtcbiYjNDM7XHRzZW5kX3NwbGljZShmZCwgU0VFRF9DMlNfU1BMSUNFKTtcbiYjNDM7XHRzZW5kX3NtYWxsX3JlY29yZHMoZmQsIFNFRURfQzJTX1NNQUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgdGhlIHNlcnZlciYjMzk7cyB2ZXJkaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nIGRvd24uICovXG4mIzQzO1x0cmVhZF9hbGwoZmQsIGJ1ZiwgMSk7XG4mIzQzO1x0aWYgKGJ1ZlswXSAhPSAmIzM5O2smIzM5OylcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7c2VydmVyIHJlcG9ydGVkIGEgZmFpbHVyZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZyZWUoYnVmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3NlcnZlcihpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc3BsaWNlX2xlbiA9IChzaXplX3QpU1BMSUNFX0ZSQUdfTEVOICogU1BMSUNFX0ZSQUdTO1xuJiM0MztcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7XG4mIzQzO1x0Y2hhciBtb3JlW01PUkVfRlJBR1MgJiM0MzsgMV07XG4mIzQzO1x0Y2hhciAqc2J1ZjtcbiYjNDM7XHRjaGFyIG9rID0gJiMzOTtrJiMzOTs7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdHNidWYgPSBtYWxsb2Moc3BsaWNlX2xlbik7XG4mIzQzO1x0aWYgKCFidWYgfHwgIXNidWYpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7bWFsbG9jXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmVhZF9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pO1xuJiM0MztcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSywgXCYjMzQ7Y2xpZW50IC1cdTAwM2Ugc2VydmVyIGJ1bGtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9TMkNfQlVMSyk7XG4mIzQzO1x0d3JpdGVfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcbiYjNDM7XG4mIzQzO1x0cmVhZF9hbGwoZmQsIG1vcmUsIHNpemVvZihtb3JlKSk7XG4mIzQzO1x0Y2hlY2tfcGF0dGVybihtb3JlLCBzaXplb2YobW9yZSksIFNFRURfQzJTX01PUkUsIFwmIzM0O2NsaWVudCAtXHUwMDNlIHNlcnZlciBNU0dfTU9SRVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJlYWRfYWxsKGZkLCBzYnVmLCBzcGxpY2VfbGVuKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTUExJQ0VfRlJBR1M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y2hlY2tfcGF0dGVybihzYnVmICYjNDM7IChzaXplX3QpaSAqIFNQTElDRV9GUkFHX0xFTixcbiYjNDM7XHRcdFx0ICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgJiM0MztcbiYjNDM7XHRcdFx0ICAgICAgaSAqIFNQTElDRV9GUkFHX0xFTiwgXCYjMzQ7Y2xpZW50IC1cdTAwM2Ugc2VydmVyIHNwbGljZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJlYWRfYWxsKGZkLCBidWYsIFNNQUxMX0xFTik7XG4mIzQzO1x0Y2hlY2tfcGF0dGVybihidWYsIFNNQUxMX0xFTiwgU0VFRF9DMlNfU01BTEwsXG4mIzQzO1x0XHQgICAgICBcJiMzNDtjbGllbnQgLVx1MDAzZSBzZXJ2ZXIgc21hbGwgcmVjb3Jkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2FsbChmZCwgXHUwMDI2b2ssIDEpO1xuJiM0MztcbiYjNDM7XHRmcmVlKHNidWYpO1xuJiM0MztcdGZyZWUoYnVmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkb19zZXJ2ZXIoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIHNhID0ge307XG4mIzQzO1x0aW50IGxmZCwgZmQsIG9uZSA9IDE7XG4mIzQzO1xuJiM0MztcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGxmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGRpZShcJiMzNDtzb2NrZXRcJiMzNDspO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGxmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGRpZShcJiMzNDtTT19SRVVTRUFERFJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRzYS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpO1xuJiM0MztcdGlmIChpbmV0X3B0b24oQUZfSU5FVCwgaXAsIFx1MDAyNnNhLnNpbl9hZGRyKSAhPSAxKVxuJiM0MztcdFx0ZmFpbChcJiMzNDtiYWQgYmluZCBhZGRyZXNzICVzXCYjMzQ7LCBpcCk7XG4mIzQzO1xuJiM0MztcdGlmIChiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNhLCBzaXplb2Yoc2EpKSlcbiYjNDM7XHRcdGRpZShcJiMzNDtiaW5kXCYjMzQ7KTtcbiYjNDM7XHRpZiAobGlzdGVuKGxmZCwgMSkpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7bGlzdGVuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRkaWUoXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShsZmQpO1xuJiM0MztcbiYjNDM7XHRlbmFibGVfa3RscyhmZCk7XG4mIzQzO1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcJiMzNDtzZXJ2ZXJcJiMzNDssIFwmIzM0O2NsaWVudFwmIzM0Oyk7XG4mIzQzO1x0d2FpdF9mb3JfZ28oc3luY2Rpcik7XG4mIzQzO1xuJiM0MztcdHJ1bl9zZXJ2ZXIoZmQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG9fY2xpZW50KGNvbnN0IGNoYXIgKmlwLCBpbnQgcG9ydCwgY29uc3QgY2hhciAqc3luY2RpcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGludCB3YWl0ZWQgPSAwO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0c2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0c2Euc2luX3BvcnQgPSBodG9ucyhwb3J0KTtcbiYjNDM7XHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7YmFkIHNlcnZlciBhZGRyZXNzICVzXCYjMzQ7LCBpcCk7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O3NvY2tldFwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzYSwgc2l6ZW9mKHNhKSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0aWYgKHdhaXRlZCBcdTAwM2U9IENPTk5FQ1RfVElNRU9VVF9NUylcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O2Nvbm5lY3RcJiMzNDspO1xuJiM0MztcdFx0bXNsZWVwKDIwKTtcbiYjNDM7XHRcdHdhaXRlZCAmIzQzOz0gMjA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmFibGVfa3RscyhmZCk7XG4mIzQzO1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcJiMzNDtjbGllbnRcJiMzNDssIFwmIzM0O3NlcnZlclwmIzM0Oyk7XG4mIzQzO1x0d2FpdF9mb3JfZ28oc3luY2Rpcik7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbGllbnQoZmQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoYXJnYyAhPSA1KSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XCYjMzQ7dXNhZ2U6ICVzIHNlcnZlcnxjbGllbnQgXHUwMDNjaXBcdTAwM2UgXHUwMDNjcG9ydFx1MDAzZSBcdTAwM2NzeW5jZGlyXHUwMDNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRhcmd2WzBdKTtcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cm9sZSA9IGFyZ3ZbMV07XG4mIzQzO1x0cG9ydCA9IGF0b2koYXJndlszXSk7XG4mIzQzO1xuJiM0MztcdGlmICghc3RyY21wKHJvbGUsIFwmIzM0O3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZG9fc2VydmVyKGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xuJiM0MztcdGlmICghc3RyY21wKHJvbGUsIFwmIzM0O2NsaWVudFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZG9fY2xpZW50KGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xuJiM0MztcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7dW5rbm93biByb2xlICVzXFxuXCYjMzQ7LCByb2xlKTtcbiYjNDM7XHRyZXR1cm4gMjtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuc2ltX2RvX3RscyYjMzQ7LAogICAgJiMzNDtuc2ltX3Rsc19pbml0JiMzNDssCiAgICAmIzM0O25zaW1fdGxzX3RlYXJkb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZW11bGF0ZWQga1RMUyBvZmZsb2FkIHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiBuZXRkZXZzaW0gaXMgdXNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmNmQwMzdiODI5YWU2ZDc0MTE5MTkwYTIxODZiODRlNTRlNWE4NjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxNTowNjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGZmNzljNDY2NzEyZGYuLmNiNGQ0YmI4N2FmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtNjA3LDYgJiM0Mzs2MDcsNyBAQCBjb25maWcgTkVUREVWU0lNCiAJZGVwZW5kcyBvbiBJTkVUCiAJZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9bgogCWRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW4KJiM0MzsJZGVwZW5kcyBvbiBUTFMgfHwgVExTPW4KIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUEFHRV9QT09MCiAJc2VsZWN0IE5FVF9TSEFQRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZQppbmRleCA4NzcxODIwNGZiNGRlLi5jN2Y3NjIxMzIzYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlCkBAIC0yNSwzICYjNDM7MjUsNyBAQCBlbmRpZgogaWZuZXEgKCQoQ09ORklHX01BQ1NFQyksKQogbmV0ZGV2c2ltLW9ianMgJiM0Mzs9IG1hY3NlYy5vCiBlbmRpZgomIzQzOwomIzQzO2lmbmVxICgkKENPTkZJR19UTFNfREVWSUNFKSwpCiYjNDM7bmV0ZGV2c2ltLW9ianMgJiM0Mzs9IHRscy5vCiYjNDM7ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCA0ZTlkN2UxMGI1MjdlLi44ZGMwYjBhN2QxYTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0xNTEsNiAmIzQzOzE1MSw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAoZHIpCiAJCWdvdG8gb3V0X2Ryb3BfZnJlZTsKIAomIzQzOwluc2ltX2RvX3Rscyhza2IsIG5zLCBwZWVyX25zKTsKJiM0MzsKIAlyeHEgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlpZiAocnhxICZndDs9IHBlZXJfZGV2LSZndDtudW1fcnhfcXVldWVzKQogCQlyeHEgPSByeHEgJSBwZWVyX2Rldi0mZ3Q7bnVtX3J4X3F1ZXVlczsKQEAgLTEwNjYsNiAmIzQzOzEwNjgsNyBAQCBzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpCiAKIAluc2ltX21hY3NlY19pbml0KG5zKTsKIAluc2ltX2lwc2VjX2luaXQobnMpOwomIzQzOwluc2ltX3Rsc19pbml0KG5zKTsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShucy0mZ3Q7bmV0ZGV2KTsKIAlpZiAoZXJyKQpAQCAtMTA5Myw2ICYjNDM7MTA5Niw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlSQ1VfSU5JVF9QT0lOVEVSKG5zLSZndDtwZWVyLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZShucy0mZ3Q7bmV0ZGV2KTsKIGVycl9pcHNlY190ZWFyZG93bjoKJiM0MzsJbnNpbV90bHNfdGVhcmRvd24obnMpOwogCW5zaW1faXBzZWNfdGVhcmRvd24obnMpOwogCW5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTsKIAluc2ltX2JwZl91bmluaXQobnMpOwpAQCAtMTE5NSw2ICYjNDM7MTE5OSw3IEBAIHZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKQogCVJDVV9JTklUX1BPSU5URVIobnMtJmd0O3BlZXIsIE5VTEwpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJaWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnMtJmd0O25zaW1fZGV2X3BvcnQpKSB7CiYjNDM7CQluc2ltX3Rsc190ZWFyZG93bihucyk7CiAJCW5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTsKIAkJbnNpbV9pcHNlY190ZWFyZG93bihucyk7CiAJCW5zaW1fYnBmX3VuaW5pdChucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmggYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKaW5kZXggNjRmNzdmOTNkOTM3Yy4uNTgyYTc2YWNlOWQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaApAQCAtNTYsNiAmIzQzOzU2LDIwIEBAIHN0cnVjdCBuc2ltX2lwc2VjIHsKIAl1MzIgdHg7CiB9OwogCiYjNDM7c3RydWN0IG5zaW1fdGxzIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBjb25uczsKJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwkvKiBwcm90ZWN0cyBjb25ucyBhbmQgdGhlIGNvdW50ZXJzIGJlbG93ICovCiYjNDM7CXN0cnVjdCBkZW50cnkgKmRmaWxlOwomIzQzOwl1MzIgY291bnQ7CiYjNDM7CXUzMiB0eF9jb25uOwomIzQzOwl1MzIgcnhfY29ubjsKJiM0MzsJYXRvbWljNjRfdCB0eF9wYWNrZXRzOwomIzQzOwlhdG9taWM2NF90IHR4X2J5dGVzOwomIzQzOwlhdG9taWM2NF90IHJ4X3BhY2tldHM7CiYjNDM7CWF0b21pYzY0X3QgcnhfYnl0ZXM7CiYjNDM7CWF0b21pYzY0X3QgcmVzeW5jczsKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfU0VDWV9DT1VOVCAzCiAjZGVmaW5lIE5TSU1fTUFDU0VDX01BWF9SWFNDX0NPVU5UIDEKIHN0cnVjdCBuc2ltX3J4c2MgewpAQCAtMTQxLDYgJiM0MzsxNTUsNyBAQCBzdHJ1Y3QgbmV0ZGV2c2ltIHsKIAlib29sIGJwZl9tYXBfYWNjZXB0OwogCXN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjOwogCXN0cnVjdCBuc2ltX21hY3NlYyBtYWNzZWM7CiYjNDM7CXN0cnVjdCBuc2ltX3RscyB0bHM7CiAJc3RydWN0IG5zaW1fdmxhbiB2bGFuOwogCXN0cnVjdCB7CiAJCXUzMiBpbmplY3RfZXJyb3I7CkBAIC00MzUsNiAmIzQzOzQ1MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIH0KICNlbmRpZgogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpCiYjNDM7dm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTsKJiM0Mzt2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTsKJiM0Mzt2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLAomIzQzOwkJIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpCiB2b2lkIG5zaW1fbWFjc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpOwogdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjY5NWYyZTJiZWI4MAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYwpAQCAtMCwwICYjNDM7MSw0MTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvdGxzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXRkZXZzaW0uaCYjMzQ7CiYjNDM7CiYjNDM7LyogRW11bGF0ZWQga1RMUyBvZmZsb2FkLiAgTm8gY3J5cHRvIGlzIHBlcmZvcm1lZCwgc28gdGhpcyBpcyBvbmx5IHNlbGYKJiM0MzsgKiBjb25zaXN0ZW50IGJldHdlZW4gdHdvIG5ldGRldnNpbSBwb3J0cy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIE5TSU1fVExTX01BWF9DT05OCTMyCiYjNDM7CiYjNDM7LyogbmV0ZGV2X2ZpeF9mZWF0dXJlcygpIGRyb3BzIE5FVElGX0ZfSFdfVExTX1JYIHVubGVzcyB0aGUgZGV2aWNlIGFsc28gZG9lcwomIzQzOyAqIFJYIGNoZWNrc3Vtcywgd2hpY2ggZXZlcnkgb2ZmbG9hZCBjYXBhYmxlIE5JQyBkb2VzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTlNJTV9UTFNfRkVBVFVSRVMJKE5FVElGX0ZfSFdfVExTX1RYIHwgTkVUSUZfRl9IV19UTFNfUlggfCBcCiYjNDM7CQkJCSBORVRJRl9GX1JYQ1NVTSkKJiM0MzsKJiM0MztzdHJ1Y3QgbnNpbV90bHNfY29ubiB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsKJiM0MzsJLyogSWRlbnRpdHkgYXMgc2VlbiBvbiB0aGUgd2lyZSwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgcG9ydAomIzQzOwkgKiB0aGUgb2ZmbG9hZCB3YXMgaW5zdGFsbGVkIG9uOiBsKiBpcyB0aGlzIHNpZGUsIHIqIGlzIHRoZSBwZWVyLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGluNl9hZGRyIGxhZGRyOwomIzQzOwlzdHJ1Y3QgaW42X2FkZHIgcmFkZHI7CiYjNDM7CV9fYmUxNiBscG9ydDsKJiM0MzsJX19iZTE2IHJwb3J0OwomIzQzOwl1MTYgZmFtaWx5OwomIzQzOwomIzQzOwllbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyOwomIzQzOwl1MzIgc3RhcnRfc247CiYjNDM7CXUxNiBjaXBoZXJfdHlwZTsKJiM0MzsJY29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG5zaW1fdGxzX3R1cGxlIHsKJiM0MzsJc3RydWN0IGluNl9hZGRyIHNhZGRyOwomIzQzOwlzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7CiYjNDM7CV9fYmUxNiBzcG9ydDsKJiM0MzsJX19iZTE2IGRwb3J0OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbnNpbV90bHNfcGFyc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDsKJiM0MzsKJiM0MzsJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwomIzQzOwomIzQzOwkJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChpcGgtJmd0O3NhZGRyLCAmYW1wO3QtJmd0O3NhZGRyKTsKJiM0MzsJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLSZndDtkYWRkciwgJmFtcDt0LSZndDtkYWRkcik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CiYjNDM7CiYjNDM7CQlpZiAoaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl0LSZndDtzYWRkciA9IGlwNmgtJmd0O3NhZGRyOwomIzQzOwkJdC0mZ3Q7ZGFkZHIgPSBpcDZoLSZndDtkYWRkcjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdGggPSB0Y3BfaGRyKHNrYik7CiYjNDM7CXQtJmd0O3Nwb3J0ID0gdGgtJmd0O3NvdXJjZTsKJiM0MzsJdC0mZ3Q7ZHBvcnQgPSB0aC0mZ3Q7ZGVzdDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qIE9uIFJYIHRoZXJlIGlzIG5vIHNvY2tldCB0byBsb29rIGF0IHlldCwgc28gbWF0Y2ggdGhlIHR1cGxlIGluc3RhbGxlZCBhdAomIzQzOyAqIC0mZ3Q7dGxzX2Rldl9hZGQoKSB0aW1lLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzLiAgVGhlIHBhY2tldCBpcwomIzQzOyAqIGFycml2aW5nLCBzbyB0aGUgcGVlciBvZiB0aGUgY29ubmVjdGlvbiBpcyBpdHMgc291cmNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucywKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY29ubiwgJmFtcDtucy0mZ3Q7dGxzLmNvbm5zLCBsaXN0KQomIzQzOwkJaWYgKGNvbm4tJmd0O2RpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1JYICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjb25uLSZndDtscG9ydCA9PSB0LSZndDtkcG9ydCAmYW1wOyZhbXA7IGNvbm4tJmd0O3Jwb3J0ID09IHQtJmd0O3Nwb3J0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpcHY2X2FkZHJfZXF1YWwoJmFtcDtjb25uLSZndDtsYWRkciwgJmFtcDt0LSZndDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmYW1wO2Nvbm4tJmd0O3JhZGRyLCAmYW1wO3QtJmd0O3NhZGRyKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgc3RhY2sgbGVhdmVzIGEgdGFnIHNpemVkIHBsYWNlaG9sZGVyIGF0IHRoZSBlbmQgb2YgZXZlcnkgcmVjb3JkIGZvcgomIzQzOyAqIHRoZSBkZXZpY2UgdG8gd3JpdGUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpbnRvLiAgV2UgZG8gbm90IGVuY3J5cHQsIHNvCiYjNDM7ICogbm90aGluZyBldmVyIGZpbGxzIGl0IGluLCBhbmQgaXQgY29tZXMgZnJvbSBhIHBhZ2UgZnJhZyB0aGF0IHdhcyBuZXZlcgomIzQzOyAqIHplcm9lZCAtIGNsZWFyIGl0IHJhdGhlciB0aGFuIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb250byB0aGUgd2lyZS4KJiM0MzsgKgomIzQzOyAqIHRsc19hcHBlbmRfZnJhZygpIGVpdGhlciBncm93cyB0aGUgbGFzdCBmcmFnIG9yIGFkZHMgb25lLCBzbyB0aGUgdGFnIGlzCiYjNDM7ICogYWx3YXlzIHRoZSB0YWlsIG9mIHRoZSByZWNvcmQmIzM5O3MgbGFzdCBmcmFnLiAgQ2xlYXJpbmcgaXQgdGhlcmUgcmF0aGVyIHRoYW4KJiM0MzsgKiBpbiB0aGUgc2tiIGNvdmVycyBldmVyeSBzZWdtZW50IHRoZSByZWNvcmQgd2FzIHNwbGl0IGludG8sIGFuZCBhbnkKJiM0MzsgKiByZXRyYW5zbWl0IG9mIHRoZW0sIHNpbmNlIHRoZXkgYWxsIHNoYXJlIHRoZXNlIHBhZ2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG5zaW1fdGxzX3R4X3plcm9fdGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChza2ItJmd0O3NrKTsKJiM0MzsJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiYjNDM7CXN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICp0eF9jdHg7CiYjNDM7CXUzMiBzZXEsIGVuZCwgdGFnX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXVuc2lnbmVkIGludCBvZmY7CiYjNDM7CiYjNDM7CW9mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgX190Y3BfaGRybGVuKHRoKTsKJiM0MzsJaWYgKG9mZiAmZ3Q7PSBza2ItJmd0O2xlbikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdGFnX3NpemUgPSBjdHgtJmd0O3Byb3RfaW5mby50YWdfc2l6ZTsKJiM0MzsJc2VxID0gbnRvaGwodGgtJmd0O3NlcSk7CiYjNDM7CWVuZCA9IHNlcSAmIzQzOyBza2ItJmd0O2xlbiAtIG9mZjsKJiM0MzsJdHhfY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KGN0eCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHhfY3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlIChiZWZvcmUoc2VxLCBlbmQpKSB7CiYjNDM7CQlzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7CiYjNDM7CQlza2JfZnJhZ190ICpmcmFnOwomIzQzOwkJdTY0IHJjZF9zbjsKJiM0MzsKJiM0MzsJCXJlY29yZCA9IHRsc19nZXRfcmVjb3JkKHR4X2N0eCwgc2VxLCAmYW1wO3JjZF9zbik7CiYjNDM7CQlpZiAoIXJlY29yZCB8fCB0bHNfcmVjb3JkX2lzX3N0YXJ0X21hcmtlcihyZWNvcmQpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZnJhZyA9ICZhbXA7cmVjb3JkLSZndDtmcmFnc1tyZWNvcmQtJmd0O251bV9mcmFncyAtIDFdOwomIzQzOwkJbWVtc2V0KHNrYl9mcmFnX2FkZHJlc3MoZnJhZykgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShmcmFnKSAtIHRhZ19zaXplLAomIzQzOwkJICAgICAgIDAsIHRhZ19zaXplKTsKJiM0MzsKJiM0MzsJCXNlcSA9IHJlY29yZC0mZ3Q7ZW5kX3NlcTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dHhfY3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFN0YW5kIGluIGZvciB0aGUgaW5saW5lIGVuY3J5cHRpb24gdGhlIGhhcmR3YXJlIHdvdWxkIGRvIG9uIHRoZSB3YXkgb3V0LgomIzQzOyAqIFRoZSBzdGFjayBoYXMgYWxyZWFkeSBmcmFtZWQgdGhlIHJlY29yZCBhbmQgd2UgZG8gbm90IGVuY3J5cHQsIHNvIHRoZSB0YWcKJiM0MzsgKiBpcyBhbGwgdGhhdCBpcyBsZWZ0IHRvIGRlYWwgd2l0aC4gIFRoZSBzb2NrZXQgaXMgcmlnaHQgaGVyZSwgc28gaWRlbnRpZnkKJiM0MzsgKiB0aGUgY29ubmVjdGlvbiB0aGUgd2F5IHRoZSByZWFsIGRyaXZlcnMgZG8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpZiAoIXRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwluc2ltX3Rsc190eF96ZXJvX3RhZ3Moc2tiKTsKJiM0MzsJYXRvbWljNjRfaW5jKCZhbXA7bnMtJmd0O3Rscy50eF9wYWNrZXRzKTsKJiM0MzsJYXRvbWljNjRfYWRkKHNrYi0mZ3Q7bGVuLCAmYW1wO25zLSZndDt0bHMudHhfYnl0ZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBkZWNyeXB0aW9uIHRoZSBwZWVyJiMzOTtzIGhhcmR3YXJlIHdvdWxkIGRvLCBzaW5jZSB3ZQomIzQzOyAqIGFyZSBhYm91dCB0byBoYW5kIHRoZSBza2IgdG8gaXRzIHN0YWNrLiAgV2UgZG8gbm90IGRlY3J5cHQgZWl0aGVyLCBzbyBhbGwKJiM0MzsgKiB0aGF0IGlzIG5lZWRlZCBpcyB0aGUgZmxhZyB0aGF0IHRlbGxzIHRoZSBrVExTIGNvcmUgdGhlIHBheWxvYWQgaXMKJiM0MzsgKiBhbHJlYWR5IHBsYWludGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc19yeChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuc2ltX3Rsc190dXBsZSB0OwomIzQzOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO25zLSZndDt0bHMuY29ubnMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIW5zaW1fdGxzX3BhcnNlKHNrYiwgJmFtcDt0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFuc2ltX3Rsc19yeF9vZmZsb2FkZWQobnMsICZhbXA7dCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7ZGVjcnlwdGVkID0gMTsKJiM0MzsJYXRvbWljNjRfaW5jKCZhbXA7bnMtJmd0O3Rscy5yeF9wYWNrZXRzKTsKJiM0MzsJYXRvbWljNjRfYWRkKHNrYi0mZ3Q7bGVuLCAmYW1wO25zLSZndDt0bHMucnhfYnl0ZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBuZXRkZXZzaW0gaGFzIG5vIHdpcmU6IG5zaW1fc3RhcnRfeG1pdCgpIGhhbmRzIHRoZSBza2Igc3RyYWlnaHQgdG8gdGhlCiYjNDM7ICogcGVlciYjMzk7cyByZWNlaXZlIHBhdGgsIHNvIHRoaXMgb25lIGNhbGwgc2l0ZSBzdGFuZHMgaW4gZm9yIHRoZSBoYXJkd2FyZSBvZgomIzQzOyAqIGJvdGggcG9ydHMuICBJdCBoYXMgdG8gcnVuIGJlZm9yZSBuc2ltX2ZvcndhcmRfc2tiKCkgbW92ZXMgdGhlIHNrYiBvdmVyLAomIzQzOyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy4KJiM0MzsgKi8KJiM0Mzt2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLAomIzQzOwkJIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpCiYjNDM7ewomIzQzOwkvKiBuc2ltX2RvX3BzcCgpIHJhbiBmaXJzdCBhbmQgbWF5IGhhdmUgd3JhcHBlZCB0aGUgcmVjb3JkIHN0cmVhbSwgc28KJiM0MzsJICogdGhpcyBpcyBubyBsb25nZXIgYSBwbGFpbiBUTFMgb3ZlciBUQ1AgcGFja2V0LiAgTm8gTklDIGNoYWlucyB0aGUKJiM0MzsJICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbnNpbV90bHNfdHgobnMsIHNrYik7CiYjNDM7CW5zaW1fdGxzX3J4KHBlZXJfbnMsIHNrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnNpbV90bHNfZGV2X2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24sCiYjNDM7CQkJICAgIHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLAomIzQzOwkJCSAgICB1MzIgc3RhcnRfb2ZmbG9hZF90Y3Bfc24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJLyogTWlycm9yIHRoZSBjaXBoZXIgc3VwcG9ydCBvZiBhIHR5cGljYWwgb2ZmbG9hZCBjYXBhYmxlIE5JQy4gKi8KJiM0MzsJc3dpdGNoIChjcnlwdG9faW5mby0mZ3Q7Y2lwaGVyX3R5cGUpIHsKJiM0MzsJY2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4OgomIzQzOwljYXNlIFRMU19DSVBIRVJfQUVTX0dDTV8yNTY6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwljb25uID0ga3phbGxvY19vYmooKmNvbm4pOwomIzQzOwlpZiAoIWNvbm4pCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaWYgKHNrLSZndDtza19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKJiM0MzsJCWNvbm4tJmd0O2xhZGRyID0gc2stJmd0O3NrX3Y2X3Jjdl9zYWRkcjsKJiM0MzsJCWNvbm4tJmd0O3JhZGRyID0gc2stJmd0O3NrX3Y2X2RhZGRyOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChzay0mZ3Q7c2tfcmN2X3NhZGRyLCAmYW1wO2Nvbm4tJmd0O2xhZGRyKTsKJiM0MzsJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoc2stJmd0O3NrX2RhZGRyLCAmYW1wO2Nvbm4tJmd0O3JhZGRyKTsKJiM0MzsJfQomIzQzOwljb25uLSZndDtmYW1pbHkgPSBzay0mZ3Q7c2tfZmFtaWx5OwomIzQzOwljb25uLSZndDtscG9ydCA9IGh0b25zKGluZXRfc2soc2spLSZndDtpbmV0X251bSk7CiYjNDM7CWNvbm4tJmd0O3Jwb3J0ID0gc2stJmd0O3NrX2Rwb3J0OwomIzQzOwljb25uLSZndDtkaXIgPSBkaXJlY3Rpb247CiYjNDM7CWNvbm4tJmd0O3N0YXJ0X3NuID0gc3RhcnRfb2ZmbG9hZF90Y3Bfc247CiYjNDM7CWNvbm4tJmd0O2NpcGhlcl90eXBlID0gY3J5cHRvX2luZm8tJmd0O2NpcGhlcl90eXBlOwomIzQzOwljb25uLSZndDt0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwlpZiAobnMtJmd0O3Rscy5jb3VudCAmZ3Q7PSBOU0lNX1RMU19NQVhfQ09OTikgewomIzQzOwkJcmV0ID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO2Nvbm4tJmd0O2xpc3QsICZhbXA7bnMtJmd0O3Rscy5jb25ucyk7CiYjNDM7CW5zLSZndDt0bHMuY291bnQmIzQzOyYjNDM7OwomIzQzOwlpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpCiYjNDM7CQlucy0mZ3Q7dGxzLnR4X2Nvbm4mIzQzOyYjNDM7OwomIzQzOwllbHNlCiYjNDM7CQlucy0mZ3Q7dGxzLnJ4X2Nvbm4mIzQzOyYjNDM7OwomIzQzO291dF91bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtmcmVlKGNvbm4pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc19kZXZfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsCiYjNDM7CQkJICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCAmYW1wO25zLSZndDt0bHMuY29ubnMsIGxpc3QpIHsKJiM0MzsJCWlmIChjb25uLSZndDt0bHNfY3R4ICE9IHRsc19jdHggfHwgY29ubi0mZ3Q7ZGlyICE9IGRpcmVjdGlvbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxpc3RfZGVsX3JjdSgmYW1wO2Nvbm4tJmd0O2xpc3QpOwomIzQzOwkJbnMtJmd0O3Rscy5jb3VudC0tOwomIzQzOwkJaWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKQomIzQzOwkJCW5zLSZndDt0bHMudHhfY29ubi0tOwomIzQzOwkJZWxzZQomIzQzOwkJCW5zLSZndDt0bHMucnhfY29ubi0tOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwomIzQzOwkJa2ZyZWVfcmN1KGNvbm4sIHJjdSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtUTFMgJXMgY29udGV4dCBub3QgZm91bmQgb24gZGVsXG4mIzM0OywKJiM0MzsJCSAgIGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYID8gJiMzNDt0eCYjMzQ7IDogJiMzNDtyeCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm90aGluZyBpcyBldmVyIG91dCBvZiBzeW5jIGhlcmU6IHRoZSBlbXVsYXRpb24gZG9lcyBub3QgZGVjcnlwdCwgc28gaXQKJiM0MzsgKiBuZXZlciBsb3NlcyB0aGUgcmVjb3JkIGJvdW5kYXJpZXMgYW5kIG5ldmVyIGFza3MgZm9yIGEgcmVzeW5jLiAgVGhlIGNvcmUKJiM0MzsgKiBjYW4gc3RpbGwgY2FsbCBpbiBvbiB0aGUgUlggcGF0aCwgc28gYWNjb3VudCBmb3IgaXQgYW5kIG1vdmUgb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuc2ltX3Rsc19kZXZfcmVzeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkgICAgICAgdTMyIHNlcSwgdTggKnJjZF9zbiwKJiM0MzsJCQkgICAgICAgZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcmVjdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKJiM0MzsJYXRvbWljNjRfaW5jKCZhbXA7bnMtJmd0O3Rscy5yZXN5bmNzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyBuc2ltX3Rsc2Rldl9vcHMgPSB7CiYjNDM7CS50bHNfZGV2X2FkZAk9IG5zaW1fdGxzX2Rldl9hZGQsCiYjNDM7CS50bHNfZGV2X2RlbAk9IG5zaW1fdGxzX2Rldl9kZWwsCiYjNDM7CS50bHNfZGV2X3Jlc3luYwk9IG5zaW1fdGxzX2Rldl9yZXN5bmMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBuc2ltX3Rsc19kYmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKJiM0MzsJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uOwomIzQzOwlzaXplX3QgYnVmc2l6ZTsKJiM0MzsJY2hhciAqYnVmLCAqcDsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJLyogVHdvIGZ1bGwgSVB2NiBhZGRyZXNzZXMgYW5kIHBvcnRzIGZpdCBpbiAxNjAgYnl0ZXMgYSBsaW5lLiAqLwomIzQzOwlidWZzaXplID0gKE5TSU1fVExTX01BWF9DT05OICogMTYwKSAmIzQzOyAyMDA7CiYjNDM7CWJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXAgPSBidWY7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25zLSZndDt0bHMubG9jayk7CiYjNDM7CXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAomIzQzOwkJICAgICAgICYjMzQ7Y29ubiBjb3VudD0ldSB0eD0ldSByeD0ldVxuJiMzNDssCiYjNDM7CQkgICAgICAgbnMtJmd0O3Rscy5jb3VudCwgbnMtJmd0O3Rscy50eF9jb25uLCBucy0mZ3Q7dGxzLnJ4X2Nvbm4pOwomIzQzOwlwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSwKJiM0MzsJCSAgICAgICAmIzM0O3R4X3BhY2tldHM9JWxsdSB0eF9ieXRlcz0lbGx1IHJ4X3BhY2tldHM9JWxsdSByeF9ieXRlcz0lbGx1IHJlc3luY3M9JWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgYXRvbWljNjRfcmVhZCgmYW1wO25zLSZndDt0bHMudHhfcGFja2V0cyksCiYjNDM7CQkgICAgICAgYXRvbWljNjRfcmVhZCgmYW1wO25zLSZndDt0bHMudHhfYnl0ZXMpLAomIzQzOwkJICAgICAgIGF0b21pYzY0X3JlYWQoJmFtcDtucy0mZ3Q7dGxzLnJ4X3BhY2tldHMpLAomIzQzOwkJICAgICAgIGF0b21pYzY0X3JlYWQoJmFtcDtucy0mZ3Q7dGxzLnJ4X2J5dGVzKSwKJiM0MzsJCSAgICAgICBhdG9taWM2NF9yZWFkKCZhbXA7bnMtJmd0O3Rscy5yZXN5bmNzKSk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmFtcDtucy0mZ3Q7dGxzLmNvbm5zLCBsaXN0KSB7CiYjNDM7CQlpZiAoY29ubi0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQ2KQomIzQzOwkJCXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAomIzQzOwkJCQkgICAgICAgJiMzNDslcyBbJXBJNmNdOiV1IC0mZ3Q7IFslcEk2Y106JXUgY2lwaGVyPSV1IHNuPSV1XG4mIzM0OywKJiM0MzsJCQkJICAgICAgIGNvbm4tJmd0O2RpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYID8KJiM0MzsJCQkJICAgICAgICYjMzQ7dHgmIzM0OyA6ICYjMzQ7cngmIzM0OywKJiM0MzsJCQkJICAgICAgICZhbXA7Y29ubi0mZ3Q7bGFkZHIsIG50b2hzKGNvbm4tJmd0O2xwb3J0KSwKJiM0MzsJCQkJICAgICAgICZhbXA7Y29ubi0mZ3Q7cmFkZHIsIG50b2hzKGNvbm4tJmd0O3Jwb3J0KSwKJiM0MzsJCQkJICAgICAgIGNvbm4tJmd0O2NpcGhlcl90eXBlLCBjb25uLSZndDtzdGFydF9zbik7CiYjNDM7CQllbHNlCiYjNDM7CQkJcCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzICVwSTQ6JXUgLSZndDsgJXBJNDoldSBjaXBoZXI9JXUgc249JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgY29ubi0mZ3Q7ZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggPwomIzQzOwkJCQkgICAgICAgJiMzNDt0eCYjMzQ7IDogJiMzNDtyeCYjMzQ7LAomIzQzOwkJCQkgICAgICAgJmFtcDtjb25uLSZndDtsYWRkci5zNl9hZGRyMzJbM10sCiYjNDM7CQkJCSAgICAgICBudG9ocyhjb25uLSZndDtscG9ydCksCiYjNDM7CQkJCSAgICAgICAmYW1wO2Nvbm4tJmd0O3JhZGRyLnM2X2FkZHIzMlszXSwKJiM0MzsJCQkJICAgICAgIG50b2hzKGNvbm4tJmd0O3Jwb3J0KSwKJiM0MzsJCQkJICAgICAgIGNvbm4tJmd0O2NpcGhlcl90eXBlLCBjb25uLSZndDtzdGFydF9zbik7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwomIzQzOwlsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwomIzQzOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3Rsc19kYmdfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuID0gc2ltcGxlX29wZW4sCiYjNDM7CS5yZWFkID0gbnNpbV90bHNfZGJnX3JlYWQsCiYjNDM7CS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykKJiM0Mzt7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7bnMtJmd0O3Rscy5jb25ucyk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsKJiM0MzsJbnMtJmd0O25ldGRldi0mZ3Q7dGxzZGV2X29wcyA9ICZhbXA7bnNpbV90bHNkZXZfb3BzOwomIzQzOwlucy0mZ3Q7bmV0ZGV2LSZndDtmZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUzsKJiM0MzsJbnMtJmd0O25ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTlNJTV9UTFNfRkVBVFVSRVM7CiYjNDM7CiYjNDM7CW5zLSZndDt0bHMuZGZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7dGxzJiMzNDssIDA0MDAsCiYjNDM7CQkJCQkgICAgbnMtJmd0O25zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAomIzQzOwkJCQkJICAgICZhbXA7bnNpbV90bHNfZGJnX2ZvcHMpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7CiYjNDM7CXUzMiBsZWZ0OwomIzQzOwomIzQzOwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnMtJmd0O3Rscy5kZmlsZSk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25zLSZndDt0bHMubG9jayk7CiYjNDM7CWxlZnQgPSBucy0mZ3Q7dGxzLmNvdW50OwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgdG1wLCAmYW1wO25zLSZndDt0bHMuY29ubnMsIGxpc3QpIHsKJiM0MzsJCWxpc3RfZGVsX3JjdSgmYW1wO2Nvbm4tJmd0O2xpc3QpOwomIzQzOwkJa2ZyZWVfcmN1KGNvbm4sIHJjdSk7CiYjNDM7CX0KJiM0MzsJbnMtJmd0O3Rscy5jb3VudCA9IDA7CiYjNDM7CW5zLSZndDt0bHMudHhfY29ubiA9IDA7CiYjNDM7CW5zLSZndDt0bHMucnhfY29ubiA9IDA7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGxlZnQpCiYjNDM7CQluZXRkZXZfZXJyKG5zLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDt0ZWFyaW5nIGRvd24gVExTIG9mZmxvYWQgd2l0aCAldSBjb25uZWN0aW9ucyBsZWZ0XG4mIzM0OywKJiM0MzsJCQkgICBsZWZ0KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZQpAQCAtMCwwICYjNDM7MSwyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7dGxzX29mZmxvYWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZQppbmRleCA5ODA4YzJmYmFlOWU4Li41YmViNGVkNjRlYjUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlCkBAIC0xLDUgJiM0MzsxLDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOyBPUiBNSVQKIAomIzQzO0NGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKQomIzQzOwogVEVTVF9QUk9HUyA6PSBcCiAJZGV2bGluay5zaCBcCiAJZGV2bGlua19pbl9uZXRucy5zaCBcCkBAIC0xNSw5ICYjNDM7MTcsMTQgQEAgVEVTVF9QUk9HUyA6PSBcCiAJcGVlci5zaCBcCiAJcHNhbXBsZS5zaCBcCiAJdGMtbXEtdmlzaWJpbGl0eS5zaCBcCiYjNDM7CXRscy5zaCBcCiAJdWRwX3R1bm5lbF9uaWMuc2ggXAogIyBlbmQgb2YgVEVTVF9QUk9HUwogCiYjNDM7VEVTVF9HRU5fRklMRVMgOj0gXAomIzQzOwl0bHNfb2ZmbG9hZAomIzQzOyMgZW5kIG9mIFRFU1RfR0VOX0ZJTEVTCiYjNDM7CiBURVNUX0ZJTEVTIDo9IFwKIAlldGh0b29sLWNvbW1vbi5zaAogIyBlbmQgb2YgVEVTVF9GSUxFUwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzk5ZTJjNGQzODJkZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2gKQEAgLTAsMCAmIzQzOzEsMjcxIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBFeGVyY2lzZSBuZXRkZXZzaW0mIzM5O3MgZW11bGF0ZWQga1RMUyBkZXZpY2Ugb2ZmbG9hZCBvdmVyIGEgbGlua2VkCiYjNDM7IyBuZXRkZXZzaW0gcGFpciwgb25lIHBvcnQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlLgomIzQzOyMKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNTQgIyBrc2Z0X3NraXAgY29tZXMgZnJvbSBsaWIuc2gKJiM0MzsKJiM0MztsaWJfZGlyPSQoZGlybmFtZSAmIzM0OyQwJiMzNDspCiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLy4uLy4uLy4uL25ldC9saWIuc2gKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTEKJiM0Mztzb3VyY2UgJiMzNDskbGliX2RpciYjMzQ7Ly4uLy4uLy4uL25ldC9saWIuc2gKJiM0MzsKJiM0MztOU0lNX0RFVl8xX0lEPSQoKDI1NiAmIzQzOyBSQU5ET00gJSAyNTYpKQomIzQzO05TSU1fREVWXzFfU1lTPS9zeXMvYnVzL25ldGRldnNpbS9kZXZpY2VzL25ldGRldnNpbSROU0lNX0RFVl8xX0lECiYjNDM7TlNJTV9ERVZfMl9JRD0kKCg1MTIgJiM0MzsgUkFORE9NICUgMjU2KSkKJiM0MztOU0lNX0RFVl8yX1NZUz0vc3lzL2J1cy9uZXRkZXZzaW0vZGV2aWNlcy9uZXRkZXZzaW0kTlNJTV9ERVZfMl9JRAomIzQzOwomIzQzO05TSU1fREVWX1NZU19ORVc9L3N5cy9idXMvbmV0ZGV2c2ltL25ld19kZXZpY2UKJiM0MztOU0lNX0RFVl9TWVNfREVMPS9zeXMvYnVzL25ldGRldnNpbS9kZWxfZGV2aWNlCiYjNDM7TlNJTV9ERVZfU1lTX0xJTks9L3N5cy9idXMvbmV0ZGV2c2ltL2xpbmtfZGV2aWNlCiYjNDM7CiYjNDM7REVCVUdGUz0vc3lzL2tlcm5lbC9kZWJ1Zy9uZXRkZXZzaW0KJiM0MztOU0lNX0RFVl8xX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMV9JRC9wb3J0cy8wL3RscwomIzQzO05TSU1fREVWXzJfVExTPSRERUJVR0ZTL25ldGRldnNpbSROU0lNX0RFVl8yX0lEL3BvcnRzLzAvdGxzCiYjNDM7CiYjNDM7U1JWX0lQPTE5Mi4xNjguMTMuMQomIzQzO0NMSV9JUD0xOTIuMTY4LjEzLjIKJiM0MztQT1JUPTQ0MzMKJiM0MzsKJiM0MztTWU5DRElSPQomIzQzO0JJTj0kbGliX2Rpci90bHNfb2ZmbG9hZAomIzQzOwomIzQzO251bV9wYXNzPTAKJiM0MztudW1fZmFpbD0wCiYjNDM7CiYjNDM7Y2hlY2soKQomIzQzO3sKJiM0MzsJbG9jYWwgbXNnPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCByZXQ9JiMzNDskMiYjMzQ7CiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskcmV0JiMzNDsgLWVxIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1BBU1M6ICRtc2cmIzM0OwomIzQzOwkJbnVtX3Bhc3M9JCgobnVtX3Bhc3MgJiM0MzsgMSkpCiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAkbXNnJiMzNDsKJiM0MzsJCW51bV9mYWlsPSQoKG51bV9mYWlsICYjNDM7IDEpKQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcsU0MyMzI5ICMgaW52b2tlZCBmcm9tIHRoZSBFWElUIHRyYXAKJiM0MztjbGVhbnVwKCkKJiM0Mzt7CiYjNDM7CWlwIG5ldG5zIGRlbCBuc2NsIDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIG5ldG5zIGRlbCBuc3N2IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gJiMzNDskTlNJTV9ERVZfMl9JRCYjMzQ7ICZndDsgJiMzNDskTlNJTV9ERVZfU1lTX0RFTCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gJiMzNDskTlNJTV9ERVZfMV9JRCYjMzQ7ICZndDsgJiMzNDskTlNJTV9ERVZfU1lTX0RFTCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CVsgLW4gJiMzNDskU1lOQ0RJUiYjMzQ7IF0gJmFtcDsmYW1wOyBybSAtcmYgJiMzNDskU1lOQ0RJUiYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3NldHVwKCkKJiM0Mzt7CiYjNDM7CXNldCAtZQomIzQzOwomIzQzOwllY2hvICYjMzQ7JE5TSU1fREVWXzFfSUQmIzM0OyAmZ3Q7ICYjMzQ7JE5TSU1fREVWX1NZU19ORVcmIzM0OwomIzQzOwllY2hvICYjMzQ7JE5TSU1fREVWXzJfSUQmIzM0OyAmZ3Q7ICYjMzQ7JE5TSU1fREVWX1NZU19ORVcmIzM0OwomIzQzOwl1ZGV2YWRtIHNldHRsZSAyJmd0Oy9kZXYvbnVsbCB8fCBzbGVlcCAxCiYjNDM7CiYjNDM7CU5TSU1fREVWXzFfTkFNRT0kKGZpbmQgJiMzNDskTlNJTV9ERVZfMV9TWVMmIzM0Oy9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFwKJiM0MzsJCS1wYXRoICYjMzQ7JE5TSU1fREVWXzFfU1lTJiMzNDsvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFw7KQomIzQzOwlOU0lNX0RFVl8yX05BTUU9JChmaW5kICYjMzQ7JE5TSU1fREVWXzJfU1lTJiMzNDsvbmV0IC1tYXhkZXB0aCAxIC10eXBlIGQgISBcCiYjNDM7CQktcGF0aCAmIzM0OyROU0lNX0RFVl8yX1NZUyYjMzQ7L25ldCAtZXhlYyBiYXNlbmFtZSB7fSBcOykKJiM0MzsKJiM0MzsJaXAgbmV0bnMgYWRkIG5zc3YKJiM0MzsJaXAgbmV0bnMgYWRkIG5zY2wKJiM0MzsKJiM0MzsJaXAgbGluayBzZXQgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgbmV0bnMgbnNzdgomIzQzOwlpcCBsaW5rIHNldCAmIzM0OyROU0lNX0RFVl8yX05BTUUmIzM0OyBuZXRucyBuc2NsCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBhZGRyIGFkZCAmIzM0OyRTUlZfSVAvMjQmIzM0OyBkZXYgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsKJiM0MzsJaXAgbmV0bnMgZXhlYyBuc2NsIGlwIGFkZHIgYWRkICYjMzQ7JENMSV9JUC8yNCYjMzQ7IGRldiAmIzM0OyROU0lNX0RFVl8yX05BTUUmIzM0OwomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICYjMzQ7JE5TSU1fREVWXzFfTkFNRSYjMzQ7IHVwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBsaW5rIHNldCBkZXYgJiMzNDskTlNJTV9ERVZfMl9OQU1FJiMzNDsgdXAKJiM0MzsKJiM0MzsJTlNJTV9ERVZfMV9GRD0kKCgyNTYgJiM0MzsgUkFORE9NICUgMjU2KSkKJiM0MzsJZXhlYyB7TlNJTV9ERVZfMV9GRH0mbHQ7L3Zhci9ydW4vbmV0bnMvbnNzdgomIzQzOwlOU0lNX0RFVl8xX0lGSURYPSQoaXAgbmV0bnMgZXhlYyBuc3N2IFwKJiM0MzsJCWNhdCAvc3lzL2NsYXNzL25ldC8mIzM0OyROU0lNX0RFVl8xX05BTUUmIzM0Oy9pZmluZGV4KQomIzQzOwomIzQzOwlOU0lNX0RFVl8yX0ZEPSQoKDI1NiAmIzQzOyBSQU5ET00gJSAyNTYpKQomIzQzOwlleGVjIHtOU0lNX0RFVl8yX0ZEfSZsdDsvdmFyL3J1bi9uZXRucy9uc2NsCiYjNDM7CU5TSU1fREVWXzJfSUZJRFg9JChpcCBuZXRucyBleGVjIG5zY2wgXAomIzQzOwkJY2F0IC9zeXMvY2xhc3MvbmV0LyYjMzQ7JE5TSU1fREVWXzJfTkFNRSYjMzQ7L2lmaW5kZXgpCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDskTlNJTV9ERVZfMV9GRDokTlNJTV9ERVZfMV9JRklEWCAkTlNJTV9ERVZfMl9GRDokTlNJTV9ERVZfMl9JRklEWCYjMzQ7IFwKJiM0MzsJCSZndDsgJiMzNDskTlNJTV9ERVZfU1lTX0xJTksmIzM0OwomIzQzOwomIzQzOwlTWU5DRElSPSQobWt0ZW1wIC1kKQomIzQzOwlzZXQgJiM0MztlCiYjNDM7fQomIzQzOwomIzQzO2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmV0bnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZmVhdD0mIzM0OyQzJiMzNDsKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuZXRucyYjMzQ7IGV0aHRvb2wgLWsgJiMzNDskZGV2JiMzNDsgMiZndDsvZGV2L251bGwgfCBcCiYjNDM7CQlzZWQgLW4gJiMzNDtzL14kZmVhdDogXChbYS16XSpcKS4qL1wxL3AmIzM0OwomIzQzO30KJiM0MzsKJiM0MztkYmdfZmllbGQoKQomIzQzO3sKJiM0MzsJc2VkIC1uICYjMzQ7cy8uKlwmbHQ7JDI9XChbMC05XSpcKS4qL1wxL3AmIzM0OyAmIzM0OyQxJiMzNDsgfCBoZWFkIC0xCiYjNDM7fQomIzQzOwomIzQzO3Rsc19zdGF0KCkKJiM0Mzt7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskMSYjMzQ7IGNhdCAvcHJvYy9uZXQvdGxzX3N0YXQgfCBcCiYjNDM7CQlzZWQgLW4gJiMzNDtzL14kMiBcKFswLTldKlwpL1wxL3AmIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIEJvdGggZW5kcyBwYXJrIG9uY2UgdGhlaXIgb2ZmbG9hZCBpcyBpbnN0YWxsZWQgYW5kIGJlZm9yZSBhbnkgZGF0YSBpcwomIzQzOyMgc2VudCwgc28gdGhlIGRyaXZlciYjMzk7cyBjb250ZXh0IGNvdW50IGNhbiBiZSBzYW1wbGVkIHdpdGhvdXQgcmFjaW5nIHRoZQomIzQzOyMgdHJhbnNmZXIuICBQYXNzICYjMzQ7bm9zYW1wbGUmIzM0OyB3aGVuIHRoZSBvZmZsb2FkIGlzIGV4cGVjdGVkIHRvIGJlIHJlZnVzZWQsCiYjNDM7IyBzaW5jZSB0aGVuIG5laXRoZXIgZW5kIGV2ZXIgcmVhY2hlcyB0aGUgYmFycmllci4KJiM0MztydW5fcGFpcigpCiYjNDM7ewomIzQzOwlsb2NhbCBzYW1wbGU9JiMzNDskezE6LXNhbXBsZX0mIzM0OwomIzQzOwlsb2NhbCBzcnZfcmMgY2xpX3JjIHdhaXRlZD0wCiYjNDM7CiYjNDM7CXJtIC1mICYjMzQ7JFNZTkNESVImIzM0Oy8qLnJlYWR5ICYjMzQ7JFNZTkNESVImIzM0Oy9nbwomIzQzOwlDT05OU18xPTAKJiM0MzsJQ09OTlNfMj0wCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNzdiAmIzM0OyRCSU4mIzM0OyBzZXJ2ZXIgJiMzNDskU1JWX0lQJiMzNDsgJiMzNDskUE9SVCYjMzQ7ICYjMzQ7JFNZTkNESVImIzM0OyAmYW1wOwomIzQzOwlsb2NhbCBzcnZfcGlkPSQhCiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNjbCAmIzM0OyRCSU4mIzM0OyBjbGllbnQgJiMzNDskU1JWX0lQJiMzNDsgJiMzNDskUE9SVCYjMzQ7ICYjMzQ7JFNZTkNESVImIzM0OyAmYW1wOwomIzQzOwlsb2NhbCBjbGlfcGlkPSQhCiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskc2FtcGxlJiMzNDsgPSAmIzM0O3NhbXBsZSYjMzQ7IF07IHRoZW4KJiM0MzsJCXdoaWxlIFsgISAtZSAmIzM0OyRTWU5DRElSL3NlcnZlci5yZWFkeSYjMzQ7IF0gfHwKJiM0MzsJCSAgICAgIFsgISAtZSAmIzM0OyRTWU5DRElSL2NsaWVudC5yZWFkeSYjMzQ7IF07IGRvCiYjNDM7CQkJWyAmIzM0OyR3YWl0ZWQmIzM0OyAtZ2UgMjAwIF0gJmFtcDsmYW1wOyBicmVhawomIzQzOwkJCXNsZWVwIDAuMDUKJiM0MzsJCQl3YWl0ZWQ9JCgod2FpdGVkICYjNDM7IDEpKQomIzQzOwkJZG9uZQomIzQzOwkJQ09OTlNfMT0kKGRiZ19maWVsZCAmIzM0OyROU0lNX0RFVl8xX1RMUyYjMzQ7IGNvdW50KQomIzQzOwkJQ09OTlNfMj0kKGRiZ19maWVsZCAmIzM0OyROU0lNX0RFVl8yX1RMUyYjMzQ7IGNvdW50KQomIzQzOwkJOiAmIzM0OyR7Q09OTlNfMTo9MH0mIzM0OwomIzQzOwkJOiAmIzM0OyR7Q09OTlNfMjo9MH0mIzM0OwomIzQzOwlmaQomIzQzOwl0b3VjaCAmIzM0OyRTWU5DRElSL2dvJiMzNDsKJiM0MzsKJiM0MzsJd2FpdCAmIzM0OyRzcnZfcGlkJiMzNDs7IHNydl9yYz0kPwomIzQzOwl3YWl0ICYjMzQ7JGNsaV9waWQmIzM0OzsgY2xpX3JjPSQ/CiYjNDM7CiYjNDM7CVsgJiMzNDskc3J2X3JjJiMzNDsgLWVxIDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskY2xpX3JjJiMzNDsgLWVxIDAgXQomIzQzO30KJiM0MzsKJiM0MzsjIyMKJiM0MzsjIyMgQ29kZSBzdGFydAomIzQzOyMjIwomIzQzOwomIzQzO2lmIFsgJiMzNDskKGlkIC11KSYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IG5lZWQgcm9vdCYjMzQ7CiYjNDM7CWV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmICEgY29tbWFuZCAtdiBldGh0b29sICZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IGV0aHRvb2wgbm90IGZvdW5kJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7aWYgWyAhIC14ICYjMzQ7JEJJTiYjMzQ7IF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6ICRCSU4gbm90IGJ1aWx0JiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7bW9kcHJvYmUgbmV0ZGV2c2ltIDImZ3Q7L2Rldi9udWxsCiYjNDM7aWYgWyAhIC1kIC9zeXMvYnVzL25ldGRldnNpbSBdOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBuZXRkZXZzaW0gbm90IGF2YWlsYWJsZSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO21vZHByb2JlIHRscyAyJmd0Oy9kZXYvbnVsbAomIzQzO2lmIFsgISAtZSAvcHJvYy9uZXQvdGxzX3N0YXQgXTsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDoga2VybmVsIFRMUyBub3QgYXZhaWxhYmxlJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7dHJhcCBjbGVhbnVwIEVYSVQKJiM0MztzZXR1cAomIzQzOwomIzQzOyMgVGhlIG9mZmxvYWQgaGFzIHRvIGJlIGFkdmVydGlzZWQsIGFuZCBvbiBieSBkZWZhdWx0IGxpa2UgdGhlIG90aGVyCiYjNDM7IyBuZXRkZXZzaW0gY3J5cHRvIG9mZmxvYWRzLgomIzQzO2ZvciBmIGluIHRscy1ody10eC1vZmZsb2FkIHRscy1ody1yeC1vZmZsb2FkOyBkbwomIzQzOwlbICYjMzQ7JChmZWF0dXJlIG5zc3YgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgJiMzNDskZiYjMzQ7KSYjMzQ7ID0gJiMzNDtvbiYjMzQ7IF0KJiM0MzsJY2hlY2sgJiMzNDskZiBhZHZlcnRpc2VkIGFuZCBvbiBieSBkZWZhdWx0JiMzNDsgJD8KJiM0Mztkb25lCiYjNDM7CiYjNDM7WyAtZSAmIzM0OyROU0lNX0RFVl8xX1RMUyYjMzQ7IF0KJiM0MztjaGVjayAmIzM0O3Blci1wb3J0IGRlYnVnZnMgdGxzIGZpbGUgZXhpc3RzJiMzNDsgJD8KJiM0MzsKJiM0MzsjIE1haW4gZGF0YSBwYXRoIHJ1bi4KJiM0MztydW5fcGFpcgomIzQzO2NoZWNrICYjMzQ7b2ZmbG9hZGVkIFRMUyBkYXRhIHRyYW5zZmVyJiMzNDsgJD8KJiM0MzsKJiM0MzsjIFNhbXBsZWQgYXQgdGhlIGJhcnJpZXIsIHNvIGVhY2ggcG9ydCBtdXN0IGJlIGhvbGRpbmcgZXhhY3RseSB0aGUgVFggYW5kCiYjNDM7IyB0aGUgUlggY29udGV4dCBvZiBpdHMgb3duIHNvY2tldC4KJiM0MztbICYjMzQ7JENPTk5TXzEmIzM0OyAtZXEgMiBdICZhbXA7JmFtcDsgWyAmIzM0OyRDT05OU18yJiMzNDsgLWVxIDIgXQomIzQzO2NoZWNrICYjMzQ7dHggYW5kIHJ4IGNvbnRleHRzIGluc3RhbGxlZCBvbiBib3RoIHBvcnRzJiMzNDsgJD8KJiM0MzsKJiM0MzsjIEJvdGggZW5kcyBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHRoZSBkZXZpY2UgcGF0aCwgbm90IHRoZSBTVyBmYWxsYmFjay4KJiM0MztbICYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKSYjMzQ7IC1nZSAxIF0gJmFtcDsmYW1wOyBcCiYjNDM7CVsgJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzUnhEZXZpY2UpJiMzNDsgLWdlIDEgXSAmYW1wOyZhbXA7IFwKJiM0MzsJWyAmIzM0OyQodGxzX3N0YXQgbnNjbCBUbHNUeERldmljZSkmIzM0OyAtZ2UgMSBdICZhbXA7JmFtcDsgXAomIzQzOwlbICYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKSYjMzQ7IC1nZSAxIF0KJiM0MztjaGVjayAmIzM0O2JvdGggZW5kcyB1c2VkIHRoZSBkZXZpY2UgcGF0aCYjMzQ7ICQ/CiYjNDM7CiYjNDM7WyAmIzM0OyQodGxzX3N0YXQgbnNzdiBUbHNUeFN3KSYjMzQ7IC1lcSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1R4U3cpJiMzNDsgLWVxIDAgXQomIzQzO2NoZWNrICYjMzQ7bm8gc2lsZW50IGZhbGxiYWNrIHRvIHRoZSBzb2Z0d2FyZSBwYXRoJiMzNDsgJD8KJiM0MzsKJiM0MztbICYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc0RlY3J5cHRFcnJvcikmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgXAomIzQzOwlbICYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc0RlY3J5cHRFcnJvcikmIzM0OyAtZXEgMCBdCiYjNDM7Y2hlY2sgJiMzNDtubyBkZWNyeXB0IGVycm9ycyYjMzQ7ICQ/CiYjNDM7CiYjNDM7IyBUaGUgZHJpdmVyIG11c3QgaGF2ZSBzZWVuIHRoZSByZWNvcmRzIGdvIGJ5IGluIGJvdGggZGlyZWN0aW9ucy4KJiM0MztbICYjMzQ7JChkYmdfZmllbGQgJiMzNDskTlNJTV9ERVZfMV9UTFMmIzM0OyB0eF9wYWNrZXRzKSYjMzQ7IC1nZSAxIF0gJmFtcDsmYW1wOyBcCiYjNDM7CVsgJiMzNDskKGRiZ19maWVsZCAmIzM0OyROU0lNX0RFVl8xX1RMUyYjMzQ7IHJ4X3BhY2tldHMpJiMzNDsgLWdlIDEgXSAmYW1wOyZhbXA7IFwKJiM0MzsJWyAmIzM0OyQoZGJnX2ZpZWxkICYjMzQ7JE5TSU1fREVWXzJfVExTJiMzNDsgdHhfcGFja2V0cykmIzM0OyAtZ2UgMSBdICZhbXA7JmFtcDsgXAomIzQzOwlbICYjMzQ7JChkYmdfZmllbGQgJiMzNDskTlNJTV9ERVZfMl9UTFMmIzM0OyByeF9wYWNrZXRzKSYjMzQ7IC1nZSAxIF0KJiM0MztjaGVjayAmIzM0O2RyaXZlciBjb3VudGVkIG9mZmxvYWRlZCBwYWNrZXRzIGJvdGggd2F5cyYjMzQ7ICQ/CiYjNDM7CiYjNDM7IyBTb2NrZXRzIGFyZSBjbG9zZWQgYnkgbm93LCBzbyBldmVyeSBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGdpdmVuIGJhY2suCiYjNDM7WyAmIzM0OyQoZGJnX2ZpZWxkICYjMzQ7JE5TSU1fREVWXzFfVExTJiMzNDsgY291bnQpJiMzNDsgLWVxIDAgXSAmYW1wOyZhbXA7IFwKJiM0MzsJWyAmIzM0OyQoZGJnX2ZpZWxkICYjMzQ7JE5TSU1fREVWXzJfVExTJiMzNDsgY291bnQpJiMzNDsgLWVxIDAgXQomIzQzO2NoZWNrICYjMzQ7YWxsIG9mZmxvYWQgY29udGV4dHMgcmVsZWFzZWQgb24gY2xvc2UmIzM0OyAkPwomIzQzOwomIzQzO1sgJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzQ3VyclR4RGV2aWNlKSYjMzQ7IC1lcSAwIF0gJmFtcDsmYW1wOyBcCiYjNDM7CVsgJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzQ3VyclJ4RGV2aWNlKSYjMzQ7IC1lcSAwIF0KJiM0MztjaGVjayAmIzM0O25vIGRldmljZSBjb250ZXh0cyBsZWZ0IGJlaGluZCYjMzQ7ICQ/CiYjNDM7CiYjNDM7IyBUdXJuaW5nIHRoZSBmZWF0dXJlIG9mZiBoYXMgdG8gbWFrZSB0aGUgb2ZmbG9hZCByZWZ1c2UgdGhlIGNvbm5lY3Rpb247CiYjNDM7IyB0aGUgdGVzdCBiaW5hcnkgaW5zaXN0cyBvbiB0aGUgZGV2aWNlIHBhdGgsIHNvIGl0IG11c3Qgbm93IGZhaWwuCiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmCiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmCiYjNDM7aXAgbmV0bnMgZXhlYyBuc2NsIGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMl9OQU1FJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmCiYjNDM7aXAgbmV0bnMgZXhlYyBuc2NsIGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMl9OQU1FJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmCiYjNDM7CiYjNDM7cnVuX3BhaXIgbm9zYW1wbGUKJiM0MztyYz0kPwomIzQzO1sgJiMzNDskcmMmIzM0OyAtbmUgMCBdCiYjNDM7Y2hlY2sgJiMzNDtvZmZsb2FkIGRlY2xpbmVkIG9uY2UgdGhlIGZlYXR1cmUgaXMgb2ZmJiMzNDsgJD8KJiM0MzsKJiM0MztbICYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4U3cpJiMzNDsgLWdlIDEgXQomIzQzO2NoZWNrICYjMzQ7c29mdHdhcmUgcGF0aCB1c2VkIHdoZW4gb2ZmbG9hZCBpcyBvZmYmIzM0OyAkPwomIzQzOwomIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LICYjMzQ7JE5TSU1fREVWXzFfTkFNRSYjMzQ7IHRscy1ody10eC1vZmZsb2FkIG9uCiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb24KJiM0MztpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyAmIzM0OyROU0lNX0RFVl8yX05BTUUmIzM0OyB0bHMtaHctdHgtb2ZmbG9hZCBvbgomIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LICYjMzQ7JE5TSU1fREVWXzJfTkFNRSYjMzQ7IHRscy1ody1yeC1vZmZsb2FkIG9uCiYjNDM7CiYjNDM7cnVuX3BhaXIKJiM0MztjaGVjayAmIzM0O29mZmxvYWQgd29ya3MgYWdhaW4gYWZ0ZXIgcmUtZW5hYmxpbmcmIzM0OyAkPwomIzQzOwomIzQzO2VjaG8KJiM0MztlY2hvICYjMzQ7cGFzc2VkOiAkbnVtX3Bhc3MgZmFpbGVkOiAkbnVtX2ZhaWwmIzM0OwomIzQzO1sgJiMzNDskbnVtX2ZhaWwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgZXhpdCAwCiYjNDM7ZXhpdCAxCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHNfb2ZmbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmI0YmZjZDRmNDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuYwpAQCAtMCwwICYjNDM7MSw0OTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICoga1RMUyBkZXZpY2Ugb2ZmbG9hZCBkYXRhIHBhdGggZXhlcmNpc2UsIGRyaXZlbiBieSB0bHMuc2guCiYjNDM7ICoKJiM0MzsgKiBPbmUgaW5zdGFuY2UgcnVucyBhcyB0aGUgc2VydmVyIGFuZCBvbmUgYXMgdGhlIGNsaWVudCwgZWFjaCBpbiBpdHMgb3duCiYjNDM7ICogbmV0d29yayBuYW1lc3BhY2UsIGNvbm5lY3RlZCBiYWNrIHRvIGJhY2sgYnkgYSBsaW5rZWQgbmV0ZGV2c2ltIHBhaXIuCiYjNDM7ICogQm90aCBlbmRzIGVuYWJsZSBrVExTIGFuZCByZWx5IG9uIG5ldGRldnNpbSYjMzk7cyBlbXVsYXRlZCBUTFMgb2ZmbG9hZCwgc28KJiM0MzsgKiBldmVyeSByZWNvcmQgdHJhdmVscyB0aHJvdWdoIG5ldC90bHMvdGxzX2RldmljZS5jIHJhdGhlciB0aGFuIHRoZQomIzQzOyAqIHNvZnR3YXJlIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBUaGUgdHdvIHByb2Nlc3NlcyByZW5kZXp2b3VzIHRocm91Z2ggYSBzaGFyZWQgZGlyZWN0b3J5IHNvIHRoYXQgbmVpdGhlcgomIzQzOyAqIHNpZGUgc2VuZHMgYmVmb3JlIHRoZSBvdGhlciBoYXMgaW5zdGFsbGVkIGl0cyBSWCBvZmZsb2FkLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXRpbmV0L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Rscy5oJmd0OwomIzQzOwomIzQzOyNpZm5kZWYgU09MX1RMUwomIzQzOyNkZWZpbmUgU09MX1RMUwkJCTI4MgomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgVENQX1VMUAomIzQzOyNkZWZpbmUgVENQX1VMUAkJCTMxCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBCVUxLX0xFTgkJKDIwMCAqIDEwMjQpCiYjNDM7I2RlZmluZSBNT1JFX0ZSQUdTCQk2NAomIzQzOyNkZWZpbmUgU1BMSUNFX0ZSQUdfTEVOCQk0MDk2CiYjNDM7I2RlZmluZSBTUExJQ0VfRlJBR1MJCTgKJiM0MzsKJiM0MzsvKiBUTFNfTUlOX1JFQ09SRF9TSVpFX0xJTSBhbmQgVExTX01BWF9QQVlMT0FEX1NJWkUsIHdoaWNoIGFyZSBub3QgdWFwaS4gKi8KJiM0MzsjZGVmaW5lIFJFQ19MSU1fTUlOCQk2NAomIzQzOyNkZWZpbmUgUkVDX0xJTV9NQVgJCTE2Mzg0CiYjNDM7CiYjNDM7I2RlZmluZSBTTUFMTF9SRUNTCQkxMDAKJiM0MzsjZGVmaW5lIFNNQUxMX0xFTgkJKFJFQ19MSU1fTUlOICogU01BTExfUkVDUykKJiM0MzsKJiM0MzsjZGVmaW5lIFNZTkNfVElNRU9VVF9NUwkJMjAwMDAKJiM0MzsjZGVmaW5lIENPTk5FQ1RfVElNRU9VVF9NUwkyMDAwMAomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpyb2xlOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICp3aGF0KQomIzQzO3sKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6ICVzOiAlc1xuJiMzNDssIHJvbGUsIHdoYXQsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWV4aXQoMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZhaWwoY29uc3QgY2hhciAqZm10LCAuLi4pCiYjNDM7ewomIzQzOwl2YV9saXN0IGFwOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDslczogJiMzNDssIHJvbGUpOwomIzQzOwl2YV9zdGFydChhcCwgZm10KTsKJiM0MzsJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKJiM0MzsJdmFfZW5kKGFwKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CWV4aXQoMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1zbGVlcCh1bnNpZ25lZCBpbnQgbXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7CiYjNDM7CQkudHZfc2VjID0gbXMgLyAxMDAwLAomIzQzOwkJLnR2X25zZWMgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDBMLAomIzQzOwl9OwomIzQzOwomIzQzOwluYW5vc2xlZXAoJmFtcDt0cywgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIC9wcm9jL25ldC90bHNfc3RhdCBpcyBwZXIgbmV0bnMsIHNvIGJvdGggZW5kcyBjYW4gY2hlY2sgdGhhdCB0aGVpciBvd24KJiM0MzsgKiBjb25uZWN0aW9uIHJlYWxseSBsYW5kZWQgb24gdGhlIGRldmljZSBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfdGxzX3N0YXQoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgbGluZVsyNTZdOwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKCYjMzQ7L3Byb2MvbmV0L3Rsc19zdGF0JiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJZGllKCYjMzQ7b3BlbiAvcHJvYy9uZXQvdGxzX3N0YXQmIzM0Oyk7CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CiYjNDM7CQljaGFyIGtleVs2NF07CiYjNDM7CiYjNDM7CQlpZiAoc3NjYW5mKGxpbmUsICYjMzQ7JTYzcyAlbHUmIzM0Oywga2V5LCAmYW1wO3ZhbCkgIT0gMikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghc3RyY21wKGtleSwgbmFtZSkpIHsKJiM0MzsJCQlmY2xvc2UoZik7CiYjNDM7CQkJcmV0dXJuIHZhbDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmY2xvc2UoZik7CiYjNDM7CWZhaWwoJiMzNDslcyBub3QgZm91bmQgaW4gL3Byb2MvbmV0L3Rsc19zdGF0JiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZmlsbF9wYXR0ZXJuKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IHNlZWQpCiYjNDM7ewomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbjsgaSYjNDM7JiM0MzspCiYjNDM7CQlidWZbaV0gPSAoY2hhcikoc2VlZCAmIzQzOyBpICogMzEgJiM0MzsgKGkgJmd0OyZndDsgOCkgKiA3KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcGF0dGVybihjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBzZWVkLAomIzQzOwkJCSAgY29uc3QgY2hhciAqd2hhdCkKJiM0Mzt7CiYjNDM7CWNoYXIgKndhbnQgPSBtYWxsb2MobGVuKTsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghd2FudCkKJiM0MzsJCWRpZSgmIzM0O21hbGxvYyYjMzQ7KTsKJiM0MzsKJiM0MzsJZmlsbF9wYXR0ZXJuKHdhbnQsIGxlbiwgc2VlZCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoYnVmW2ldICE9IHdhbnRbaV0pCiYjNDM7CQkJZmFpbCgmIzM0OyVzOiBwYXlsb2FkIG1pc21hdGNoIGF0IGJ5dGUgJXp1OiBnb3QgMHglMDJ4IHdhbnQgMHglMDJ4JiMzNDssCiYjNDM7CQkJICAgICB3aGF0LCBpLCAodW5zaWduZWQgY2hhcilidWZbaV0sCiYjNDM7CQkJICAgICAodW5zaWduZWQgY2hhcil3YW50W2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmcmVlKHdhbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlzaXplX3QgZG9uZSA9IDA7CiYjNDM7CiYjNDM7CXdoaWxlIChkb25lICZsdDsgbGVuKSB7CiYjNDM7CQlzc2l6ZV90IG4gPSBzZW5kKGZkLCBidWYgJiM0MzsgZG9uZSwgbGVuIC0gZG9uZSwgMCk7CiYjNDM7CiYjNDM7CQlpZiAobiAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWRpZSgmIzM0O3NlbmQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlkb25lICYjNDM7PSBuOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlYWRfYWxsKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IGRvbmUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IGxlbikgewomIzQzOwkJc3NpemVfdCBuID0gcmVjdihmZCwgYnVmICYjNDM7IGRvbmUsIGxlbiAtIGRvbmUsIDApOwomIzQzOwomIzQzOwkJaWYgKG4gJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlkaWUoJiMzNDtyZWN2JiMzNDspOwomIzQzOwkJfQomIzQzOwkJaWYgKG4gPT0gMCkKJiM0MzsJCQlmYWlsKCYjMzQ7cGVlciBjbG9zZWQgYWZ0ZXIgJXp1IG9mICV6dSBieXRlcyYjMzQ7LCBkb25lLCBsZW4pOwomIzQzOwkJZG9uZSAmIzQzOz0gbjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbmFibGVfa3RscyhpbnQgZmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggY2kgPSB7fTsKJiM0MzsJdW5zaWduZWQgbG9uZyB0eF9iZWZvcmUsIHJ4X2JlZm9yZTsKJiM0MzsKJiM0MzsJdHhfYmVmb3JlID0gcmVhZF90bHNfc3RhdCgmIzM0O1Rsc1R4RGV2aWNlJiMzNDspOwomIzQzOwlyeF9iZWZvcmUgPSByZWFkX3Rsc19zdGF0KCYjMzQ7VGxzUnhEZXZpY2UmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgJiMzNDt0bHMmIzM0Oywgc2l6ZW9mKCYjMzQ7dGxzJiMzNDspKSkKJiM0MzsJCWRpZSgmIzM0O3NldHNvY2tvcHQoVENQX1VMUCwgdGxzKSYjMzQ7KTsKJiM0MzsKJiM0MzsJY2kuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OOwomIzQzOwljaS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyODsKJiM0MzsJbWVtc2V0KGNpLml2LCAmIzM5O2kmIzM5Oywgc2l6ZW9mKGNpLml2KSk7CiYjNDM7CW1lbXNldChjaS5rZXksICYjMzk7ayYjMzk7LCBzaXplb2YoY2kua2V5KSk7CiYjNDM7CW1lbXNldChjaS5zYWx0LCAmIzM5O3MmIzM5Oywgc2l6ZW9mKGNpLnNhbHQpKTsKJiM0MzsJbWVtc2V0KGNpLnJlY19zZXEsIDAsIHNpemVvZihjaS5yZWNfc2VxKSk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFgsICZhbXA7Y2ksIHNpemVvZihjaSkpKQomIzQzOwkJZGllKCYjMzQ7c2V0c29ja29wdChUTFNfVFgpJiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1JYLCAmYW1wO2NpLCBzaXplb2YoY2kpKSkKJiM0MzsJCWRpZSgmIzM0O3NldHNvY2tvcHQoVExTX1JYKSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIHdob2xlIHBvaW50IG9mIHRoZSBleGVyY2lzZTogcmVmdXNlIHRvIHNpbGVudGx5IGZhbGwgYmFjayB0bwomIzQzOwkgKiB0aGUgc29mdHdhcmUgcGF0aCwgb3RoZXJ3aXNlIHRoZSB0ZXN0IHdvdWxkIHBhc3Mgd2l0aG91dCBldmVyCiYjNDM7CSAqIHRvdWNoaW5nIHRsc19kZXZpY2UuYy4KJiM0MzsJICovCiYjNDM7CWlmIChyZWFkX3Rsc19zdGF0KCYjMzQ7VGxzVHhEZXZpY2UmIzM0OykgIT0gdHhfYmVmb3JlICYjNDM7IDEpCiYjNDM7CQlmYWlsKCYjMzQ7VFggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzVHhEZXZpY2UgJWx1IC0mZ3Q7ICVsdSkmIzM0OywKJiM0MzsJCSAgICAgdHhfYmVmb3JlLCByZWFkX3Rsc19zdGF0KCYjMzQ7VGxzVHhEZXZpY2UmIzM0OykpOwomIzQzOwlpZiAocmVhZF90bHNfc3RhdCgmIzM0O1Rsc1J4RGV2aWNlJiMzNDspICE9IHJ4X2JlZm9yZSAmIzQzOyAxKQomIzQzOwkJZmFpbCgmIzM0O1JYIGRpZCBub3QgbGFuZCBvbiB0aGUgZGV2aWNlIHBhdGggKFRsc1J4RGV2aWNlICVsdSAtJmd0OyAlbHUpJiMzNDssCiYjNDM7CQkgICAgIHJ4X2JlZm9yZSwgcmVhZF90bHNfc3RhdCgmIzM0O1Rsc1J4RGV2aWNlJiMzNDspKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3luY19wYXRoKGNoYXIgKm91dCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICp3aG8pCiYjNDM7ewomIzQzOwlpZiAoKHNpemVfdClzbnByaW50ZihvdXQsIGxlbiwgJiMzNDslcy8lcy5yZWFkeSYjMzQ7LCBkaXIsIHdobykgJmd0Oz0gbGVuKQomIzQzOwkJZmFpbCgmIzM0O3N5bmMgZGlyIHBhdGggdG9vIGxvbmcmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcikKJiM0Mzt7CiYjNDM7CWNoYXIgbWluZVtQQVRIX01BWF0sIHRoZWlyc1tQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGludCB3YWl0ZWQgPSAwOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CXN5bmNfcGF0aChtaW5lLCBzaXplb2YobWluZSksIGRpciwgbWUpOwomIzQzOwlzeW5jX3BhdGgodGhlaXJzLCBzaXplb2YodGhlaXJzKSwgZGlyLCBwZWVyKTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlkaWUoJiMzNDtjcmVhdGUgc3luYyBmaWxlJiMzNDspOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CXdoaWxlIChhY2Nlc3ModGhlaXJzLCBGX09LKSkgewomIzQzOwkJaWYgKHdhaXRlZCAmZ3Q7PSBTWU5DX1RJTUVPVVRfTVMpCiYjNDM7CQkJZmFpbCgmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciAlcyYjMzQ7LCBwZWVyKTsKJiM0MzsJCW1zbGVlcCgyMCk7CiYjNDM7CQl3YWl0ZWQgJiM0Mzs9IDIwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIEJvdGggZW5kcyBzdG9wIGhlcmUgd2l0aCB0aGVpciBvZmZsb2FkIGluc3RhbGxlZCBhbmQgbm8gZGF0YSBzZW50IHlldCwKJiM0MzsgKiBzbyB0aGF0IHRoZSBkcml2ZXIgc3RhdGUgY2FuIGJlIGluc3BlY3RlZCBmcm9tIHRoZSBvdXRzaWRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX2dvKGNvbnN0IGNoYXIgKmRpcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB3YWl0ZWQgPSAwOwomIzQzOwljaGFyIGdvW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJaWYgKChzaXplX3Qpc25wcmludGYoZ28sIHNpemVvZihnbyksICYjMzQ7JXMvZ28mIzM0OywgZGlyKSAmZ3Q7PSBzaXplb2YoZ28pKQomIzQzOwkJZmFpbCgmIzM0O3N5bmMgZGlyIHBhdGggdG9vIGxvbmcmIzM0Oyk7CiYjNDM7CiYjNDM7CXdoaWxlIChhY2Nlc3MoZ28sIEZfT0spKSB7CiYjNDM7CQlpZiAod2FpdGVkICZndDs9IFNZTkNfVElNRU9VVF9NUykKJiM0MzsJCQlmYWlsKCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIGdvJiMzNDspOwomIzQzOwkJbXNsZWVwKDIwKTsKJiM0MzsJCXdhaXRlZCAmIzQzOz0gMjA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogU21hbGwgd3JpdGVzIHdpdGggTVNHX01PUkUgYWNjdW11bGF0ZSBpbnRvIG9uZSBvcGVuIHJlY29yZCBiZWZvcmUgaXQgaXMKJiM0MzsgKiBwdXNoZWQsIHdoaWNoIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRsc19wdXNoX2RhdGEoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX21zZ19tb3JlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZltNT1JFX0ZSQUdTICYjNDM7IDFdOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTU9SRV9GUkFHUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZW5kKGZkLCBidWYgJiM0MzsgaSwgMSwgTVNHX01PUkUpICE9IDEpCiYjNDM7CQkJZGllKCYjMzQ7c2VuZChNU0dfTU9SRSkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsJaWYgKHNlbmQoZmQsIGJ1ZiAmIzQzOyBNT1JFX0ZSQUdTLCAxLCAwKSAhPSAxKQomIzQzOwkJZGllKCYjMzQ7c2VuZChsYXN0KSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyogc3BsaWNlKCkgcmVhY2hlcyB0bHNfcHVzaF9kYXRhKCkgd2l0aCBNU0dfU1BMSUNFX1BBR0VTIG9uY2UKJiM0MzsgKiBUTFNfVFhfWkVST0NPUFlfUk8gaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBkaXN0aW5jdCBmcmFnbWVudCBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNlbmRfc3BsaWNlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZltTUExJQ0VfRlJBR19MRU5dOwomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sICZhbXA7dmFsLCBzaXplb2YodmFsKSkpCiYjNDM7CQlkaWUoJiMzNDtzZXRzb2Nrb3B0KFRMU19UWF9aRVJPQ09QWV9STykmIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBTUExJQ0VfRlJBR1M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcFsyXTsKJiM0MzsKJiM0MzsJCWZpbGxfcGF0dGVybihidWYsIHNpemVvZihidWYpLCBzZWVkICYjNDM7IGkgKiBTUExJQ0VfRlJBR19MRU4pOwomIzQzOwomIzQzOwkJaWYgKHBpcGUocCkpCiYjNDM7CQkJZGllKCYjMzQ7cGlwZSYjMzQ7KTsKJiM0MzsJCWlmICh3cml0ZShwWzFdLCBidWYsIHNpemVvZihidWYpKSAhPSBzaXplb2YoYnVmKSkKJiM0MzsJCQlkaWUoJiMzNDt3cml0ZSB0byBwaXBlJiMzNDspOwomIzQzOwkJaWYgKHNwbGljZShwWzBdLCBOVUxMLCBmZCwgTlVMTCwgc2l6ZW9mKGJ1ZiksCiYjNDM7CQkJICAgaSA9PSBTUExJQ0VfRlJBR1MgLSAxID8gMCA6IFNQTElDRV9GX01PUkUpICE9CiYjNDM7CQkgICAgc2l6ZW9mKGJ1ZikpCiYjNDM7CQkJZGllKCYjMzQ7c3BsaWNlJiMzNDspOwomIzQzOwkJY2xvc2UocFswXSk7CiYjNDM7CQljbG9zZShwWzFdKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2YWwgPSAwOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLCAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCkpKQomIzQzOwkJZGllKCYjMzQ7c2V0c29ja29wdChUTFNfVFhfWkVST0NPUFlfUk8gb2ZmKSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSByZWNvcmQgY2FuIGJlIHVwIHRvIDE2Sywgc28gbm9ybWFsbHkgb25lIHNlZ21lbnQgY2FycmllcyBhIHBpZWNlIG9mIGEKJiM0MzsgKiBzaW5nbGUgcmVjb3JkLiAgU2hyaW5raW5nIHRoZSBsaW1pdCBwdXRzIGEgZG96ZW4gb3Igc28gd2hvbGUgcmVjb3JkcyBpbgomIzQzOyAqIGV2ZXJ5IHNlZ21lbnQgaW5zdGVhZCwgd2hpY2ggaXMgdGhlIG11bHRpLXJlY29yZCBwYXRoIHRocm91Z2ggdGhlIGRyaXZlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX3NtYWxsX3JlY29yZHMoaW50IGZkLCB1bnNpZ25lZCBpbnQgc2VlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmW1NNQUxMX0xFTl07CiYjNDM7CXVpbnQxNl90IGxpbWl0OwomIzQzOwomIzQzOwlsaW1pdCA9IFJFQ19MSU1fTUlOOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgJmFtcDtsaW1pdCwKJiM0MzsJCSAgICAgICBzaXplb2YobGltaXQpKSkKJiM0MzsJCWRpZSgmIzM0O3NldHNvY2tvcHQoVExTX1RYX01BWF9QQVlMT0FEX0xFTikmIzM0Oyk7CiYjNDM7CiYjNDM7CWZpbGxfcGF0dGVybihidWYsIHNpemVvZihidWYpLCBzZWVkKTsKJiM0MzsJd3JpdGVfYWxsKGZkLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsKJiM0MzsJbGltaXQgPSBSRUNfTElNX01BWDsKJiM0MzsJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9NQVhfUEFZTE9BRF9MRU4sICZhbXA7bGltaXQsCiYjNDM7CQkgICAgICAgc2l6ZW9mKGxpbWl0KSkpCiYjNDM7CQlkaWUoJiMzNDtzZXRzb2Nrb3B0KFRMU19UWF9NQVhfUEFZTE9BRF9MRU4gcmVzdG9yZSkmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgU0VFRF9DMlNfQlVMSwkweDExCiYjNDM7I2RlZmluZSBTRUVEX1MyQ19CVUxLCTB4MjIKJiM0MzsjZGVmaW5lIFNFRURfQzJTX01PUkUJMHgzMwomIzQzOyNkZWZpbmUgU0VFRF9DMlNfU1BMSUNFCTB4NDQKJiM0MzsjZGVmaW5lIFNFRURfQzJTX1NNQUxMCTB4NTUKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fY2xpZW50KGludCBmZCkKJiM0Mzt7CiYjNDM7CWNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7CiYjNDM7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJZGllKCYjMzQ7bWFsbG9jJiMzNDspOwomIzQzOwomIzQzOwlmaWxsX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSyk7CiYjNDM7CXdyaXRlX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7CiYjNDM7CiYjNDM7CXJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTsKJiM0MzsJY2hlY2tfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX1MyQ19CVUxLLCAmIzM0O3NlcnZlciAtJmd0OyBjbGllbnQgYnVsayYjMzQ7KTsKJiM0MzsKJiM0MzsJc2VuZF9tc2dfbW9yZShmZCwgU0VFRF9DMlNfTU9SRSk7CiYjNDM7CXNlbmRfc3BsaWNlKGZkLCBTRUVEX0MyU19TUExJQ0UpOwomIzQzOwlzZW5kX3NtYWxsX3JlY29yZHMoZmQsIFNFRURfQzJTX1NNQUxMKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgdGhlIHNlcnZlciYjMzk7cyB2ZXJkaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nIGRvd24uICovCiYjNDM7CXJlYWRfYWxsKGZkLCBidWYsIDEpOwomIzQzOwlpZiAoYnVmWzBdICE9ICYjMzk7ayYjMzk7KQomIzQzOwkJZmFpbCgmIzM0O3NlcnZlciByZXBvcnRlZCBhIGZhaWx1cmUmIzM0Oyk7CiYjNDM7CiYjNDM7CWZyZWUoYnVmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3NlcnZlcihpbnQgZmQpCiYjNDM7ewomIzQzOwlzaXplX3Qgc3BsaWNlX2xlbiA9IChzaXplX3QpU1BMSUNFX0ZSQUdfTEVOICogU1BMSUNFX0ZSQUdTOwomIzQzOwljaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pOwomIzQzOwljaGFyIG1vcmVbTU9SRV9GUkFHUyAmIzQzOyAxXTsKJiM0MzsJY2hhciAqc2J1ZjsKJiM0MzsJY2hhciBvayA9ICYjMzk7ayYjMzk7OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJc2J1ZiA9IG1hbGxvYyhzcGxpY2VfbGVuKTsKJiM0MzsJaWYgKCFidWYgfHwgIXNidWYpCiYjNDM7CQlkaWUoJiMzNDttYWxsb2MmIzM0Oyk7CiYjNDM7CiYjNDM7CXJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTsKJiM0MzsJY2hlY2tfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX0MyU19CVUxLLCAmIzM0O2NsaWVudCAtJmd0OyBzZXJ2ZXIgYnVsayYjMzQ7KTsKJiM0MzsKJiM0MzsJZmlsbF9wYXR0ZXJuKGJ1ZiwgQlVMS19MRU4sIFNFRURfUzJDX0JVTEspOwomIzQzOwl3cml0ZV9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pOwomIzQzOwomIzQzOwlyZWFkX2FsbChmZCwgbW9yZSwgc2l6ZW9mKG1vcmUpKTsKJiM0MzsJY2hlY2tfcGF0dGVybihtb3JlLCBzaXplb2YobW9yZSksIFNFRURfQzJTX01PUkUsICYjMzQ7Y2xpZW50IC0mZ3Q7IHNlcnZlciBNU0dfTU9SRSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmVhZF9hbGwoZmQsIHNidWYsIHNwbGljZV9sZW4pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgU1BMSUNFX0ZSQUdTOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNoZWNrX3BhdHRlcm4oc2J1ZiAmIzQzOyAoc2l6ZV90KWkgKiBTUExJQ0VfRlJBR19MRU4sCiYjNDM7CQkJICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgJiM0MzsKJiM0MzsJCQkgICAgICBpICogU1BMSUNFX0ZSQUdfTEVOLCAmIzM0O2NsaWVudCAtJmd0OyBzZXJ2ZXIgc3BsaWNlJiMzNDspOwomIzQzOwomIzQzOwlyZWFkX2FsbChmZCwgYnVmLCBTTUFMTF9MRU4pOwomIzQzOwljaGVja19wYXR0ZXJuKGJ1ZiwgU01BTExfTEVOLCBTRUVEX0MyU19TTUFMTCwKJiM0MzsJCSAgICAgICYjMzQ7Y2xpZW50IC0mZ3Q7IHNlcnZlciBzbWFsbCByZWNvcmRzJiMzNDspOwomIzQzOwomIzQzOwl3cml0ZV9hbGwoZmQsICZhbXA7b2ssIDEpOwomIzQzOwomIzQzOwlmcmVlKHNidWYpOwomIzQzOwlmcmVlKGJ1Zik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG9fc2VydmVyKGNvbnN0IGNoYXIgKmlwLCBpbnQgcG9ydCwgY29uc3QgY2hhciAqc3luY2RpcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9OwomIzQzOwlpbnQgbGZkLCBmZCwgb25lID0gMTsKJiM0MzsKJiM0MzsJbGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGxmZCAmbHQ7IDApCiYjNDM7CQlkaWUoJiMzNDtzb2NrZXQmIzM0Oyk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGxmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmYW1wO29uZSwgc2l6ZW9mKG9uZSkpKQomIzQzOwkJZGllKCYjMzQ7U09fUkVVU0VBRERSJiMzNDspOwomIzQzOwomIzQzOwlzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJc2Euc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKJiM0MzsJaWYgKGluZXRfcHRvbihBRl9JTkVULCBpcCwgJmFtcDtzYS5zaW5fYWRkcikgIT0gMSkKJiM0MzsJCWZhaWwoJiMzNDtiYWQgYmluZCBhZGRyZXNzICVzJiMzNDssIGlwKTsKJiM0MzsKJiM0MzsJaWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzYSwgc2l6ZW9mKHNhKSkpCiYjNDM7CQlkaWUoJiMzNDtiaW5kJiMzNDspOwomIzQzOwlpZiAobGlzdGVuKGxmZCwgMSkpCiYjNDM7CQlkaWUoJiMzNDtsaXN0ZW4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlkaWUoJiMzNDthY2NlcHQmIzM0Oyk7CiYjNDM7CWNsb3NlKGxmZCk7CiYjNDM7CiYjNDM7CWVuYWJsZV9rdGxzKGZkKTsKJiM0MzsJcmVuZGV6dm91cyhzeW5jZGlyLCAmIzM0O3NlcnZlciYjMzQ7LCAmIzM0O2NsaWVudCYjMzQ7KTsKJiM0MzsJd2FpdF9mb3JfZ28oc3luY2Rpcik7CiYjNDM7CiYjNDM7CXJ1bl9zZXJ2ZXIoZmQpOwomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRvX2NsaWVudChjb25zdCBjaGFyICppcCwgaW50IHBvcnQsIGNvbnN0IGNoYXIgKnN5bmNkaXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2EgPSB7fTsKJiM0MzsJdW5zaWduZWQgaW50IHdhaXRlZCA9IDA7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJc2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CXNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CiYjNDM7CWlmIChpbmV0X3B0b24oQUZfSU5FVCwgaXAsICZhbXA7c2Euc2luX2FkZHIpICE9IDEpCiYjNDM7CQlmYWlsKCYjMzQ7YmFkIHNlcnZlciBhZGRyZXNzICVzJiMzNDssIGlwKTsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwomIzQzOwkJaWYgKGZkICZsdDsgMCkKJiM0MzsJCQlkaWUoJiMzNDtzb2NrZXQmIzM0Oyk7CiYjNDM7CQlpZiAoIWNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3NhLCBzaXplb2Yoc2EpKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCWlmICh3YWl0ZWQgJmd0Oz0gQ09OTkVDVF9USU1FT1VUX01TKQomIzQzOwkJCWRpZSgmIzM0O2Nvbm5lY3QmIzM0Oyk7CiYjNDM7CQltc2xlZXAoMjApOwomIzQzOwkJd2FpdGVkICYjNDM7PSAyMDsKJiM0MzsJfQomIzQzOwomIzQzOwllbmFibGVfa3RscyhmZCk7CiYjNDM7CXJlbmRlenZvdXMoc3luY2RpciwgJiMzNDtjbGllbnQmIzM0OywgJiMzNDtzZXJ2ZXImIzM0Oyk7CiYjNDM7CXdhaXRfZm9yX2dvKHN5bmNkaXIpOwomIzQzOwomIzQzOwlydW5fY2xpZW50KGZkKTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO3sKJiM0MzsJaW50IHBvcnQ7CiYjNDM7CiYjNDM7CWlmIChhcmdjICE9IDUpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCSYjMzQ7dXNhZ2U6ICVzIHNlcnZlcnxjbGllbnQgJmx0O2lwJmd0OyAmbHQ7cG9ydCZndDsgJmx0O3N5bmNkaXImZ3Q7XG4mIzM0OywKJiM0MzsJCQlhcmd2WzBdKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJvbGUgPSBhcmd2WzFdOwomIzQzOwlwb3J0ID0gYXRvaShhcmd2WzNdKTsKJiM0MzsKJiM0MzsJaWYgKCFzdHJjbXAocm9sZSwgJiMzNDtzZXJ2ZXImIzM0OykpCiYjNDM7CQlyZXR1cm4gZG9fc2VydmVyKGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pOwomIzQzOwlpZiAoIXN0cmNtcChyb2xlLCAmIzM0O2NsaWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybiBkb19jbGllbnQoYXJndlsyXSwgcG9ydCwgYXJndls0XSk7CiYjNDM7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O3Vua25vd24gcm9sZSAlc1xuJiMzNDssIHJvbGUpOwomIzQzOwlyZXR1cm4gMjsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga1RMUyBPZmZsb2FkIFBhdGNoIGZvciBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB0byBgbmV0ZGV2c2ltYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB6ZXJvaW5nIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgYSB3b3JraG9yc2UgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcgaW4gdGhlIG5ldHdvcmtpbmcgd29ybGQuIEdldHRpbmcgdGhpcyByaWdodCBpcyBjcnVjaWFsIGZvciB0aGUgc3RhYmlsaXR5IG9mIHRoZSBrZXJuZWwgYW5kIHRoZSByZWxpYWJpbGl0eSBvZiBvdXIgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4KCkkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgaGFuZGZ1bCBvZiBmaWxlczogYEtjb25maWdgLCB0aGUgYE1ha2VmaWxlYCwgYG5ldGRldi5jYCwgYG5ldGRldnNpbS5oYCwgYHRscy5jYCwgYW5kIGEgbmV3IHNlbGZ0ZXN0LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzY29wZSBmb3IgdGhpcyBraW5kIG9mIGZlYXR1cmUgYWRkaXRpb24uIEdpdmVuIHRoYXQgYG5ldGRldnNpbWAgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLCB0aGUgYWNjZXNzaWJpbGl0eSBpcyBjbGVhcmx5IHRoZXJlLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX05FVERFVlNJTWAsIGBDT05GSUdfVExTYCwgYW5kIGBDT05GSUdfVExTX0RFVklDRWAuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IHN0YXJ0IGNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZW5mb3JjZWQgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFyZSBhdm9pZGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCBhbmQgYG5ldC90bHMvS2NvbmZpZ2AuCgpPa2F5LCBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIGBORVRERVZTSU1gIGRlcGVuZHMgb24gYElORVRgLCBgUFNBTVBMRSB8fCBQU0FNUExFPW5gLCBgUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5gLCBhbmQgaW1wb3J0YW50bHksIGBUTFMgfHwgVExTPW5gLiBUaGlzIHNlZW1zIGxvZ2ljYWwsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHdpdGhpbiB0aGUgZGVwZW5kZW5jaWVzLiBOb3cgbGV0JiMzOTtzIGNoZWNrIGBuZXQvdGxzL0tjb25maWdgIGZvciB0aGUgYFRMU19ERVZJQ0VgIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBkcmlsbCBkb3duIHRvIGVuc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVExTX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFRMUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFRMUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIGV4cG9zZWQuIEkgcmVtZW1iZXIgdGhhdCBgbmV0L3Rscy9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLCBzbyBsZXQmIzM5O3MgbmF2aWdhdGUgdG8gdGhhdCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDE5OyB0aGF0JiMzOTtzIGdlbmVyYWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTkgd2lsbCBiZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIGxvb2tzIGxpa2UgZm9yIFRMUyBmZWF0dXJlIGNvbmZpZ3VyYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGZlZWwgZm9yIGhvdyBJIGNhbiBpbmZsdWVuY2Ugb3IgaW50ZWdyYXRlIHRoaXMgaW50byBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVExTIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFRMU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG4gIDEyOlx0XHRkZWZhdWx0IG5cbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcbiAgMTU6XHRcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cbiAgMTY6XHRcbiAgMTc6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIFRMU19ERVZJQ0VcbiAgMjA6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVExTXG4gIDIyOlx0XHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxuICAyMzpcdFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxuICAyNDpcdFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xuICAyNTpcdFx0ZGVmYXVsdCBuXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cbiAgMjg6XHRcbiAgMjk6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjgKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMsIGV4cHJlc3NlZCBhcyBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRlcGVuZGVuY3kgRGVkdWN0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBsb29rcyBsaWtlIGBUTFNfREVWSUNFYCBpcyBpbmhlcmVudGx5IGxpbmtlZCB0byBgVExTYCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIGBUTFNgIGl0c2VsZiBpcyBidWlsZGluZyBvbiB0b3Agb2YgdGhlIGBJTkVUYCBzdGFjaywgYXMgSSYjMzk7ZCBleHBlY3QuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgYE5FVERFVlNJTWAsIHdoaWNoIGFwcGFyZW50bHkgZGVwZW5kcyBvbiBgVExTYCAqb3IqIGV4cGxpY2l0bHkgZGlzYWJsaW5nIGBUTFNgIChgVExTPW5gKS4gQnV0IHNpbmNlIHRoZSBnb2FsIGlzIHRvICplbmFibGUqIGBORVRERVZTSU1gLCB0aGUgcmVxdWlyZW1lbnQgYmVjb21lcyBjbGVhcjogd2UgZGVmaW5pdGVseSBuZWVkIGBUTFNgLgoKVGhlcmVmb3JlLCB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbiBib2lscyBkb3duIHRvIGVuc3VyaW5nIHRoYXQgYE5FVERFVlNJTWAsIGBUTFNgLCBhbmQgYFRMU19ERVZJQ0VgIGFyZSBhbGwgZW5hYmxlZCBhbmQgcHJvcGVybHkgc2V0IHVwIHRvIHdvcmsgdG9nZXRoZXIuIEVzc2VudGlhbGx5LCBnZXR0aW5nIHRoZSB3aG9sZSBzdGFjayBpbiBvcmRlci4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWRkZWQgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYW5kIHRoZSByZWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCB0ZWxsIHRoZSBmdWxsIHN0b3J5LiBJIHdhbnQgdG8gc2VlICpob3cqIHRoZXNlIG1vZHVsZXMgaGF2ZSBpbnRlZ3JhdGVkIGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpcyBzcGVjaWZpYyBhc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16XzAtOV0mIzQzOyApJiM0Mztuc2ltX3Rsc19bYS16XzAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM9NDU9c3RydWN0IG5zaW1fdGxzX3R1cGxlIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtNTEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6NTI6c3RhdGljIGJvb2wgbnNpbV90bHNfcGFyc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy01My1cdFx0XHQgICBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTkwLSAqL1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjkxOnN0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy05Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5zaW1fdGxzX3R1cGxlICp0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0xMTUtICovXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MTE2OnN0YXRpYyB2b2lkIG5zaW1fdGxzX3R4X3plcm9fdGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTExNy17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTE1Ny0gKi9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxNTg6c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTU5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTcyLSAqL1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjE3MzpzdGF0aWMgdm9pZCBuc2ltX3Rsc19yeChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0xNzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0xOTY9dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjA5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjIxMDpzdGF0aWMgaW50IG5zaW1fdGxzX2Rldl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTIxMS1cdFx0XHQgICAgZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcmVjdGlvbixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjY2LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjI2NzpzdGF0aWMgdm9pZCBuc2ltX3Rsc19kZXZfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjY4LVx0XHRcdCAgICAgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0yOTktICovXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MzAwOnN0YXRpYyBpbnQgbnNpbV90bHNfZGV2X3Jlc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzAxLVx0XHRcdCAgICAgICB1MzIgc2VxLCB1OCAqcmNkX3NuLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0zMTE9c3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzE2LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjMxNzpzdGF0aWMgc3NpemVfdCBuc2ltX3Rsc19kYmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0zMTgtXHRcdFx0XHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jPTM3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3Rsc19kYmdfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzgxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjM4Mjp2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzgzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzk1LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjM5Njp2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTM5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJpb3JpdGl6aW5nIFRMUyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgVExTIGZ1bmN0aW9ucyBoZXJlLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBsZWFuaW5nIG1lIHRvd2FyZHMgZm9jdXNpbmcgb24gYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2Rldl9hZGRgLCBgbnNpbV90bHNfZGV2X2RlbGAsIGBuc2ltX3Rsc19kZXZfcmVzeW5jYCwgYG5zaW1fdGxzX2RiZ19yZWFkYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC4KCkhvbGQgb24gYSBzZWNvbmQsIGEgZmV3IG9mIHRob3NlIOKAkyBgbnNpbV90bHNfZGV2X2FkZGAsIGBuc2ltX3Rsc19kZXZfZGVsYCwgYG5zaW1fdGxzX2Rldl9yZXN5bmNgLCBhbmQgYG5zaW1fdGxzX2RiZ19yZWFkYCDigJMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhlIGd1aWRhbmNlIHN1Z2dlc3RzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRvIGF2b2lkIGlubGluZWQgaGVscGVycyB3aXRob3V0IGRpc3RpbmN0IHN5bWJvbHMuIEhvd2V2ZXIsIEkgc2VlIHRoYXQgYG5zaW1fdGxzX2Rldl9hZGRgIGlzIGFzc2lnbmVkIHRvIGBuc2ltX3Rsc2Rldl9vcHNgLCBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycy4gVGhhdCYjMzk7cyBnb29kLCBtZWFuaW5nIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIGlzIHBvdGVudGlhbGx5IGEgc29saWQgY2hvaWNlLiBCdXQgYG5zaW1fZG9fdGxzYCBpcyBub24tc3RhdGljLgoKTGV0JiMzOTtzIHNpbXBsaWZ5IHRoaW5ncyBmb3Igbm93IGFuZCB1c2UgYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC4KCldhaXQsIHRoaW5raW5nIG1vcmUgYWJvdXQgaXQsIGBuc2ltX3Rsc19kZXZfYWRkYCBpcyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgYWRkaW5nIGEgbmV3IFRMUyBjb250ZXh0LiBFdmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gSXQmIzM5O3MgYSB2YWxpZCwgcGVyaGFwcyB0aGUgYmVzdCB0YXJnZXQuIEFsdGhvdWdoLCBpdCBpcyBhIHZhbGlkIHRhcmdldCBiZWNhdXNlIGl0IGlzIHJlZmVyZW5jZWQgaW4gYSBmdW5jdGlvbiBwb2ludGVyLCBhbmQgd2UgY291bGQgYWxzbyBjaG9vc2UgYG5zaW1fZG9fdGxzYC4KCkFjdHVhbGx5LCBub3cgSSByZW1lbWJlciwgYG5zaW1fZG9fdGxzYCBpcyBjYWxsZWQgZnJvbSBgbnNpbV9zdGFydF94bWl0YC4KClRpbWUgdG8gZG91YmxlLWNoZWNrIGBuc2ltX2RvX3Rsc2AgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyB0aGUgcmlnaHQgZml0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XG4gMTkxOlx0LyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxuIDE5MjpcdCAqIHBlZXImIzM5O3MgcmVjZWl2ZSBwYXRoLCBzbyB0aGlzIG9uZSBjYWxsIHNpdGUgc3RhbmRzIGluIGZvciB0aGUgaGFyZHdhcmUgb2ZcbiAxOTM6XHQgKiBib3RoIHBvcnRzLiAgSXQgaGFzIHRvIHJ1biBiZWZvcmUgbnNpbV9mb3J3YXJkX3NrYigpIG1vdmVzIHRoZSBza2Igb3ZlcixcbiAxOTQ6XHQgKiB3aGljaCByZXNldHMgdGhlIGhlYWRlcnMuXG4gMTk1Olx0ICovXG4gMTk2Olx0dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiAxOTc6XHRcdFx0IHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpXG4gMTk4Olx0e1xuIDE5OTpcdFx0LyogbnNpbV9kb19wc3AoKSByYW4gZmlyc3QgYW5kIG1heSBoYXZlIHdyYXBwZWQgdGhlIHJlY29yZCBzdHJlYW0sIHNvXG4gMjAwOlx0XHQgKiB0aGlzIGlzIG5vIGxvbmdlciBhIHBsYWluIFRMUyBvdmVyIFRDUCBwYWNrZXQuICBObyBOSUMgY2hhaW5zIHRoZVxuIDIwMTpcdFx0ICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLlxuIDIwMjpcdFx0ICovXG4gMjAzOlx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4gMjA0Olx0XHRcdHJldHVybjtcbiAyMDU6XHRcbiAyMDY6XHRcdG5zaW1fdGxzX3R4KG5zLCBza2IpO1xuIDIwNzpcdFx0bnNpbV90bHNfcngocGVlcl9ucywgc2tiKTtcbiAyMDg6XHR9XG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gVExTIEluaXRpYWxpemF0aW9uIGFuZCBUZWFyZG93bioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZXNlIHR3byBzcGVjaWZpYyBmdW5jdGlvbnM6IGBuc2ltX3Rsc19pbml0YCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC4gVGhlc2UgbmFtZXMgaW1tZWRpYXRlbHkgc3VnZ2VzdCB0aGV5IGFyZSByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uIG9mIFRMUyAoVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5KSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBuc2ltYCBmcmFtZXdvcmsuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHRoaW5ncyBsaWtlIGVzdGFibGlzaGluZyBzZWN1cmUgY29ubmVjdGlvbnMsIHNldHRpbmcgdXAgVExTIGNvbnRleHRzLCBoYW5kbGluZyBjZXJ0aWZpY2F0ZXMsIGtleSBtYW5hZ2VtZW50LCBhbmQgdWx0aW1hdGVseSwgZ3JhY2VmdWxseSBzaHV0dGluZyBkb3duIHRob3NlIHNlY3VyZWQgc2Vzc2lvbnMuIEEgc3VjY2Vzc2Z1bCBpbnZlc3RpZ2F0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyB3b3VsZCBpbnZvbHZlIGxvb2tpbmcgZm9yIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGxpa2UgYSBzdWNjZXNzZnVsIFRMUyBpbml0aWFsaXphdGlvbiwgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIHdoZW4gdGVhcmluZyBkb3duIHRoZSBUTFMgY29ubmVjdGlvbiwgYW5kIHRoZSBpbmNsdXNpb24gb2Ygd2VsbC1zdHJ1Y3R1cmVkIGZ1bmN0aW9ucyBzdWNoIGFzIGBTU0xfQ1RYX25ld2AsIGBTU0xfbmV3YCwgYFNTTF9jb25uZWN0YCwgYW5kIGBTU0xfc2h1dGRvd25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG5zaW1gIG1hbmFnZXMgdGhlIGludHJpY2FjaWVzIG9mIFRMUyB3aXRoaW4gaXRzIGFyY2hpdGVjdHVyZS4gTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0fTtcbiAzODE6XHRcbiAzODI6XHR2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gMzgzOlx0e1xuIDM4NDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zKTtcbiAzODU6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiAzODY6XHRcbiAzODc6XHRcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2V0bHNkZXZfb3BzID0gXHUwMDI2bnNpbV90bHNkZXZfb3BzO1xuIDM4ODpcdFx0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xuIDM4OTpcdFx0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xuIDM5MDpcdFxuIDM5MTpcdFx0bnMtXHUwMDNldGxzLmRmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0bHNcJiMzNDssIDA0MDAsXG4gMzkyOlx0XHRcdFx0XHRcdCAgICBucy1cdTAwM2Vuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuIDM5MzpcdFx0XHRcdFx0XHQgICAgXHUwMDI2bnNpbV90bHNfZGJnX2ZvcHMpO1xuIDM5NDpcdH1cbiAzOTU6XHRcbiAzOTY6XHR2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIDM5NzpcdHtcbiAzOTg6XHRcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uLCAqdG1wO1xuIDM5OTpcdFx0dTMyIGxlZnQ7XG4gNDAwOlx0XG4gNDAxOlx0XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnMtXHUwMDNldGxzLmRmaWxlKTtcbiA0MDI6XHRcbiA0MDM6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4gNDA0Olx0XHRsZWZ0ID0gbnMtXHUwMDNldGxzLmNvdW50O1xuIDQwNTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHRtcCwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XG4gNDA2Olx0XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QpO1xuIDQwNzpcdFx0XHRrZnJlZV9yY3UoY29ubiwgcmN1KTtcbiA0MDg6XHRcdH1cbiA0MDk6XHRcdG5zLVx1MDAzZXRscy5jb3VudCA9IDA7XG4gNDEwOlx0XHRucy1cdTAwM2V0bHMudHhfY29ubiA9IDA7XG4gNDExOlx0XHRucy1cdTAwM2V0bHMucnhfY29ubiA9IDA7XG4gNDEyOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4gNDEzOlx0XG4gNDE0Olx0XHRpZiAobGVmdClcbiA0MTU6XHRcdFx0bmV0ZGV2X2Vycihucy1cdTAwM2VuZXRkZXYsXG4gNDE2Olx0XHRcdFx0ICAgXCYjMzQ7dGVhcmluZyBkb3duIFRMUyBvZmZsb2FkIHdpdGggJXUgY29ubmVjdGlvbnMgbGVmdFxcblwmIzM0OyxcbiA0MTc6XHRcdFx0XHQgICBsZWZ0KTtcbiA0MTg6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkyCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUga1RMUyBPZmZsb2FkIFBhdGNoIGZvciBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBqdXN0IGdyYWIgYG5zaW1fZG9fdGxzYCBzaW5jZSBpdCYjMzk7cyBub3Qgc3RhdGljIGFuZCBub3QgaW5saW5lZCwgYWxvbmcgd2l0aCBgbnNpbV90bHNfaW5pdGAgYW5kIGBuc2ltX3Rsc190ZWFyZG93bmAuICBgbnNpbV90bHNfZGV2X2FkZGAgY2F1Z2h0IG15IGV5ZSBpbml0aWFsbHksIHNpbmNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIC0gaW5kaWNhdGluZyBpdCYjMzk7cyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBCdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG5zaW1fdGxzX2Rldl9hZGRgIGFuZCBgbnNpbV90bHNfZGV2X2RlbGAgYXJlIHJlYWxseSB0aGUgaGVhcnQgb2YgdGhlIFRMUyBjb250ZXh0IG1hbmFnZW1lbnQgZm9yIHRoaXMgbmV0ZGV2c2ltIGtUTFMgb2ZmbG9hZC4gVGhleSAqYXJlKiBhc3NpZ25lZCB0byB0aGUgYG5zaW1fdGxzZGV2X29wc2Agc3RydWN0dXJlIHdoaWNoIGlzIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHRoZSBrVExTIGNvbnRleHQgYWRkaXRpb24gYW5kIGRlbGV0aW9uLCBzbyBJIHNob3VsZCBpbmNsdWRlIHRoZW0uIFRoZW4sIHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzaG91bGQgc3RpY2sgd2l0aCBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiBJJiMzOTttIGdvaW5nIHRvIHN0aWNrIHdpdGggdGhlIGBuc2ltX2RvX3Rsc2AsIGBuc2ltX3Rsc19pbml0YCwgYW5kIGBuc2ltX3Rsc190ZWFyZG93bmAuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBORVRERVZTSU1gLCBgVExTYCwgYW5kIGBUTFNfREVWSUNFYC4gQ2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4uLiBgVExTYCBuZWVkcyBgSU5FVGAuIGBORVRERVZTSU1gIG5lZWRzIGBJTkVUYCwgIGBQU0FNUExFIHx8IFBTQU1QTEU9bmAsIGBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9bmAsIGFuZCBgVExTIHx8IFRMUz1uYC4gU28sIHRob3NlIHRocmVlIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKVGhlIGJpZyBwaWN0dXJlIGlzIHRoaXM6IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcsIGVtdWxhdGVkIGtUTFMgb2ZmbG9hZCBjYXBhYmlsaXR5IHRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFkZGl0aW9uIHRoYXQgcHJvdmlkZXMgbmV3LCByZWFjaGFibGUgY29kZSBwYXRocy4gVGhpcyBtZWFucyBpdCYjMzk7cyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkLCBzaW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZSBuZXcgY29kZSBzaG91bGQgYmUgaW52b2tlZCB2aWEgdGhlIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCB0eXBpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGBuZXRkZXZzaW1gLgoKVG8gcmVjYXAsIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9kb190bHMmIzM0OywKICAgICYjMzQ7bnNpbV90bHNfaW5pdCYjMzQ7LAogICAgJiMzNDtuc2ltX3Rsc190ZWFyZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGVtdWxhdGVkIGtUTFMgb2ZmbG9hZCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgZm9yIHRlc3RpbmcgVExTIGhhcmR3YXJlIG9mZmxvYWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucyBhbmQgbmV0d29yayBvcGVyYXRpb25zIHdoZW4gbmV0ZGV2c2ltIGlzIHVzZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZG9fdGxzJiMzNDssCiAgICAmIzM0O25zaW1fdGxzX2luaXQmIzM0OywKICAgICYjMzQ7bnNpbV90bHNfdGVhcmRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGZvciB0ZXN0aW5nIFRMUyBoYXJkd2FyZSBvZmZsb2FkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIG5ldGRldnNpbSBpcyB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MTkuMjAwMTgxMDgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNjMxNjcwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2RvX3Rsc1wiLFxuICAgIFwibnNpbV90bHNfaW5pdFwiLFxuICAgIFwibnNpbV90bHNfdGVhcmRvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVtdWxhdGVkIGtUTFMgb2ZmbG9hZCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgZm9yIHRlc3RpbmcgVExTIGhhcmR3YXJlIG9mZmxvYWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucyBhbmQgbmV0d29yayBvcGVyYXRpb25zIHdoZW4gbmV0ZGV2c2ltIGlzIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjE5LjIwMDE4Njg2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MDcwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWY2ZDAzN2I4MjlhZTZkNzQxMTkxOTBhMjE4NmI4NGU1NGU1YTg2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNTowNjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZ1xcbmluZGV4IGZmNzljNDY2NzEyZGYuLmNiNGQ0YmI4N2FmYzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWdcXG5AQCAtNjA3LDYgKzYwNyw3IEBAIGNvbmZpZyBORVRERVZTSU1cXG4gXFx0ZGVwZW5kcyBvbiBJTkVUXFxuIFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbitcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFM9blxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFBBR0VfUE9PTFxcbiBcXHRzZWxlY3QgTkVUX1NIQVBFUlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcXG5pbmRleCA4NzcxODIwNGZiNGRlLi5jN2Y3NjIxMzIzYjJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxcbkBAIC0yNSwzICsyNSw3IEBAIGVuZGlmXFxuIGlmbmVxICgkKENPTkZJR19NQUNTRUMpLClcXG4gbmV0ZGV2c2ltLW9ianMgKz0gbWFjc2VjLm9cXG4gZW5kaWZcXG4rXFxuK2lmbmVxICgkKENPTkZJR19UTFNfREVWSUNFKSwpXFxuK25ldGRldnNpbS1vYmpzICs9IHRscy5vXFxuK2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjhkYzBiMGE3ZDFhMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuQEAgLTE1MSw2ICsxNTEsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGlmIChkcilcXG4gXFx0XFx0Z290byBvdXRfZHJvcF9mcmVlO1xcbiBcXG4rXFx0bnNpbV9kb190bHMoc2tiLCBucywgcGVlcl9ucyk7XFxuK1xcbiBcXHRyeHEgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0aWYgKHJ4cSBcXHUwMDNlPSBwZWVyX2Rldi1cXHUwMDNlbnVtX3J4X3F1ZXVlcylcXG4gXFx0XFx0cnhxID0gcnhxICUgcGVlcl9kZXYtXFx1MDAzZW51bV9yeF9xdWV1ZXM7XFxuQEAgLTEwNjYsNiArMTA2OCw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4gXFxuIFxcdG5zaW1fbWFjc2VjX2luaXQobnMpO1xcbiBcXHRuc2ltX2lwc2VjX2luaXQobnMpO1xcbitcXHRuc2ltX3Rsc19pbml0KG5zKTtcXG4gXFxuIFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShucy1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0aWYgKGVycilcXG5AQCAtMTA5Myw2ICsxMDk2LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiBcXHRSQ1VfSU5JVF9QT0lOVEVSKG5zLVxcdTAwM2VwZWVyLCBOVUxMKTtcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobnMtXFx1MDAzZW5ldGRldik7XFxuIGVycl9pcHNlY190ZWFyZG93bjpcXG4rXFx0bnNpbV90bHNfdGVhcmRvd24obnMpO1xcbiBcXHRuc2ltX2lwc2VjX3RlYXJkb3duKG5zKTtcXG4gXFx0bnNpbV9tYWNzZWNfdGVhcmRvd24obnMpO1xcbiBcXHRuc2ltX2JwZl91bmluaXQobnMpO1xcbkBAIC0xMTk1LDYgKzExOTksNyBAQCB2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4gXFx0UkNVX0lOSVRfUE9JTlRFUihucy1cXHUwMDNlcGVlciwgTlVMTCk7XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XFxuIFxcdGlmIChuc2ltX2Rldl9wb3J0X2lzX3BmKG5zLVxcdTAwM2Vuc2ltX2Rldl9wb3J0KSkge1xcbitcXHRcXHRuc2ltX3Rsc190ZWFyZG93bihucyk7XFxuIFxcdFxcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcXG4gXFx0XFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XFxuIFxcdFxcdG5zaW1fYnBmX3VuaW5pdChucyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjU4MmE3NmFjZTlkMzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuQEAgLTU2LDYgKzU2LDIwIEBAIHN0cnVjdCBuc2ltX2lwc2VjIHtcXG4gXFx0dTMyIHR4O1xcbiB9O1xcbiBcXG4rc3RydWN0IG5zaW1fdGxzIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBjb25ucztcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcdC8qIHByb3RlY3RzIGNvbm5zIGFuZCB0aGUgY291bnRlcnMgYmVsb3cgKi9cXG4rXFx0c3RydWN0IGRlbnRyeSAqZGZpbGU7XFxuK1xcdHUzMiBjb3VudDtcXG4rXFx0dTMyIHR4X2Nvbm47XFxuK1xcdHUzMiByeF9jb25uO1xcbitcXHRhdG9taWM2NF90IHR4X3BhY2tldHM7XFxuK1xcdGF0b21pYzY0X3QgdHhfYnl0ZXM7XFxuK1xcdGF0b21pYzY0X3QgcnhfcGFja2V0cztcXG4rXFx0YXRvbWljNjRfdCByeF9ieXRlcztcXG4rXFx0YXRvbWljNjRfdCByZXN5bmNzO1xcbit9O1xcbitcXG4gI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfU0VDWV9DT1VOVCAzXFxuICNkZWZpbmUgTlNJTV9NQUNTRUNfTUFYX1JYU0NfQ09VTlQgMVxcbiBzdHJ1Y3QgbnNpbV9yeHNjIHtcXG5AQCAtMTQxLDYgKzE1NSw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xcbiBcXHRib29sIGJwZl9tYXBfYWNjZXB0O1xcbiBcXHRzdHJ1Y3QgbnNpbV9pcHNlYyBpcHNlYztcXG4gXFx0c3RydWN0IG5zaW1fbWFjc2VjIG1hY3NlYztcXG4rXFx0c3RydWN0IG5zaW1fdGxzIHRscztcXG4gXFx0c3RydWN0IG5zaW1fdmxhbiB2bGFuO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHR1MzIgaW5qZWN0X2Vycm9yO1xcbkBAIC00MzUsNiArNDUwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXFxuK3ZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuK3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbit2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbitcXHRcXHQgc3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucyk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX3Rsc190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKVxcbit7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxcbiB2b2lkIG5zaW1fbWFjc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbiB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNjk1ZjJlMmJlYjgwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY1xcbkBAIC0wLDAgKzEsNDE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90Y3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC90bHMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJuZXRkZXZzaW0uaFxcXCJcXG4rXFxuKy8qIEVtdWxhdGVkIGtUTFMgb2ZmbG9hZC4gIE5vIGNyeXB0byBpcyBwZXJmb3JtZWQsIHNvIHRoaXMgaXMgb25seSBzZWxmXFxuKyAqIGNvbnNpc3RlbnQgYmV0d2VlbiB0d28gbmV0ZGV2c2ltIHBvcnRzLlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgTlNJTV9UTFNfTUFYX0NPTk5cXHQzMlxcbitcXG4rLyogbmV0ZGV2X2ZpeF9mZWF0dXJlcygpIGRyb3BzIE5FVElGX0ZfSFdfVExTX1JYIHVubGVzcyB0aGUgZGV2aWNlIGFsc28gZG9lc1xcbisgKiBSWCBjaGVja3N1bXMsIHdoaWNoIGV2ZXJ5IG9mZmxvYWQgY2FwYWJsZSBOSUMgZG9lcy5cXG4rICovXFxuKyNkZWZpbmUgTlNJTV9UTFNfRkVBVFVSRVNcXHQoTkVUSUZfRl9IV19UTFNfVFggfCBORVRJRl9GX0hXX1RMU19SWCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0IE5FVElGX0ZfUlhDU1VNKVxcbitcXG4rc3RydWN0IG5zaW1fdGxzX2Nvbm4ge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcbitcXHQvKiBJZGVudGl0eSBhcyBzZWVuIG9uIHRoZSB3aXJlLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBwb3J0XFxuK1xcdCAqIHRoZSBvZmZsb2FkIHdhcyBpbnN0YWxsZWQgb246IGwqIGlzIHRoaXMgc2lkZSwgciogaXMgdGhlIHBlZXIuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgaW42X2FkZHIgbGFkZHI7XFxuK1xcdHN0cnVjdCBpbjZfYWRkciByYWRkcjtcXG4rXFx0X19iZTE2IGxwb3J0O1xcbitcXHRfX2JlMTYgcnBvcnQ7XFxuK1xcdHUxNiBmYW1pbHk7XFxuK1xcbitcXHRlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyO1xcbitcXHR1MzIgc3RhcnRfc247XFxuK1xcdHUxNiBjaXBoZXJfdHlwZTtcXG4rXFx0Y29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4O1xcbit9O1xcbitcXG4rc3RydWN0IG5zaW1fdGxzX3R1cGxlIHtcXG4rXFx0c3RydWN0IGluNl9hZGRyIHNhZGRyO1xcbitcXHRzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7XFxuK1xcdF9fYmUxNiBzcG9ydDtcXG4rXFx0X19iZTE2IGRwb3J0O1xcbit9O1xcbitcXG4rc3RhdGljIGJvb2wgbnNpbV90bHNfcGFyc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG5zaW1fdGxzX3R1cGxlICp0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xcbitcXG4rXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XFxuK1xcbitcXHRcXHRpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKGlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZ0LVxcdTAwM2VzYWRkcik7XFxuK1xcdFxcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLVxcdTAwM2VkYWRkciwgXFx1MDAyNnQtXFx1MDAzZWRhZGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuK1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR0LVxcdTAwM2VzYWRkciA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbitcXHRcXHR0LVxcdTAwM2VkYWRkciA9IGlwNmgtXFx1MDAzZWRhZGRyO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHRoID0gdGNwX2hkcihza2IpO1xcbitcXHR0LVxcdTAwM2VzcG9ydCA9IHRoLVxcdTAwM2Vzb3VyY2U7XFxuK1xcdHQtXFx1MDAzZWRwb3J0ID0gdGgtXFx1MDAzZWRlc3Q7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogT24gUlggdGhlcmUgaXMgbm8gc29ja2V0IHRvIGxvb2sgYXQgeWV0LCBzbyBtYXRjaCB0aGUgdHVwbGUgaW5zdGFsbGVkIGF0XFxuKyAqIC1cXHUwMDNldGxzX2Rldl9hZGQoKSB0aW1lLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzLiAgVGhlIHBhY2tldCBpc1xcbisgKiBhcnJpdmluZywgc28gdGhlIHBlZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXMgaXRzIHNvdXJjZS5cXG4rICovXFxuK3N0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXFxuK3tcXG4rXFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjb25uLCBcXHUwMDI2bnMtXFx1MDAzZXRscy5jb25ucywgbGlzdClcXG4rXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWRpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1JYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjb25uLVxcdTAwM2VscG9ydCA9PSB0LVxcdTAwM2VkcG9ydCBcXHUwMDI2XFx1MDAyNiBjb25uLVxcdTAwM2VycG9ydCA9PSB0LVxcdTAwM2VzcG9ydCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZjb25uLVxcdTAwM2VsYWRkciwgXFx1MDAyNnQtXFx1MDAzZWRhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZjb25uLVxcdTAwM2VyYWRkciwgXFx1MDAyNnQtXFx1MDAzZXNhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qIFRoZSBzdGFjayBsZWF2ZXMgYSB0YWcgc2l6ZWQgcGxhY2Vob2xkZXIgYXQgdGhlIGVuZCBvZiBldmVyeSByZWNvcmQgZm9yXFxuKyAqIHRoZSBkZXZpY2UgdG8gd3JpdGUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpbnRvLiAgV2UgZG8gbm90IGVuY3J5cHQsIHNvXFxuKyAqIG5vdGhpbmcgZXZlciBmaWxscyBpdCBpbiwgYW5kIGl0IGNvbWVzIGZyb20gYSBwYWdlIGZyYWcgdGhhdCB3YXMgbmV2ZXJcXG4rICogemVyb2VkIC0gY2xlYXIgaXQgcmF0aGVyIHRoYW4gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvbnRvIHRoZSB3aXJlLlxcbisgKlxcbisgKiB0bHNfYXBwZW5kX2ZyYWcoKSBlaXRoZXIgZ3Jvd3MgdGhlIGxhc3QgZnJhZyBvciBhZGRzIG9uZSwgc28gdGhlIHRhZyBpc1xcbisgKiBhbHdheXMgdGhlIHRhaWwgb2YgdGhlIHJlY29yZCdzIGxhc3QgZnJhZy4gIENsZWFyaW5nIGl0IHRoZXJlIHJhdGhlciB0aGFuXFxuKyAqIGluIHRoZSBza2IgY292ZXJzIGV2ZXJ5IHNlZ21lbnQgdGhlIHJlY29yZCB3YXMgc3BsaXQgaW50bywgYW5kIGFueVxcbisgKiByZXRyYW5zbWl0IG9mIHRoZW0sIHNpbmNlIHRoZXkgYWxsIHNoYXJlIHRoZXNlIHBhZ2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbnNpbV90bHNfdHhfemVyb190YWdzKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChza2ItXFx1MDAzZXNrKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XFxuK1xcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICp0eF9jdHg7XFxuK1xcdHUzMiBzZXEsIGVuZCwgdGFnX3NpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHVuc2lnbmVkIGludCBvZmY7XFxuK1xcbitcXHRvZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgX190Y3BfaGRybGVuKHRoKTtcXG4rXFx0aWYgKG9mZiBcXHUwMDNlPSBza2ItXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGFnX3NpemUgPSBjdHgtXFx1MDAzZXByb3RfaW5mby50YWdfc2l6ZTtcXG4rXFx0c2VxID0gbnRvaGwodGgtXFx1MDAzZXNlcSk7XFxuK1xcdGVuZCA9IHNlcSArIHNrYi1cXHUwMDNlbGVuIC0gb2ZmO1xcbitcXHR0eF9jdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eF9jdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0d2hpbGUgKGJlZm9yZShzZXEsIGVuZCkpIHtcXG4rXFx0XFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkO1xcbitcXHRcXHRza2JfZnJhZ190ICpmcmFnO1xcbitcXHRcXHR1NjQgcmNkX3NuO1xcbitcXG4rXFx0XFx0cmVjb3JkID0gdGxzX2dldF9yZWNvcmQodHhfY3R4LCBzZXEsIFxcdTAwMjZyY2Rfc24pO1xcbitcXHRcXHRpZiAoIXJlY29yZCB8fCB0bHNfcmVjb3JkX2lzX3N0YXJ0X21hcmtlcihyZWNvcmQpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGZyYWcgPSBcXHUwMDI2cmVjb3JkLVxcdTAwM2VmcmFnc1tyZWNvcmQtXFx1MDAzZW51bV9mcmFncyAtIDFdO1xcbitcXHRcXHRtZW1zZXQoc2tiX2ZyYWdfYWRkcmVzcyhmcmFnKSArIHNrYl9mcmFnX3NpemUoZnJhZykgLSB0YWdfc2l6ZSxcXG4rXFx0XFx0ICAgICAgIDAsIHRhZ19zaXplKTtcXG4rXFxuK1xcdFxcdHNlcSA9IHJlY29yZC1cXHUwMDNlZW5kX3NlcTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eF9jdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rLyogU3RhbmQgaW4gZm9yIHRoZSBpbmxpbmUgZW5jcnlwdGlvbiB0aGUgaGFyZHdhcmUgd291bGQgZG8gb24gdGhlIHdheSBvdXQuXFxuKyAqIFRoZSBzdGFjayBoYXMgYWxyZWFkeSBmcmFtZWQgdGhlIHJlY29yZCBhbmQgd2UgZG8gbm90IGVuY3J5cHQsIHNvIHRoZSB0YWdcXG4rICogaXMgYWxsIHRoYXQgaXMgbGVmdCB0byBkZWFsIHdpdGguICBUaGUgc29ja2V0IGlzIHJpZ2h0IGhlcmUsIHNvIGlkZW50aWZ5XFxuKyAqIHRoZSBjb25uZWN0aW9uIHRoZSB3YXkgdGhlIHJlYWwgZHJpdmVycyBkby5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG5zaW1fdGxzX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGlmICghdGxzX2lzX3NrYl90eF9kZXZpY2Vfb2ZmbG9hZGVkKHNrYikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5zaW1fdGxzX3R4X3plcm9fdGFncyhza2IpO1xcbitcXHRhdG9taWM2NF9pbmMoXFx1MDAyNm5zLVxcdTAwM2V0bHMudHhfcGFja2V0cyk7XFxuK1xcdGF0b21pYzY0X2FkZChza2ItXFx1MDAzZWxlbiwgXFx1MDAyNm5zLVxcdTAwM2V0bHMudHhfYnl0ZXMpO1xcbit9XFxuK1xcbisvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBkZWNyeXB0aW9uIHRoZSBwZWVyJ3MgaGFyZHdhcmUgd291bGQgZG8sIHNpbmNlIHdlXFxuKyAqIGFyZSBhYm91dCB0byBoYW5kIHRoZSBza2IgdG8gaXRzIHN0YWNrLiAgV2UgZG8gbm90IGRlY3J5cHQgZWl0aGVyLCBzbyBhbGxcXG4rICogdGhhdCBpcyBuZWVkZWQgaXMgdGhlIGZsYWcgdGhhdCB0ZWxscyB0aGUga1RMUyBjb3JlIHRoZSBwYXlsb2FkIGlzXFxuKyAqIGFscmVhZHkgcGxhaW50ZXh0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbnNpbV90bHNfcngoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IG5zaW1fdGxzX3R1cGxlIHQ7XFxuK1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bnMtXFx1MDAzZXRscy5jb25ucykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghbnNpbV90bHNfcGFyc2Uoc2tiLCBcXHUwMDI2dCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghbnNpbV90bHNfcnhfb2ZmbG9hZGVkKG5zLCBcXHUwMDI2dCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNrYi1cXHUwMDNlZGVjcnlwdGVkID0gMTtcXG4rXFx0YXRvbWljNjRfaW5jKFxcdTAwMjZucy1cXHUwMDNldGxzLnJ4X3BhY2tldHMpO1xcbitcXHRhdG9taWM2NF9hZGQoc2tiLVxcdTAwM2VsZW4sIFxcdTAwMjZucy1cXHUwMDNldGxzLnJ4X2J5dGVzKTtcXG4rfVxcbitcXG4rLyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxcbisgKiBwZWVyJ3MgcmVjZWl2ZSBwYXRoLCBzbyB0aGlzIG9uZSBjYWxsIHNpdGUgc3RhbmRzIGluIGZvciB0aGUgaGFyZHdhcmUgb2ZcXG4rICogYm90aCBwb3J0cy4gIEl0IGhhcyB0byBydW4gYmVmb3JlIG5zaW1fZm9yd2FyZF9za2IoKSBtb3ZlcyB0aGUgc2tiIG92ZXIsXFxuKyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cXG4rICovXFxuK3ZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXFxuK1xcdFxcdCBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKVxcbit7XFxuK1xcdC8qIG5zaW1fZG9fcHNwKCkgcmFuIGZpcnN0IGFuZCBtYXkgaGF2ZSB3cmFwcGVkIHRoZSByZWNvcmQgc3RyZWFtLCBzb1xcbitcXHQgKiB0aGlzIGlzIG5vIGxvbmdlciBhIHBsYWluIFRMUyBvdmVyIFRDUCBwYWNrZXQuICBObyBOSUMgY2hhaW5zIHRoZVxcbitcXHQgKiB0d28gaW5saW5lIG9mZmxvYWRzIGVpdGhlciwgc28gbGVhdmUgaXQgYWxvbmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRuc2ltX3Rsc190eChucywgc2tiKTtcXG4rXFx0bnNpbV90bHNfcngocGVlcl9ucywgc2tiKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuc2ltX3Rsc19kZXZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0ICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24sXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG4rXFx0XFx0XFx0ICAgIHUzMiBzdGFydF9vZmZsb2FkX3RjcF9zbilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdC8qIE1pcnJvciB0aGUgY2lwaGVyIHN1cHBvcnQgb2YgYSB0eXBpY2FsIG9mZmxvYWQgY2FwYWJsZSBOSUMuICovXFxuK1xcdHN3aXRjaCAoY3J5cHRvX2luZm8tXFx1MDAzZWNpcGhlcl90eXBlKSB7XFxuK1xcdGNhc2UgVExTX0NJUEhFUl9BRVNfR0NNXzEyODpcXG4rXFx0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMjU2OlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRjb25uID0ga3phbGxvY19vYmooKmNvbm4pO1xcbitcXHRpZiAoIWNvbm4pXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0Y29ubi1cXHUwMDNlbGFkZHIgPSBzay1cXHUwMDNlc2tfdjZfcmN2X3NhZGRyO1xcbitcXHRcXHRjb25uLVxcdTAwM2VyYWRkciA9IHNrLVxcdTAwM2Vza192Nl9kYWRkcjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aXB2Nl9hZGRyX3NldF92NG1hcHBlZChzay1cXHUwMDNlc2tfcmN2X3NhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlbGFkZHIpO1xcbitcXHRcXHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVxcdTAwM2Vza19kYWRkciwgXFx1MDAyNmNvbm4tXFx1MDAzZXJhZGRyKTtcXG4rXFx0fVxcbitcXHRjb25uLVxcdTAwM2VmYW1pbHkgPSBzay1cXHUwMDNlc2tfZmFtaWx5O1xcbitcXHRjb25uLVxcdTAwM2VscG9ydCA9IGh0b25zKGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bSk7XFxuK1xcdGNvbm4tXFx1MDAzZXJwb3J0ID0gc2stXFx1MDAzZXNrX2Rwb3J0O1xcbitcXHRjb25uLVxcdTAwM2VkaXIgPSBkaXJlY3Rpb247XFxuK1xcdGNvbm4tXFx1MDAzZXN0YXJ0X3NuID0gc3RhcnRfb2ZmbG9hZF90Y3Bfc247XFxuK1xcdGNvbm4tXFx1MDAzZWNpcGhlcl90eXBlID0gY3J5cHRvX2luZm8tXFx1MDAzZWNpcGhlcl90eXBlO1xcbitcXHRjb25uLVxcdTAwM2V0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXHRpZiAobnMtXFx1MDAzZXRscy5jb3VudCBcXHUwMDNlPSBOU0lNX1RMU19NQVhfQ09OTikge1xcbitcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWxpc3QsIFxcdTAwMjZucy1cXHUwMDNldGxzLmNvbm5zKTtcXG4rXFx0bnMtXFx1MDAzZXRscy5jb3VudCsrO1xcbitcXHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXFxuK1xcdFxcdG5zLVxcdTAwM2V0bHMudHhfY29ubisrO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5zLVxcdTAwM2V0bHMucnhfY29ubisrO1xcbitvdXRfdW5sb2NrOlxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnMtXFx1MDAzZXRscy5sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtmcmVlKGNvbm4pO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnNpbV90bHNfZGV2X2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKGNvbm4tXFx1MDAzZXRsc19jdHggIT0gdGxzX2N0eCB8fCBjb25uLVxcdTAwM2VkaXIgIT0gZGlyZWN0aW9uKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Y29ubi1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdG5zLVxcdTAwM2V0bHMuY291bnQtLTtcXG4rXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKVxcbitcXHRcXHRcXHRucy1cXHUwMDNldGxzLnR4X2Nvbm4tLTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRucy1cXHUwMDNldGxzLnJ4X2Nvbm4tLTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuK1xcbitcXHRcXHRrZnJlZV9yY3UoY29ubiwgcmN1KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXG4rXFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJUTFMgJXMgY29udGV4dCBub3QgZm91bmQgb24gZGVsXFxcXG5cXFwiLFxcbitcXHRcXHQgICBkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/IFxcXCJ0eFxcXCIgOiBcXFwicnhcXFwiKTtcXG4rfVxcbitcXG4rLyogTm90aGluZyBpcyBldmVyIG91dCBvZiBzeW5jIGhlcmU6IHRoZSBlbXVsYXRpb24gZG9lcyBub3QgZGVjcnlwdCwgc28gaXRcXG4rICogbmV2ZXIgbG9zZXMgdGhlIHJlY29yZCBib3VuZGFyaWVzIGFuZCBuZXZlciBhc2tzIGZvciBhIHJlc3luYy4gIFRoZSBjb3JlXFxuKyAqIGNhbiBzdGlsbCBjYWxsIGluIG9uIHRoZSBSWCBwYXRoLCBzbyBhY2NvdW50IGZvciBpdCBhbmQgbW92ZSBvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgbnNpbV90bHNfZGV2X3Jlc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXFxuK1xcdFxcdFxcdCAgICAgICB1MzIgc2VxLCB1OCAqcmNkX3NuLFxcbitcXHRcXHRcXHQgICAgICAgZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcmVjdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRhdG9taWM2NF9pbmMoXFx1MDAyNm5zLVxcdTAwM2V0bHMucmVzeW5jcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcXG4rXFx0LnRsc19kZXZfYWRkXFx0PSBuc2ltX3Rsc19kZXZfYWRkLFxcbitcXHQudGxzX2Rldl9kZWxcXHQ9IG5zaW1fdGxzX2Rldl9kZWwsXFxuK1xcdC50bHNfZGV2X3Jlc3luY1xcdD0gbnNpbV90bHNfZGV2X3Jlc3luYyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzc2l6ZV90IG5zaW1fdGxzX2RiZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbitcXHRcXHRcXHRcXHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xcbitcXHRzaXplX3QgYnVmc2l6ZTtcXG4rXFx0Y2hhciAqYnVmLCAqcDtcXG4rXFx0aW50IGxlbjtcXG4rXFxuK1xcdC8qIFR3byBmdWxsIElQdjYgYWRkcmVzc2VzIGFuZCBwb3J0cyBmaXQgaW4gMTYwIGJ5dGVzIGEgbGluZS4gKi9cXG4rXFx0YnVmc2l6ZSA9IChOU0lNX1RMU19NQVhfQ09OTiAqIDE2MCkgKyAyMDA7XFxuK1xcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghYnVmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHAgPSBidWY7XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuK1xcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuK1xcdFxcdCAgICAgICBcXFwiY29ubiBjb3VudD0ldSB0eD0ldSByeD0ldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5zLVxcdTAwM2V0bHMuY291bnQsIG5zLVxcdTAwM2V0bHMudHhfY29ubiwgbnMtXFx1MDAzZXRscy5yeF9jb25uKTtcXG4rXFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJ0eF9wYWNrZXRzPSVsbHUgdHhfYnl0ZXM9JWxsdSByeF9wYWNrZXRzPSVsbHUgcnhfYnl0ZXM9JWxsdSByZXN5bmNzPSVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBhdG9taWM2NF9yZWFkKFxcdTAwMjZucy1cXHUwMDNldGxzLnR4X3BhY2tldHMpLFxcbitcXHRcXHQgICAgICAgYXRvbWljNjRfcmVhZChcXHUwMDI2bnMtXFx1MDAzZXRscy50eF9ieXRlcyksXFxuK1xcdFxcdCAgICAgICBhdG9taWM2NF9yZWFkKFxcdTAwMjZucy1cXHUwMDNldGxzLnJ4X3BhY2tldHMpLFxcbitcXHRcXHQgICAgICAgYXRvbWljNjRfcmVhZChcXHUwMDI2bnMtXFx1MDAzZXRscy5yeF9ieXRlcyksXFxuK1xcdFxcdCAgICAgICBhdG9taWM2NF9yZWFkKFxcdTAwMjZucy1cXHUwMDNldGxzLnJlc3luY3MpKTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcXG4rXFx0XFx0XFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlcyBbJXBJNmNdOiV1IC1cXHUwMDNlIFslcEk2Y106JXUgY2lwaGVyPSV1IHNuPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29ubi1cXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggP1xcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcInR4XFxcIiA6IFxcXCJyeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y29ubi1cXHUwMDNlbGFkZHIsIG50b2hzKGNvbm4tXFx1MDAzZWxwb3J0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb25uLVxcdTAwM2VyYWRkciwgbnRvaHMoY29ubi1cXHUwMDNlcnBvcnQpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29ubi1cXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXFx1MDAzZXN0YXJ0X3NuKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzICVwSTQ6JXUgLVxcdTAwM2UgJXBJNDoldSBjaXBoZXI9JXUgc249JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb25uLVxcdTAwM2VkaXIgPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/XFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwidHhcXFwiIDogXFxcInJ4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb25uLVxcdTAwM2VsYWRkci5zNl9hZGRyMzJbM10sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudG9ocyhjb25uLVxcdTAwM2VscG9ydCksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y29ubi1cXHUwMDNlcmFkZHIuczZfYWRkcjMyWzNdLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbnRvaHMoY29ubi1cXHUwMDNlcnBvcnQpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29ubi1cXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXFx1MDAzZXN0YXJ0X3NuKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnMtXFx1MDAzZXRscy5sb2NrKTtcXG4rXFxuK1xcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuK1xcbitcXHRrZnJlZShidWYpO1xcbitcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV90bHNfZGJnX2ZvcHMgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxcbitcXHQucmVhZCA9IG5zaW1fdGxzX2RiZ19yZWFkLFxcbitcXHQubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssXFxuK307XFxuK1xcbit2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuK3tcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bnMtXFx1MDAzZXRscy5sb2NrKTtcXG4rXFxuK1xcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXRsc2Rldl9vcHMgPSBcXHUwMDI2bnNpbV90bHNkZXZfb3BzO1xcbitcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcXG4rXFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTlNJTV9UTFNfRkVBVFVSRVM7XFxuK1xcbitcXHRucy1cXHUwMDNldGxzLmRmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwidGxzXFxcIiwgMDQwMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG5zLVxcdTAwM2Vuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuc2ltX3Rsc19kYmdfZm9wcyk7XFxuK31cXG4rXFxuK3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuK3tcXG4rXFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7XFxuK1xcdHUzMiBsZWZ0O1xcbitcXG4rXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVxcdTAwM2V0bHMuZGZpbGUpO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXHRsZWZ0ID0gbnMtXFx1MDAzZXRscy5jb3VudDtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHRtcCwgXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcXG4rXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZjb25uLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XFxuK1xcdH1cXG4rXFx0bnMtXFx1MDAzZXRscy5jb3VudCA9IDA7XFxuK1xcdG5zLVxcdTAwM2V0bHMudHhfY29ubiA9IDA7XFxuK1xcdG5zLVxcdTAwM2V0bHMucnhfY29ubiA9IDA7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXG4rXFx0aWYgKGxlZnQpXFxuK1xcdFxcdG5ldGRldl9lcnIobnMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcInRlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGxlZnQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmVcXG5AQCAtMCwwICsxLDIgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuK3Rsc19vZmZsb2FkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxcbmluZGV4IDk4MDhjMmZiYWU5ZTguLjViZWI0ZWQ2NGViNTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXFxuQEAgLTEsNSArMSw3IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArIE9SIE1JVFxcbiBcXG4rQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcXG4rXFxuIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRkZXZsaW5rLnNoIFxcXFxcXG4gXFx0ZGV2bGlua19pbl9uZXRucy5zaCBcXFxcXFxuQEAgLTE1LDkgKzE3LDE0IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRwZWVyLnNoIFxcXFxcXG4gXFx0cHNhbXBsZS5zaCBcXFxcXFxuIFxcdHRjLW1xLXZpc2liaWxpdHkuc2ggXFxcXFxcbitcXHR0bHMuc2ggXFxcXFxcbiBcXHR1ZHBfdHVubmVsX25pYy5zaCBcXFxcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcXG4gXFxuK1RFU1RfR0VOX0ZJTEVTIDo9IFxcXFxcXG4rXFx0dGxzX29mZmxvYWRcXG4rIyBlbmQgb2YgVEVTVF9HRU5fRklMRVNcXG4rXFxuIFRFU1RfRklMRVMgOj0gXFxcXFxcbiBcXHRldGh0b29sLWNvbW1vbi5zaFxcbiAjIGVuZCBvZiBURVNUX0ZJTEVTXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zOTllMmM0ZDM4MmRmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2hcXG5AQCAtMCwwICsxLDI3MSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIEV4ZXJjaXNlIG5ldGRldnNpbSdzIGVtdWxhdGVkIGtUTFMgZGV2aWNlIG9mZmxvYWQgb3ZlciBhIGxpbmtlZFxcbisjIG5ldGRldnNpbSBwYWlyLCBvbmUgcG9ydCBwZXIgbmV0d29yayBuYW1lc3BhY2UuXFxuKyNcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTU0ICMga3NmdF9za2lwIGNvbWVzIGZyb20gbGliLnNoXFxuK1xcbitsaWJfZGlyPSQoZGlybmFtZSBcXFwiJDBcXFwiKVxcbisjIHNoZWxsY2hlY2sgc291cmNlPS4vLi4vLi4vLi4vbmV0L2xpYi5zaFxcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTFcXG4rc291cmNlIFxcXCIkbGliX2RpclxcXCIvLi4vLi4vLi4vbmV0L2xpYi5zaFxcbitcXG4rTlNJTV9ERVZfMV9JRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxcbitOU0lNX0RFVl8xX1NZUz0vc3lzL2J1cy9uZXRkZXZzaW0vZGV2aWNlcy9uZXRkZXZzaW0kTlNJTV9ERVZfMV9JRFxcbitOU0lNX0RFVl8yX0lEPSQoKDUxMiArIFJBTkRPTSAlIDI1NikpXFxuK05TSU1fREVWXzJfU1lTPS9zeXMvYnVzL25ldGRldnNpbS9kZXZpY2VzL25ldGRldnNpbSROU0lNX0RFVl8yX0lEXFxuK1xcbitOU0lNX0RFVl9TWVNfTkVXPS9zeXMvYnVzL25ldGRldnNpbS9uZXdfZGV2aWNlXFxuK05TSU1fREVWX1NZU19ERUw9L3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2VcXG4rTlNJTV9ERVZfU1lTX0xJTks9L3N5cy9idXMvbmV0ZGV2c2ltL2xpbmtfZGV2aWNlXFxuK1xcbitERUJVR0ZTPS9zeXMva2VybmVsL2RlYnVnL25ldGRldnNpbVxcbitOU0lNX0RFVl8xX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMV9JRC9wb3J0cy8wL3Rsc1xcbitOU0lNX0RFVl8yX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMl9JRC9wb3J0cy8wL3Rsc1xcbitcXG4rU1JWX0lQPTE5Mi4xNjguMTMuMVxcbitDTElfSVA9MTkyLjE2OC4xMy4yXFxuK1BPUlQ9NDQzM1xcbitcXG4rU1lOQ0RJUj1cXG4rQklOPSRsaWJfZGlyL3Rsc19vZmZsb2FkXFxuK1xcbitudW1fcGFzcz0wXFxuK251bV9mYWlsPTBcXG4rXFxuK2NoZWNrKClcXG4re1xcbitcXHRsb2NhbCBtc2c9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCByZXQ9XFxcIiQyXFxcIlxcbitcXG4rXFx0aWYgWyBcXFwiJHJldFxcXCIgLWVxIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJQQVNTOiAkbXNnXFxcIlxcbitcXHRcXHRudW1fcGFzcz0kKChudW1fcGFzcyArIDEpKVxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6ICRtc2dcXFwiXFxuK1xcdFxcdG51bV9mYWlsPSQoKG51bV9mYWlsICsgMSkpXFxuK1xcdGZpXFxuK31cXG4rXFxuKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyxTQzIzMjkgIyBpbnZva2VkIGZyb20gdGhlIEVYSVQgdHJhcFxcbitjbGVhbnVwKClcXG4re1xcbitcXHRpcCBuZXRucyBkZWwgbnNjbCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpcCBuZXRucyBkZWwgbnNzdiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIFxcXCIkTlNJTV9ERVZfMl9JRFxcXCIgXFx1MDAzZSBcXFwiJE5TSU1fREVWX1NZU19ERUxcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gXFxcIiROU0lNX0RFVl8xX0lEXFxcIiBcXHUwMDNlIFxcXCIkTlNJTV9ERVZfU1lTX0RFTFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0WyAtbiBcXFwiJFNZTkNESVJcXFwiIF0gXFx1MDAyNlxcdTAwMjYgcm0gLXJmIFxcXCIkU1lOQ0RJUlxcXCJcXG4rfVxcbitcXG4rc2V0dXAoKVxcbit7XFxuK1xcdHNldCAtZVxcbitcXG4rXFx0ZWNobyBcXFwiJE5TSU1fREVWXzFfSURcXFwiIFxcdTAwM2UgXFxcIiROU0lNX0RFVl9TWVNfTkVXXFxcIlxcbitcXHRlY2hvIFxcXCIkTlNJTV9ERVZfMl9JRFxcXCIgXFx1MDAzZSBcXFwiJE5TSU1fREVWX1NZU19ORVdcXFwiXFxuK1xcdHVkZXZhZG0gc2V0dGxlIDJcXHUwMDNlL2Rldi9udWxsIHx8IHNsZWVwIDFcXG4rXFxuK1xcdE5TSU1fREVWXzFfTkFNRT0kKGZpbmQgXFxcIiROU0lNX0RFVl8xX1NZU1xcXCIvbmV0IC1tYXhkZXB0aCAxIC10eXBlIGQgISBcXFxcXFxuK1xcdFxcdC1wYXRoIFxcXCIkTlNJTV9ERVZfMV9TWVNcXFwiL25ldCAtZXhlYyBiYXNlbmFtZSB7fSBcXFxcOylcXG4rXFx0TlNJTV9ERVZfMl9OQU1FPSQoZmluZCBcXFwiJE5TSU1fREVWXzJfU1lTXFxcIi9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFxcXFxcXG4rXFx0XFx0LXBhdGggXFxcIiROU0lNX0RFVl8yX1NZU1xcXCIvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFxcXFw7KVxcbitcXG4rXFx0aXAgbmV0bnMgYWRkIG5zc3ZcXG4rXFx0aXAgbmV0bnMgYWRkIG5zY2xcXG4rXFxuK1xcdGlwIGxpbmsgc2V0IFxcXCIkTlNJTV9ERVZfMV9OQU1FXFxcIiBuZXRucyBuc3N2XFxuK1xcdGlwIGxpbmsgc2V0IFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiBuZXRucyBuc2NsXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIG5zc3YgaXAgYWRkciBhZGQgXFxcIiRTUlZfSVAvMjRcXFwiIGRldiBcXFwiJE5TSU1fREVWXzFfTkFNRVxcXCJcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGFkZHIgYWRkIFxcXCIkQ0xJX0lQLzI0XFxcIiBkZXYgXFxcIiROU0lNX0RFVl8yX05BTUVcXFwiXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2IFxcXCIkTlNJTV9ERVZfMV9OQU1FXFxcIiB1cFxcbitcXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2IFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiB1cFxcbitcXG4rXFx0TlNJTV9ERVZfMV9GRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxcbitcXHRleGVjIHtOU0lNX0RFVl8xX0ZEfVxcdTAwM2MvdmFyL3J1bi9uZXRucy9uc3N2XFxuK1xcdE5TSU1fREVWXzFfSUZJRFg9JChpcCBuZXRucyBleGVjIG5zc3YgXFxcXFxcbitcXHRcXHRjYXQgL3N5cy9jbGFzcy9uZXQvXFxcIiROU0lNX0RFVl8xX05BTUVcXFwiL2lmaW5kZXgpXFxuK1xcbitcXHROU0lNX0RFVl8yX0ZEPSQoKDI1NiArIFJBTkRPTSAlIDI1NikpXFxuK1xcdGV4ZWMge05TSU1fREVWXzJfRkR9XFx1MDAzYy92YXIvcnVuL25ldG5zL25zY2xcXG4rXFx0TlNJTV9ERVZfMl9JRklEWD0kKGlwIG5ldG5zIGV4ZWMgbnNjbCBcXFxcXFxuK1xcdFxcdGNhdCAvc3lzL2NsYXNzL25ldC9cXFwiJE5TSU1fREVWXzJfTkFNRVxcXCIvaWZpbmRleClcXG4rXFxuK1xcdGVjaG8gXFxcIiROU0lNX0RFVl8xX0ZEOiROU0lNX0RFVl8xX0lGSURYICROU0lNX0RFVl8yX0ZEOiROU0lNX0RFVl8yX0lGSURYXFxcIiBcXFxcXFxuK1xcdFxcdFxcdTAwM2UgXFxcIiROU0lNX0RFVl9TWVNfTElOS1xcXCJcXG4rXFxuK1xcdFNZTkNESVI9JChta3RlbXAgLWQpXFxuK1xcdHNldCArZVxcbit9XFxuK1xcbitmZWF0dXJlKClcXG4re1xcbitcXHRsb2NhbCBuZXRucz1cXFwiJDFcXFwiXFxuK1xcdGxvY2FsIGRldj1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXQ9XFxcIiQzXFxcIlxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5ldG5zXFxcIiBldGh0b29sIC1rIFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IFxcXFxcXG4rXFx0XFx0c2VkIC1uIFxcXCJzL14kZmVhdDogXFxcXChbYS16XSpcXFxcKS4qL1xcXFwxL3BcXFwiXFxuK31cXG4rXFxuK2RiZ19maWVsZCgpXFxuK3tcXG4rXFx0c2VkIC1uIFxcXCJzLy4qXFxcXFxcdTAwM2MkMj1cXFxcKFswLTldKlxcXFwpLiovXFxcXDEvcFxcXCIgXFxcIiQxXFxcIiB8IGhlYWQgLTFcXG4rfVxcbitcXG4rdGxzX3N0YXQoKVxcbit7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBjYXQgL3Byb2MvbmV0L3Rsc19zdGF0IHwgXFxcXFxcbitcXHRcXHRzZWQgLW4gXFxcInMvXiQyIFxcXFwoWzAtOV0qXFxcXCkvXFxcXDEvcFxcXCJcXG4rfVxcbitcXG4rIyBCb3RoIGVuZHMgcGFyayBvbmNlIHRoZWlyIG9mZmxvYWQgaXMgaW5zdGFsbGVkIGFuZCBiZWZvcmUgYW55IGRhdGEgaXNcXG4rIyBzZW50LCBzbyB0aGUgZHJpdmVyJ3MgY29udGV4dCBjb3VudCBjYW4gYmUgc2FtcGxlZCB3aXRob3V0IHJhY2luZyB0aGVcXG4rIyB0cmFuc2Zlci4gIFBhc3MgXFxcIm5vc2FtcGxlXFxcIiB3aGVuIHRoZSBvZmZsb2FkIGlzIGV4cGVjdGVkIHRvIGJlIHJlZnVzZWQsXFxuKyMgc2luY2UgdGhlbiBuZWl0aGVyIGVuZCBldmVyIHJlYWNoZXMgdGhlIGJhcnJpZXIuXFxuK3J1bl9wYWlyKClcXG4re1xcbitcXHRsb2NhbCBzYW1wbGU9XFxcIiR7MTotc2FtcGxlfVxcXCJcXG4rXFx0bG9jYWwgc3J2X3JjIGNsaV9yYyB3YWl0ZWQ9MFxcbitcXG4rXFx0cm0gLWYgXFxcIiRTWU5DRElSXFxcIi8qLnJlYWR5IFxcXCIkU1lOQ0RJUlxcXCIvZ29cXG4rXFx0Q09OTlNfMT0wXFxuK1xcdENPTk5TXzI9MFxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc3N2IFxcXCIkQklOXFxcIiBzZXJ2ZXIgXFxcIiRTUlZfSVBcXFwiIFxcXCIkUE9SVFxcXCIgXFxcIiRTWU5DRElSXFxcIiBcXHUwMDI2XFxuK1xcdGxvY2FsIHNydl9waWQ9JCFcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc2NsIFxcXCIkQklOXFxcIiBjbGllbnQgXFxcIiRTUlZfSVBcXFwiIFxcXCIkUE9SVFxcXCIgXFxcIiRTWU5DRElSXFxcIiBcXHUwMDI2XFxuK1xcdGxvY2FsIGNsaV9waWQ9JCFcXG4rXFxuK1xcdGlmIFsgXFxcIiRzYW1wbGVcXFwiID0gXFxcInNhbXBsZVxcXCIgXTsgdGhlblxcbitcXHRcXHR3aGlsZSBbICEgLWUgXFxcIiRTWU5DRElSL3NlcnZlci5yZWFkeVxcXCIgXSB8fFxcbitcXHRcXHQgICAgICBbICEgLWUgXFxcIiRTWU5DRElSL2NsaWVudC5yZWFkeVxcXCIgXTsgZG9cXG4rXFx0XFx0XFx0WyBcXFwiJHdhaXRlZFxcXCIgLWdlIDIwMCBdIFxcdTAwMjZcXHUwMDI2IGJyZWFrXFxuK1xcdFxcdFxcdHNsZWVwIDAuMDVcXG4rXFx0XFx0XFx0d2FpdGVkPSQoKHdhaXRlZCArIDEpKVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdENPTk5TXzE9JChkYmdfZmllbGQgXFxcIiROU0lNX0RFVl8xX1RMU1xcXCIgY291bnQpXFxuK1xcdFxcdENPTk5TXzI9JChkYmdfZmllbGQgXFxcIiROU0lNX0RFVl8yX1RMU1xcXCIgY291bnQpXFxuK1xcdFxcdDogXFxcIiR7Q09OTlNfMTo9MH1cXFwiXFxuK1xcdFxcdDogXFxcIiR7Q09OTlNfMjo9MH1cXFwiXFxuK1xcdGZpXFxuK1xcdHRvdWNoIFxcXCIkU1lOQ0RJUi9nb1xcXCJcXG4rXFxuK1xcdHdhaXQgXFxcIiRzcnZfcGlkXFxcIjsgc3J2X3JjPSQ/XFxuK1xcdHdhaXQgXFxcIiRjbGlfcGlkXFxcIjsgY2xpX3JjPSQ/XFxuK1xcbitcXHRbIFxcXCIkc3J2X3JjXFxcIiAtZXEgMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRjbGlfcmNcXFwiIC1lcSAwIF1cXG4rfVxcbitcXG4rIyMjXFxuKyMjIyBDb2RlIHN0YXJ0XFxuKyMjI1xcbitcXG4raWYgWyBcXFwiJChpZCAtdSlcXFwiIC1uZSAwIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogbmVlZCByb290XFxcIlxcbitcXHRleGl0IFxcXCIka3NmdF9za2lwXFxcIlxcbitmaVxcbitcXG4raWYgISBjb21tYW5kIC12IGV0aHRvb2wgXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiBldGh0b29sIG5vdCBmb3VuZFxcXCJcXG4rXFx0ZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rZmlcXG4rXFxuK2lmIFsgISAteCBcXFwiJEJJTlxcXCIgXTsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiAkQklOIG5vdCBidWlsdFxcXCJcXG4rXFx0ZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rZmlcXG4rXFxuK21vZHByb2JlIG5ldGRldnNpbSAyXFx1MDAzZS9kZXYvbnVsbFxcbitpZiBbICEgLWQgL3N5cy9idXMvbmV0ZGV2c2ltIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogbmV0ZGV2c2ltIG5vdCBhdmFpbGFibGVcXFwiXFxuK1xcdGV4aXQgXFxcIiRrc2Z0X3NraXBcXFwiXFxuK2ZpXFxuK1xcbittb2Rwcm9iZSB0bHMgMlxcdTAwM2UvZGV2L251bGxcXG4raWYgWyAhIC1lIC9wcm9jL25ldC90bHNfc3RhdCBdOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGtlcm5lbCBUTFMgbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rZmlcXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK3NldHVwXFxuK1xcbisjIFRoZSBvZmZsb2FkIGhhcyB0byBiZSBhZHZlcnRpc2VkLCBhbmQgb24gYnkgZGVmYXVsdCBsaWtlIHRoZSBvdGhlclxcbisjIG5ldGRldnNpbSBjcnlwdG8gb2ZmbG9hZHMuXFxuK2ZvciBmIGluIHRscy1ody10eC1vZmZsb2FkIHRscy1ody1yeC1vZmZsb2FkOyBkb1xcbitcXHRbIFxcXCIkKGZlYXR1cmUgbnNzdiBcXFwiJE5TSU1fREVWXzFfTkFNRVxcXCIgXFxcIiRmXFxcIilcXFwiID0gXFxcIm9uXFxcIiBdXFxuK1xcdGNoZWNrIFxcXCIkZiBhZHZlcnRpc2VkIGFuZCBvbiBieSBkZWZhdWx0XFxcIiAkP1xcbitkb25lXFxuK1xcbitbIC1lIFxcXCIkTlNJTV9ERVZfMV9UTFNcXFwiIF1cXG4rY2hlY2sgXFxcInBlci1wb3J0IGRlYnVnZnMgdGxzIGZpbGUgZXhpc3RzXFxcIiAkP1xcbitcXG4rIyBNYWluIGRhdGEgcGF0aCBydW4uXFxuK3J1bl9wYWlyXFxuK2NoZWNrIFxcXCJvZmZsb2FkZWQgVExTIGRhdGEgdHJhbnNmZXJcXFwiICQ/XFxuK1xcbisjIFNhbXBsZWQgYXQgdGhlIGJhcnJpZXIsIHNvIGVhY2ggcG9ydCBtdXN0IGJlIGhvbGRpbmcgZXhhY3RseSB0aGUgVFggYW5kXFxuKyMgdGhlIFJYIGNvbnRleHQgb2YgaXRzIG93biBzb2NrZXQuXFxuK1sgXFxcIiRDT05OU18xXFxcIiAtZXEgMiBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRDT05OU18yXFxcIiAtZXEgMiBdXFxuK2NoZWNrIFxcXCJ0eCBhbmQgcnggY29udGV4dHMgaW5zdGFsbGVkIG9uIGJvdGggcG9ydHNcXFwiICQ/XFxuK1xcbisjIEJvdGggZW5kcyBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHRoZSBkZXZpY2UgcGF0aCwgbm90IHRoZSBTVyBmYWxsYmFjay5cXG4rWyBcXFwiJCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKVxcXCIgLWdlIDEgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQodGxzX3N0YXQgbnNzdiBUbHNSeERldmljZSlcXFwiIC1nZSAxIF0gXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRbIFxcXCIkKHRsc19zdGF0IG5zY2wgVGxzVHhEZXZpY2UpXFxcIiAtZ2UgMSBdIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0WyBcXFwiJCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKVxcXCIgLWdlIDEgXVxcbitjaGVjayBcXFwiYm90aCBlbmRzIHVzZWQgdGhlIGRldmljZSBwYXRoXFxcIiAkP1xcbitcXG4rWyBcXFwiJCh0bHNfc3RhdCBuc3N2IFRsc1R4U3cpXFxcIiAtZXEgMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQodGxzX3N0YXQgbnNjbCBUbHNUeFN3KVxcXCIgLWVxIDAgXVxcbitjaGVjayBcXFwibm8gc2lsZW50IGZhbGxiYWNrIHRvIHRoZSBzb2Z0d2FyZSBwYXRoXFxcIiAkP1xcbitcXG4rWyBcXFwiJCh0bHNfc3RhdCBuc3N2IFRsc0RlY3J5cHRFcnJvcilcXFwiIC1lcSAwIF0gXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRbIFxcXCIkKHRsc19zdGF0IG5zY2wgVGxzRGVjcnlwdEVycm9yKVxcXCIgLWVxIDAgXVxcbitjaGVjayBcXFwibm8gZGVjcnlwdCBlcnJvcnNcXFwiICQ/XFxuK1xcbisjIFRoZSBkcml2ZXIgbXVzdCBoYXZlIHNlZW4gdGhlIHJlY29yZHMgZ28gYnkgaW4gYm90aCBkaXJlY3Rpb25zLlxcbitbIFxcXCIkKGRiZ19maWVsZCBcXFwiJE5TSU1fREVWXzFfVExTXFxcIiB0eF9wYWNrZXRzKVxcXCIgLWdlIDEgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQoZGJnX2ZpZWxkIFxcXCIkTlNJTV9ERVZfMV9UTFNcXFwiIHJ4X3BhY2tldHMpXFxcIiAtZ2UgMSBdIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0WyBcXFwiJChkYmdfZmllbGQgXFxcIiROU0lNX0RFVl8yX1RMU1xcXCIgdHhfcGFja2V0cylcXFwiIC1nZSAxIF0gXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRbIFxcXCIkKGRiZ19maWVsZCBcXFwiJE5TSU1fREVWXzJfVExTXFxcIiByeF9wYWNrZXRzKVxcXCIgLWdlIDEgXVxcbitjaGVjayBcXFwiZHJpdmVyIGNvdW50ZWQgb2ZmbG9hZGVkIHBhY2tldHMgYm90aCB3YXlzXFxcIiAkP1xcbitcXG4rIyBTb2NrZXRzIGFyZSBjbG9zZWQgYnkgbm93LCBzbyBldmVyeSBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGdpdmVuIGJhY2suXFxuK1sgXFxcIiQoZGJnX2ZpZWxkIFxcXCIkTlNJTV9ERVZfMV9UTFNcXFwiIGNvdW50KVxcXCIgLWVxIDAgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQoZGJnX2ZpZWxkIFxcXCIkTlNJTV9ERVZfMl9UTFNcXFwiIGNvdW50KVxcXCIgLWVxIDAgXVxcbitjaGVjayBcXFwiYWxsIG9mZmxvYWQgY29udGV4dHMgcmVsZWFzZWQgb24gY2xvc2VcXFwiICQ/XFxuK1xcbitbIFxcXCIkKHRsc19zdGF0IG5zc3YgVGxzQ3VyclR4RGV2aWNlKVxcXCIgLWVxIDAgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQodGxzX3N0YXQgbnNzdiBUbHNDdXJyUnhEZXZpY2UpXFxcIiAtZXEgMCBdXFxuK2NoZWNrIFxcXCJubyBkZXZpY2UgY29udGV4dHMgbGVmdCBiZWhpbmRcXFwiICQ/XFxuK1xcbisjIFR1cm5pbmcgdGhlIGZlYXR1cmUgb2ZmIGhhcyB0byBtYWtlIHRoZSBvZmZsb2FkIHJlZnVzZSB0aGUgY29ubmVjdGlvbjtcXG4rIyB0aGUgdGVzdCBiaW5hcnkgaW5zaXN0cyBvbiB0aGUgZGV2aWNlIHBhdGgsIHNvIGl0IG11c3Qgbm93IGZhaWwuXFxuK2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFxcXCIkTlNJTV9ERVZfMV9OQU1FXFxcIiB0bHMtaHctdHgtb2ZmbG9hZCBvZmZcXG4raXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXFxcIiROU0lNX0RFVl8xX05BTUVcXFwiIHRscy1ody1yeC1vZmZsb2FkIG9mZlxcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcXFwiJE5TSU1fREVWXzJfTkFNRVxcXCIgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmXFxuK2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiB0bHMtaHctcngtb2ZmbG9hZCBvZmZcXG4rXFxuK3J1bl9wYWlyIG5vc2FtcGxlXFxuK3JjPSQ/XFxuK1sgXFxcIiRyY1xcXCIgLW5lIDAgXVxcbitjaGVjayBcXFwib2ZmbG9hZCBkZWNsaW5lZCBvbmNlIHRoZSBmZWF0dXJlIGlzIG9mZlxcXCIgJD9cXG4rXFxuK1sgXFxcIiQodGxzX3N0YXQgbnNzdiBUbHNUeFN3KVxcXCIgLWdlIDEgXVxcbitjaGVjayBcXFwic29mdHdhcmUgcGF0aCB1c2VkIHdoZW4gb2ZmbG9hZCBpcyBvZmZcXFwiICQ/XFxuK1xcbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcXFwiJE5TSU1fREVWXzFfTkFNRVxcXCIgdGxzLWh3LXR4LW9mZmxvYWQgb25cXG4raXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXFxcIiROU0lNX0RFVl8xX05BTUVcXFwiIHRscy1ody1yeC1vZmZsb2FkIG9uXFxuK2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiB0bHMtaHctdHgtb2ZmbG9hZCBvblxcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcXFwiJE5TSU1fREVWXzJfTkFNRVxcXCIgdGxzLWh3LXJ4LW9mZmxvYWQgb25cXG4rXFxuK3J1bl9wYWlyXFxuK2NoZWNrIFxcXCJvZmZsb2FkIHdvcmtzIGFnYWluIGFmdGVyIHJlLWVuYWJsaW5nXFxcIiAkP1xcbitcXG4rZWNob1xcbitlY2hvIFxcXCJwYXNzZWQ6ICRudW1fcGFzcyBmYWlsZWQ6ICRudW1fZmFpbFxcXCJcXG4rWyBcXFwiJG51bV9mYWlsXFxcIiAtZXEgMCBdIFxcdTAwMjZcXHUwMDI2IGV4aXQgMFxcbitleGl0IDFcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rsc19vZmZsb2FkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWJmYjRiZmNkNGY0NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xcbkBAIC0wLDAgKzEsNDk4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIGtUTFMgZGV2aWNlIG9mZmxvYWQgZGF0YSBwYXRoIGV4ZXJjaXNlLCBkcml2ZW4gYnkgdGxzLnNoLlxcbisgKlxcbisgKiBPbmUgaW5zdGFuY2UgcnVucyBhcyB0aGUgc2VydmVyIGFuZCBvbmUgYXMgdGhlIGNsaWVudCwgZWFjaCBpbiBpdHMgb3duXFxuKyAqIG5ldHdvcmsgbmFtZXNwYWNlLCBjb25uZWN0ZWQgYmFjayB0byBiYWNrIGJ5IGEgbGlua2VkIG5ldGRldnNpbSBwYWlyLlxcbisgKiBCb3RoIGVuZHMgZW5hYmxlIGtUTFMgYW5kIHJlbHkgb24gbmV0ZGV2c2ltJ3MgZW11bGF0ZWQgVExTIG9mZmxvYWQsIHNvXFxuKyAqIGV2ZXJ5IHJlY29yZCB0cmF2ZWxzIHRocm91Z2ggbmV0L3Rscy90bHNfZGV2aWNlLmMgcmF0aGVyIHRoYW4gdGhlXFxuKyAqIHNvZnR3YXJlIHBhdGguXFxuKyAqXFxuKyAqIFRoZSB0d28gcHJvY2Vzc2VzIHJlbmRlenZvdXMgdGhyb3VnaCBhIHNoYXJlZCBkaXJlY3Rvcnkgc28gdGhhdCBuZWl0aGVyXFxuKyAqIHNpZGUgc2VuZHMgYmVmb3JlIHRoZSBvdGhlciBoYXMgaW5zdGFsbGVkIGl0cyBSWCBvZmZsb2FkLlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L2luLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L3RjcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXJnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGxzLmhcXHUwMDNlXFxuK1xcbisjaWZuZGVmIFNPTF9UTFNcXG4rI2RlZmluZSBTT0xfVExTXFx0XFx0XFx0MjgyXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBUQ1BfVUxQXFxuKyNkZWZpbmUgVENQX1VMUFxcdFxcdFxcdDMxXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSBCVUxLX0xFTlxcdFxcdCgyMDAgKiAxMDI0KVxcbisjZGVmaW5lIE1PUkVfRlJBR1NcXHRcXHQ2NFxcbisjZGVmaW5lIFNQTElDRV9GUkFHX0xFTlxcdFxcdDQwOTZcXG4rI2RlZmluZSBTUExJQ0VfRlJBR1NcXHRcXHQ4XFxuK1xcbisvKiBUTFNfTUlOX1JFQ09SRF9TSVpFX0xJTSBhbmQgVExTX01BWF9QQVlMT0FEX1NJWkUsIHdoaWNoIGFyZSBub3QgdWFwaS4gKi9cXG4rI2RlZmluZSBSRUNfTElNX01JTlxcdFxcdDY0XFxuKyNkZWZpbmUgUkVDX0xJTV9NQVhcXHRcXHQxNjM4NFxcbitcXG4rI2RlZmluZSBTTUFMTF9SRUNTXFx0XFx0MTAwXFxuKyNkZWZpbmUgU01BTExfTEVOXFx0XFx0KFJFQ19MSU1fTUlOICogU01BTExfUkVDUylcXG4rXFxuKyNkZWZpbmUgU1lOQ19USU1FT1VUX01TXFx0XFx0MjAwMDBcXG4rI2RlZmluZSBDT05ORUNUX1RJTUVPVVRfTVNcXHQyMDAwMFxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJvbGU7XFxuK1xcbitzdGF0aWMgdm9pZCBkaWUoY29uc3QgY2hhciAqd2hhdClcXG4re1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiVzOiAlczogJXNcXFxcblxcXCIsIHJvbGUsIHdoYXQsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGV4aXQoMSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZhaWwoY29uc3QgY2hhciAqZm10LCAuLi4pXFxuK3tcXG4rXFx0dmFfbGlzdCBhcDtcXG4rXFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiJXM6IFxcXCIsIHJvbGUpO1xcbitcXHR2YV9zdGFydChhcCwgZm10KTtcXG4rXFx0dmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTtcXG4rXFx0dmFfZW5kKGFwKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXCIpO1xcbitcXHRleGl0KDEpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtc2xlZXAodW5zaWduZWQgaW50IG1zKVxcbit7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYyB0cyA9IHtcXG4rXFx0XFx0LnR2X3NlYyA9IG1zIC8gMTAwMCxcXG4rXFx0XFx0LnR2X25zZWMgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDBMLFxcbitcXHR9O1xcbitcXG4rXFx0bmFub3NsZWVwKFxcdTAwMjZ0cywgTlVMTCk7XFxuK31cXG4rXFxuKy8qIC9wcm9jL25ldC90bHNfc3RhdCBpcyBwZXIgbmV0bnMsIHNvIGJvdGggZW5kcyBjYW4gY2hlY2sgdGhhdCB0aGVpciBvd25cXG4rICogY29ubmVjdGlvbiByZWFsbHkgbGFuZGVkIG9uIHRoZSBkZXZpY2UgcGF0aC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfdGxzX3N0YXQoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRjaGFyIGxpbmVbMjU2XTtcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRmID0gZm9wZW4oXFxcIi9wcm9jL25ldC90bHNfc3RhdFxcXCIsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZilcXG4rXFx0XFx0ZGllKFxcXCJvcGVuIC9wcm9jL25ldC90bHNfc3RhdFxcXCIpO1xcbitcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcXG4rXFx0XFx0Y2hhciBrZXlbNjRdO1xcbitcXG4rXFx0XFx0aWYgKHNzY2FuZihsaW5lLCBcXFwiJTYzcyAlbHVcXFwiLCBrZXksIFxcdTAwMjZ2YWwpICE9IDIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIXN0cmNtcChrZXksIG5hbWUpKSB7XFxuK1xcdFxcdFxcdGZjbG9zZShmKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRmY2xvc2UoZik7XFxuK1xcdGZhaWwoXFxcIiVzIG5vdCBmb3VuZCBpbiAvcHJvYy9uZXQvdGxzX3N0YXRcXFwiLCBuYW1lKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZpbGxfcGF0dGVybihjaGFyICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBzZWVkKVxcbit7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbitcXHRcXHRidWZbaV0gPSAoY2hhcikoc2VlZCArIGkgKiAzMSArIChpIFxcdTAwM2VcXHUwMDNlIDgpICogNyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNoZWNrX3BhdHRlcm4oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgc2VlZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICp3aGF0KVxcbit7XFxuK1xcdGNoYXIgKndhbnQgPSBtYWxsb2MobGVuKTtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIXdhbnQpXFxuK1xcdFxcdGRpZShcXFwibWFsbG9jXFxcIik7XFxuK1xcbitcXHRmaWxsX3BhdHRlcm4od2FudCwgbGVuLCBzZWVkKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKSB7XFxuK1xcdFxcdGlmIChidWZbaV0gIT0gd2FudFtpXSlcXG4rXFx0XFx0XFx0ZmFpbChcXFwiJXM6IHBheWxvYWQgbWlzbWF0Y2ggYXQgYnl0ZSAlenU6IGdvdCAweCUwMnggd2FudCAweCUwMnhcXFwiLFxcbitcXHRcXHRcXHQgICAgIHdoYXQsIGksICh1bnNpZ25lZCBjaGFyKWJ1ZltpXSxcXG4rXFx0XFx0XFx0ICAgICAodW5zaWduZWQgY2hhcil3YW50W2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0ZnJlZSh3YW50KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3JpdGVfYWxsKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHNpemVfdCBkb25lID0gMDtcXG4rXFxuK1xcdHdoaWxlIChkb25lIFxcdTAwM2MgbGVuKSB7XFxuK1xcdFxcdHNzaXplX3QgbiA9IHNlbmQoZmQsIGJ1ZiArIGRvbmUsIGxlbiAtIGRvbmUsIDApO1xcbitcXG4rXFx0XFx0aWYgKG4gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGRpZShcXFwic2VuZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGRvbmUgKz0gbjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZWFkX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzaXplX3QgZG9uZSA9IDA7XFxuK1xcbitcXHR3aGlsZSAoZG9uZSBcXHUwMDNjIGxlbikge1xcbitcXHRcXHRzc2l6ZV90IG4gPSByZWN2KGZkLCBidWYgKyBkb25lLCBsZW4gLSBkb25lLCAwKTtcXG4rXFxuK1xcdFxcdGlmIChuIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gPT0gRUlOVFIpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRkaWUoXFxcInJlY3ZcXFwiKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobiA9PSAwKVxcbitcXHRcXHRcXHRmYWlsKFxcXCJwZWVyIGNsb3NlZCBhZnRlciAlenUgb2YgJXp1IGJ5dGVzXFxcIiwgZG9uZSwgbGVuKTtcXG4rXFx0XFx0ZG9uZSArPSBuO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuYWJsZV9rdGxzKGludCBmZClcXG4re1xcbitcXHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggY2kgPSB7fTtcXG4rXFx0dW5zaWduZWQgbG9uZyB0eF9iZWZvcmUsIHJ4X2JlZm9yZTtcXG4rXFxuK1xcdHR4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXFxcIlRsc1R4RGV2aWNlXFxcIik7XFxuK1xcdHJ4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXFxcIlRsc1J4RGV2aWNlXFxcIik7XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKSlcXG4rXFx0XFx0ZGllKFxcXCJzZXRzb2Nrb3B0KFRDUF9VTFAsIHRscylcXFwiKTtcXG4rXFxuK1xcdGNpLmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTjtcXG4rXFx0Y2kuaW5mby5jaXBoZXJfdHlwZSA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjg7XFxuK1xcdG1lbXNldChjaS5pdiwgJ2knLCBzaXplb2YoY2kuaXYpKTtcXG4rXFx0bWVtc2V0KGNpLmtleSwgJ2snLCBzaXplb2YoY2kua2V5KSk7XFxuK1xcdG1lbXNldChjaS5zYWx0LCAncycsIHNpemVvZihjaS5zYWx0KSk7XFxuK1xcdG1lbXNldChjaS5yZWNfc2VxLCAwLCBzaXplb2YoY2kucmVjX3NlcSkpO1xcbitcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWCwgXFx1MDAyNmNpLCBzaXplb2YoY2kpKSlcXG4rXFx0XFx0ZGllKFxcXCJzZXRzb2Nrb3B0KFRMU19UWClcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19SWCwgXFx1MDAyNmNpLCBzaXplb2YoY2kpKSlcXG4rXFx0XFx0ZGllKFxcXCJzZXRzb2Nrb3B0KFRMU19SWClcXFwiKTtcXG4rXFxuK1xcdC8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZXhlcmNpc2U6IHJlZnVzZSB0byBzaWxlbnRseSBmYWxsIGJhY2sgdG9cXG4rXFx0ICogdGhlIHNvZnR3YXJlIHBhdGgsIG90aGVyd2lzZSB0aGUgdGVzdCB3b3VsZCBwYXNzIHdpdGhvdXQgZXZlclxcbitcXHQgKiB0b3VjaGluZyB0bHNfZGV2aWNlLmMuXFxuK1xcdCAqL1xcbitcXHRpZiAocmVhZF90bHNfc3RhdChcXFwiVGxzVHhEZXZpY2VcXFwiKSAhPSB0eF9iZWZvcmUgKyAxKVxcbitcXHRcXHRmYWlsKFxcXCJUWCBkaWQgbm90IGxhbmQgb24gdGhlIGRldmljZSBwYXRoIChUbHNUeERldmljZSAlbHUgLVxcdTAwM2UgJWx1KVxcXCIsXFxuK1xcdFxcdCAgICAgdHhfYmVmb3JlLCByZWFkX3Rsc19zdGF0KFxcXCJUbHNUeERldmljZVxcXCIpKTtcXG4rXFx0aWYgKHJlYWRfdGxzX3N0YXQoXFxcIlRsc1J4RGV2aWNlXFxcIikgIT0gcnhfYmVmb3JlICsgMSlcXG4rXFx0XFx0ZmFpbChcXFwiUlggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzUnhEZXZpY2UgJWx1IC1cXHUwMDNlICVsdSlcXFwiLFxcbitcXHRcXHQgICAgIHJ4X2JlZm9yZSwgcmVhZF90bHNfc3RhdChcXFwiVGxzUnhEZXZpY2VcXFwiKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHN5bmNfcGF0aChjaGFyICpvdXQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqd2hvKVxcbit7XFxuK1xcdGlmICgoc2l6ZV90KXNucHJpbnRmKG91dCwgbGVuLCBcXFwiJXMvJXMucmVhZHlcXFwiLCBkaXIsIHdobykgXFx1MDAzZT0gbGVuKVxcbitcXHRcXHRmYWlsKFxcXCJzeW5jIGRpciBwYXRoIHRvbyBsb25nXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcilcXG4re1xcbitcXHRjaGFyIG1pbmVbUEFUSF9NQVhdLCB0aGVpcnNbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBpbnQgd2FpdGVkID0gMDtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0c3luY19wYXRoKG1pbmUsIHNpemVvZihtaW5lKSwgZGlyLCBtZSk7XFxuK1xcdHN5bmNfcGF0aCh0aGVpcnMsIHNpemVvZih0aGVpcnMpLCBkaXIsIHBlZXIpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGRpZShcXFwiY3JlYXRlIHN5bmMgZmlsZVxcXCIpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHR3aGlsZSAoYWNjZXNzKHRoZWlycywgRl9PSykpIHtcXG4rXFx0XFx0aWYgKHdhaXRlZCBcXHUwMDNlPSBTWU5DX1RJTUVPVVRfTVMpXFxuK1xcdFxcdFxcdGZhaWwoXFxcInRpbWVkIG91dCB3YWl0aW5nIGZvciAlc1xcXCIsIHBlZXIpO1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHRcXHR3YWl0ZWQgKz0gMjA7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogQm90aCBlbmRzIHN0b3AgaGVyZSB3aXRoIHRoZWlyIG9mZmxvYWQgaW5zdGFsbGVkIGFuZCBubyBkYXRhIHNlbnQgeWV0LFxcbisgKiBzbyB0aGF0IHRoZSBkcml2ZXIgc3RhdGUgY2FuIGJlIGluc3BlY3RlZCBmcm9tIHRoZSBvdXRzaWRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd2FpdF9mb3JfZ28oY29uc3QgY2hhciAqZGlyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB3YWl0ZWQgPSAwO1xcbitcXHRjaGFyIGdvW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGlmICgoc2l6ZV90KXNucHJpbnRmKGdvLCBzaXplb2YoZ28pLCBcXFwiJXMvZ29cXFwiLCBkaXIpIFxcdTAwM2U9IHNpemVvZihnbykpXFxuK1xcdFxcdGZhaWwoXFxcInN5bmMgZGlyIHBhdGggdG9vIGxvbmdcXFwiKTtcXG4rXFxuK1xcdHdoaWxlIChhY2Nlc3MoZ28sIEZfT0spKSB7XFxuK1xcdFxcdGlmICh3YWl0ZWQgXFx1MDAzZT0gU1lOQ19USU1FT1VUX01TKVxcbitcXHRcXHRcXHRmYWlsKFxcXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ29cXFwiKTtcXG4rXFx0XFx0bXNsZWVwKDIwKTtcXG4rXFx0XFx0d2FpdGVkICs9IDIwO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIFNtYWxsIHdyaXRlcyB3aXRoIE1TR19NT1JFIGFjY3VtdWxhdGUgaW50byBvbmUgb3BlbiByZWNvcmQgYmVmb3JlIGl0IGlzXFxuKyAqIHB1c2hlZCwgd2hpY2ggaXMgdGhlIGludGVyZXN0aW5nIHBhcnQgb2YgdGxzX3B1c2hfZGF0YSgpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9tc2dfbW9yZShpbnQgZmQsIHVuc2lnbmVkIGludCBzZWVkKVxcbit7XFxuK1xcdGNoYXIgYnVmW01PUkVfRlJBR1MgKyAxXTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmaWxsX3BhdHRlcm4oYnVmLCBzaXplb2YoYnVmKSwgc2VlZCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTU9SRV9GUkFHUzsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZW5kKGZkLCBidWYgKyBpLCAxLCBNU0dfTU9SRSkgIT0gMSlcXG4rXFx0XFx0XFx0ZGllKFxcXCJzZW5kKE1TR19NT1JFKVxcXCIpO1xcbitcXHR9XFxuK1xcdGlmIChzZW5kKGZkLCBidWYgKyBNT1JFX0ZSQUdTLCAxLCAwKSAhPSAxKVxcbitcXHRcXHRkaWUoXFxcInNlbmQobGFzdClcXFwiKTtcXG4rfVxcbitcXG4rLyogc3BsaWNlKCkgcmVhY2hlcyB0bHNfcHVzaF9kYXRhKCkgd2l0aCBNU0dfU1BMSUNFX1BBR0VTIG9uY2VcXG4rICogVExTX1RYX1pFUk9DT1BZX1JPIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgZGlzdGluY3QgZnJhZ21lbnQgcGF0aC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNlbmRfc3BsaWNlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbU1BMSUNFX0ZSQUdfTEVOXTtcXG4rXFx0aW50IHZhbCA9IDE7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxcbitcXHRcXHRkaWUoXFxcInNldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPKVxcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNQTElDRV9GUkFHUzsgaSsrKSB7XFxuK1xcdFxcdGludCBwWzJdO1xcbitcXG4rXFx0XFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQgKyBpICogU1BMSUNFX0ZSQUdfTEVOKTtcXG4rXFxuK1xcdFxcdGlmIChwaXBlKHApKVxcbitcXHRcXHRcXHRkaWUoXFxcInBpcGVcXFwiKTtcXG4rXFx0XFx0aWYgKHdyaXRlKHBbMV0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IHNpemVvZihidWYpKVxcbitcXHRcXHRcXHRkaWUoXFxcIndyaXRlIHRvIHBpcGVcXFwiKTtcXG4rXFx0XFx0aWYgKHNwbGljZShwWzBdLCBOVUxMLCBmZCwgTlVMTCwgc2l6ZW9mKGJ1ZiksXFxuK1xcdFxcdFxcdCAgIGkgPT0gU1BMSUNFX0ZSQUdTIC0gMSA/IDAgOiBTUExJQ0VfRl9NT1JFKSAhPVxcbitcXHRcXHQgICAgc2l6ZW9mKGJ1ZikpXFxuK1xcdFxcdFxcdGRpZShcXFwic3BsaWNlXFxcIik7XFxuK1xcdFxcdGNsb3NlKHBbMF0pO1xcbitcXHRcXHRjbG9zZShwWzFdKTtcXG4rXFx0fVxcbitcXG4rXFx0dmFsID0gMDtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxcbitcXHRcXHRkaWUoXFxcInNldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPIG9mZilcXFwiKTtcXG4rfVxcbitcXG4rLyogQSByZWNvcmQgY2FuIGJlIHVwIHRvIDE2Sywgc28gbm9ybWFsbHkgb25lIHNlZ21lbnQgY2FycmllcyBhIHBpZWNlIG9mIGFcXG4rICogc2luZ2xlIHJlY29yZC4gIFNocmlua2luZyB0aGUgbGltaXQgcHV0cyBhIGRvemVuIG9yIHNvIHdob2xlIHJlY29yZHMgaW5cXG4rICogZXZlcnkgc2VnbWVudCBpbnN0ZWFkLCB3aGljaCBpcyB0aGUgbXVsdGktcmVjb3JkIHBhdGggdGhyb3VnaCB0aGUgZHJpdmVyLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9zbWFsbF9yZWNvcmRzKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbU01BTExfTEVOXTtcXG4rXFx0dWludDE2X3QgbGltaXQ7XFxuK1xcbitcXHRsaW1pdCA9IFJFQ19MSU1fTUlOO1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgXFx1MDAyNmxpbWl0LFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKGxpbWl0KSkpXFxuK1xcdFxcdGRpZShcXFwic2V0c29ja29wdChUTFNfVFhfTUFYX1BBWUxPQURfTEVOKVxcXCIpO1xcbitcXG4rXFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpO1xcbitcXHR3cml0ZV9hbGwoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXG4rXFx0bGltaXQgPSBSRUNfTElNX01BWDtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9NQVhfUEFZTE9BRF9MRU4sIFxcdTAwMjZsaW1pdCxcXG4rXFx0XFx0ICAgICAgIHNpemVvZihsaW1pdCkpKVxcbitcXHRcXHRkaWUoXFxcInNldHNvY2tvcHQoVExTX1RYX01BWF9QQVlMT0FEX0xFTiByZXN0b3JlKVxcXCIpO1xcbit9XFxuK1xcbisjZGVmaW5lIFNFRURfQzJTX0JVTEtcXHQweDExXFxuKyNkZWZpbmUgU0VFRF9TMkNfQlVMS1xcdDB4MjJcXG4rI2RlZmluZSBTRUVEX0MyU19NT1JFXFx0MHgzM1xcbisjZGVmaW5lIFNFRURfQzJTX1NQTElDRVxcdDB4NDRcXG4rI2RlZmluZSBTRUVEX0MyU19TTUFMTFxcdDB4NTVcXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9jbGllbnQoaW50IGZkKVxcbit7XFxuK1xcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7XFxuK1xcbitcXHRpZiAoIWJ1ZilcXG4rXFx0XFx0ZGllKFxcXCJtYWxsb2NcXFwiKTtcXG4rXFxuK1xcdGZpbGxfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX0MyU19CVUxLKTtcXG4rXFx0d3JpdGVfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcXG4rXFxuK1xcdHJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcXG4rXFx0Y2hlY2tfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX1MyQ19CVUxLLCBcXFwic2VydmVyIC1cXHUwMDNlIGNsaWVudCBidWxrXFxcIik7XFxuK1xcbitcXHRzZW5kX21zZ19tb3JlKGZkLCBTRUVEX0MyU19NT1JFKTtcXG4rXFx0c2VuZF9zcGxpY2UoZmQsIFNFRURfQzJTX1NQTElDRSk7XFxuK1xcdHNlbmRfc21hbGxfcmVjb3JkcyhmZCwgU0VFRF9DMlNfU01BTEwpO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgdGhlIHNlcnZlcidzIHZlcmRpY3QgYmVmb3JlIHRlYXJpbmcgYW55dGhpbmcgZG93bi4gKi9cXG4rXFx0cmVhZF9hbGwoZmQsIGJ1ZiwgMSk7XFxuK1xcdGlmIChidWZbMF0gIT0gJ2snKVxcbitcXHRcXHRmYWlsKFxcXCJzZXJ2ZXIgcmVwb3J0ZWQgYSBmYWlsdXJlXFxcIik7XFxuK1xcbitcXHRmcmVlKGJ1Zik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkKVxcbit7XFxuK1xcdHNpemVfdCBzcGxpY2VfbGVuID0gKHNpemVfdClTUExJQ0VfRlJBR19MRU4gKiBTUExJQ0VfRlJBR1M7XFxuK1xcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7XFxuK1xcdGNoYXIgbW9yZVtNT1JFX0ZSQUdTICsgMV07XFxuK1xcdGNoYXIgKnNidWY7XFxuK1xcdGNoYXIgb2sgPSAnayc7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0c2J1ZiA9IG1hbGxvYyhzcGxpY2VfbGVuKTtcXG4rXFx0aWYgKCFidWYgfHwgIXNidWYpXFxuK1xcdFxcdGRpZShcXFwibWFsbG9jXFxcIik7XFxuK1xcbitcXHRyZWFkX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XFxuK1xcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSywgXFxcImNsaWVudCAtXFx1MDAzZSBzZXJ2ZXIgYnVsa1xcXCIpO1xcbitcXG4rXFx0ZmlsbF9wYXR0ZXJuKGJ1ZiwgQlVMS19MRU4sIFNFRURfUzJDX0JVTEspO1xcbitcXHR3cml0ZV9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pO1xcbitcXG4rXFx0cmVhZF9hbGwoZmQsIG1vcmUsIHNpemVvZihtb3JlKSk7XFxuK1xcdGNoZWNrX3BhdHRlcm4obW9yZSwgc2l6ZW9mKG1vcmUpLCBTRUVEX0MyU19NT1JFLCBcXFwiY2xpZW50IC1cXHUwMDNlIHNlcnZlciBNU0dfTU9SRVxcXCIpO1xcbitcXG4rXFx0cmVhZF9hbGwoZmQsIHNidWYsIHNwbGljZV9sZW4pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgU1BMSUNFX0ZSQUdTOyBpKyspXFxuK1xcdFxcdGNoZWNrX3BhdHRlcm4oc2J1ZiArIChzaXplX3QpaSAqIFNQTElDRV9GUkFHX0xFTixcXG4rXFx0XFx0XFx0ICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgK1xcbitcXHRcXHRcXHQgICAgICBpICogU1BMSUNFX0ZSQUdfTEVOLCBcXFwiY2xpZW50IC1cXHUwMDNlIHNlcnZlciBzcGxpY2VcXFwiKTtcXG4rXFxuK1xcdHJlYWRfYWxsKGZkLCBidWYsIFNNQUxMX0xFTik7XFxuK1xcdGNoZWNrX3BhdHRlcm4oYnVmLCBTTUFMTF9MRU4sIFNFRURfQzJTX1NNQUxMLFxcbitcXHRcXHQgICAgICBcXFwiY2xpZW50IC1cXHUwMDNlIHNlcnZlciBzbWFsbCByZWNvcmRzXFxcIik7XFxuK1xcbitcXHR3cml0ZV9hbGwoZmQsIFxcdTAwMjZvaywgMSk7XFxuK1xcbitcXHRmcmVlKHNidWYpO1xcbitcXHRmcmVlKGJ1Zik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZG9fc2VydmVyKGNvbnN0IGNoYXIgKmlwLCBpbnQgcG9ydCwgY29uc3QgY2hhciAqc3luY2RpcilcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2EgPSB7fTtcXG4rXFx0aW50IGxmZCwgZmQsIG9uZSA9IDE7XFxuK1xcbitcXHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xcbitcXHRpZiAobGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0ZGllKFxcXCJzb2NrZXRcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQobGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFxcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcXG4rXFx0XFx0ZGllKFxcXCJTT19SRVVTRUFERFJcXFwiKTtcXG4rXFxuK1xcdHNhLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRzYS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpO1xcbitcXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcXHUwMDI2c2Euc2luX2FkZHIpICE9IDEpXFxuK1xcdFxcdGZhaWwoXFxcImJhZCBiaW5kIGFkZHJlc3MgJXNcXFwiLCBpcCk7XFxuK1xcbitcXHRpZiAoYmluZChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c2EsIHNpemVvZihzYSkpKVxcbitcXHRcXHRkaWUoXFxcImJpbmRcXFwiKTtcXG4rXFx0aWYgKGxpc3RlbihsZmQsIDEpKVxcbitcXHRcXHRkaWUoXFxcImxpc3RlblxcXCIpO1xcbitcXG4rXFx0ZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0ZGllKFxcXCJhY2NlcHRcXFwiKTtcXG4rXFx0Y2xvc2UobGZkKTtcXG4rXFxuK1xcdGVuYWJsZV9rdGxzKGZkKTtcXG4rXFx0cmVuZGV6dm91cyhzeW5jZGlyLCBcXFwic2VydmVyXFxcIiwgXFxcImNsaWVudFxcXCIpO1xcbitcXHR3YWl0X2Zvcl9nbyhzeW5jZGlyKTtcXG4rXFxuK1xcdHJ1bl9zZXJ2ZXIoZmQpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkb19jbGllbnQoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xcbitcXHR1bnNpZ25lZCBpbnQgd2FpdGVkID0gMDtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0c2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdHNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7XFxuK1xcdGlmIChpbmV0X3B0b24oQUZfSU5FVCwgaXAsIFxcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcXG4rXFx0XFx0ZmFpbChcXFwiYmFkIHNlcnZlciBhZGRyZXNzICVzXFxcIiwgaXApO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdFxcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGRpZShcXFwic29ja2V0XFxcIik7XFxuK1xcdFxcdGlmICghY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzYSwgc2l6ZW9mKHNhKSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdGlmICh3YWl0ZWQgXFx1MDAzZT0gQ09OTkVDVF9USU1FT1VUX01TKVxcbitcXHRcXHRcXHRkaWUoXFxcImNvbm5lY3RcXFwiKTtcXG4rXFx0XFx0bXNsZWVwKDIwKTtcXG4rXFx0XFx0d2FpdGVkICs9IDIwO1xcbitcXHR9XFxuK1xcbitcXHRlbmFibGVfa3RscyhmZCk7XFxuK1xcdHJlbmRlenZvdXMoc3luY2RpciwgXFxcImNsaWVudFxcXCIsIFxcXCJzZXJ2ZXJcXFwiKTtcXG4rXFx0d2FpdF9mb3JfZ28oc3luY2Rpcik7XFxuK1xcbitcXHRydW5fY2xpZW50KGZkKTtcXG4rXFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4re1xcbitcXHRpbnQgcG9ydDtcXG4rXFxuK1xcdGlmIChhcmdjICE9IDUpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcXCJ1c2FnZTogJXMgc2VydmVyfGNsaWVudCBcXHUwMDNjaXBcXHUwMDNlIFxcdTAwM2Nwb3J0XFx1MDAzZSBcXHUwMDNjc3luY2RpclxcdTAwM2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGFyZ3ZbMF0pO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXG4rXFx0cm9sZSA9IGFyZ3ZbMV07XFxuK1xcdHBvcnQgPSBhdG9pKGFyZ3ZbM10pO1xcbitcXG4rXFx0aWYgKCFzdHJjbXAocm9sZSwgXFxcInNlcnZlclxcXCIpKVxcbitcXHRcXHRyZXR1cm4gZG9fc2VydmVyKGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xcbitcXHRpZiAoIXN0cmNtcChyb2xlLCBcXFwiY2xpZW50XFxcIikpXFxuK1xcdFxcdHJldHVybiBkb19jbGllbnQoYXJndlsyXSwgcG9ydCwgYXJndls0XSk7XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInVua25vd24gcm9sZSAlc1xcXFxuXFxcIiwgcm9sZSk7XFxuK1xcdHJldHVybiAyO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjE5Ljc1Njc1MjUxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3NTA2NTg1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9kb190bHNcIixcbiAgICBcIm5zaW1fdGxzX2luaXRcIixcbiAgICBcIm5zaW1fdGxzX3RlYXJkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGZvciB0ZXN0aW5nIFRMUyBoYXJkd2FyZSBvZmZsb2FkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIG5ldGRldnNpbSBpcyB1c2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZjZkMDM3YjgyOWFlNmQ3NDExOTE5MGEyMTg2Yjg0ZTU0ZTVhODYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTU6MDY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZ1xuaW5kZXggZmY3OWM0NjY3MTJkZi4uY2I0ZDRiYjg3YWZjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWdcbkBAIC02MDcsNiArNjA3LDcgQEAgY29uZmlnIE5FVERFVlNJTVxuIFx0ZGVwZW5kcyBvbiBJTkVUXG4gXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4rXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFM9blxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUEFHRV9QT09MXG4gXHRzZWxlY3QgTkVUX1NIQVBFUlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuaW5kZXggODc3MTgyMDRmYjRkZS4uYzdmNzYyMTMyM2IyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXG5AQCAtMjUsMyArMjUsNyBAQCBlbmRpZlxuIGlmbmVxICgkKENPTkZJR19NQUNTRUMpLClcbiBuZXRkZXZzaW0tb2JqcyArPSBtYWNzZWMub1xuIGVuZGlmXG4rXG4raWZuZXEgKCQoQ09ORklHX1RMU19ERVZJQ0UpLClcbituZXRkZXZzaW0tb2JqcyArPSB0bHMub1xuK2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCA0ZTlkN2UxMGI1MjdlLi44ZGMwYjBhN2QxYTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0xNTEsNiArMTUxLDggQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKGRyKVxuIFx0XHRnb3RvIG91dF9kcm9wX2ZyZWU7XG4gXG4rXHRuc2ltX2RvX3Rscyhza2IsIG5zLCBwZWVyX25zKTtcbitcbiBcdHJ4cSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuIFx0aWYgKHJ4cSBcdTAwM2U9IHBlZXJfZGV2LVx1MDAzZW51bV9yeF9xdWV1ZXMpXG4gXHRcdHJ4cSA9IHJ4cSAlIHBlZXJfZGV2LVx1MDAzZW51bV9yeF9xdWV1ZXM7XG5AQCAtMTA2Niw2ICsxMDY4LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFxuIFx0bnNpbV9tYWNzZWNfaW5pdChucyk7XG4gXHRuc2ltX2lwc2VjX2luaXQobnMpO1xuK1x0bnNpbV90bHNfaW5pdChucyk7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbiBcdGlmIChlcnIpXG5AQCAtMTA5Myw2ICsxMDk2LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFx0UkNVX0lOSVRfUE9JTlRFUihucy1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVx1MDAzZW5ldGRldik7XG4gZXJyX2lwc2VjX3RlYXJkb3duOlxuK1x0bnNpbV90bHNfdGVhcmRvd24obnMpO1xuIFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX21hY3NlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX2JwZl91bmluaXQobnMpO1xuQEAgLTExOTUsNiArMTE5OSw3IEBAIHZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFx0UkNVX0lOSVRfUE9JTlRFUihucy1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4gXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihucy1cdTAwM2Vuc2ltX2Rldl9wb3J0KSkge1xuK1x0XHRuc2ltX3Rsc190ZWFyZG93bihucyk7XG4gXHRcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcbiBcdFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XG4gXHRcdG5zaW1fYnBmX3VuaW5pdChucyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41ODJhNzZhY2U5ZDM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC01Niw2ICs1NiwyMCBAQCBzdHJ1Y3QgbnNpbV9pcHNlYyB7XG4gXHR1MzIgdHg7XG4gfTtcbiBcbitzdHJ1Y3QgbnNpbV90bHMge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBjb25ucztcbitcdHNwaW5sb2NrX3QgbG9jaztcdC8qIHByb3RlY3RzIGNvbm5zIGFuZCB0aGUgY291bnRlcnMgYmVsb3cgKi9cbitcdHN0cnVjdCBkZW50cnkgKmRmaWxlO1xuK1x0dTMyIGNvdW50O1xuK1x0dTMyIHR4X2Nvbm47XG4rXHR1MzIgcnhfY29ubjtcbitcdGF0b21pYzY0X3QgdHhfcGFja2V0cztcbitcdGF0b21pYzY0X3QgdHhfYnl0ZXM7XG4rXHRhdG9taWM2NF90IHJ4X3BhY2tldHM7XG4rXHRhdG9taWM2NF90IHJ4X2J5dGVzO1xuK1x0YXRvbWljNjRfdCByZXN5bmNzO1xuK307XG4rXG4gI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfU0VDWV9DT1VOVCAzXG4gI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfUlhTQ19DT1VOVCAxXG4gc3RydWN0IG5zaW1fcnhzYyB7XG5AQCAtMTQxLDYgKzE1NSw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xuIFx0Ym9vbCBicGZfbWFwX2FjY2VwdDtcbiBcdHN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjO1xuIFx0c3RydWN0IG5zaW1fbWFjc2VjIG1hY3NlYztcbitcdHN0cnVjdCBuc2ltX3RscyB0bHM7XG4gXHRzdHJ1Y3QgbnNpbV92bGFuIHZsYW47XG4gXHRzdHJ1Y3Qge1xuIFx0XHR1MzIgaW5qZWN0X2Vycm9yO1xuQEAgLTQzNSw2ICs0NTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuICNlbmRpZlxuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuK3ZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4rdm9pZCBuc2ltX3Rsc190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4rdm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbitcdFx0IHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxuIHZvaWQgbnNpbV9tYWNzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4gdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjY5NWYyZTJiZWI4MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXG5AQCAtMCwwICsxLDQxOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC90bHMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibmV0ZGV2c2ltLmhcIlxuK1xuKy8qIEVtdWxhdGVkIGtUTFMgb2ZmbG9hZC4gIE5vIGNyeXB0byBpcyBwZXJmb3JtZWQsIHNvIHRoaXMgaXMgb25seSBzZWxmXG4rICogY29uc2lzdGVudCBiZXR3ZWVuIHR3byBuZXRkZXZzaW0gcG9ydHMuXG4rICovXG4rXG4rI2RlZmluZSBOU0lNX1RMU19NQVhfQ09OTlx0MzJcbitcbisvKiBuZXRkZXZfZml4X2ZlYXR1cmVzKCkgZHJvcHMgTkVUSUZfRl9IV19UTFNfUlggdW5sZXNzIHRoZSBkZXZpY2UgYWxzbyBkb2VzXG4rICogUlggY2hlY2tzdW1zLCB3aGljaCBldmVyeSBvZmZsb2FkIGNhcGFibGUgTklDIGRvZXMuXG4rICovXG4rI2RlZmluZSBOU0lNX1RMU19GRUFUVVJFU1x0KE5FVElGX0ZfSFdfVExTX1RYIHwgTkVUSUZfRl9IV19UTFNfUlggfCBcXFxuK1x0XHRcdFx0IE5FVElGX0ZfUlhDU1VNKVxuK1xuK3N0cnVjdCBuc2ltX3Rsc19jb25uIHtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXG4rXHQvKiBJZGVudGl0eSBhcyBzZWVuIG9uIHRoZSB3aXJlLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBwb3J0XG4rXHQgKiB0aGUgb2ZmbG9hZCB3YXMgaW5zdGFsbGVkIG9uOiBsKiBpcyB0aGlzIHNpZGUsIHIqIGlzIHRoZSBwZWVyLlxuK1x0ICovXG4rXHRzdHJ1Y3QgaW42X2FkZHIgbGFkZHI7XG4rXHRzdHJ1Y3QgaW42X2FkZHIgcmFkZHI7XG4rXHRfX2JlMTYgbHBvcnQ7XG4rXHRfX2JlMTYgcnBvcnQ7XG4rXHR1MTYgZmFtaWx5O1xuK1xuK1x0ZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcjtcbitcdHUzMiBzdGFydF9zbjtcbitcdHUxNiBjaXBoZXJfdHlwZTtcbitcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eDtcbit9O1xuK1xuK3N0cnVjdCBuc2ltX3Rsc190dXBsZSB7XG4rXHRzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7XG4rXHRzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7XG4rXHRfX2JlMTYgc3BvcnQ7XG4rXHRfX2JlMTYgZHBvcnQ7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBuc2ltX3Rsc19wYXJzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgIHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDtcbitcbitcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xuK1x0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aXB2Nl9hZGRyX3NldF92NG1hcHBlZChpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNnQtXHUwMDNlc2FkZHIpO1xuK1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKGlwaC1cdTAwM2VkYWRkciwgXHUwMDI2dC1cdTAwM2VkYWRkcik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xuK1x0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4rXG4rXHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR0LVx1MDAzZXNhZGRyID0gaXA2aC1cdTAwM2VzYWRkcjtcbitcdFx0dC1cdTAwM2VkYWRkciA9IGlwNmgtXHUwMDNlZGFkZHI7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0dGggPSB0Y3BfaGRyKHNrYik7XG4rXHR0LVx1MDAzZXNwb3J0ID0gdGgtXHUwMDNlc291cmNlO1xuK1x0dC1cdTAwM2VkcG9ydCA9IHRoLVx1MDAzZWRlc3Q7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogT24gUlggdGhlcmUgaXMgbm8gc29ja2V0IHRvIGxvb2sgYXQgeWV0LCBzbyBtYXRjaCB0aGUgdHVwbGUgaW5zdGFsbGVkIGF0XG4rICogLVx1MDAzZXRsc19kZXZfYWRkKCkgdGltZSwgd2hpY2ggaXMgd2hhdCB0aGUgaGFyZHdhcmUgZG9lcy4gIFRoZSBwYWNrZXQgaXNcbisgKiBhcnJpdmluZywgc28gdGhlIHBlZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXMgaXRzIHNvdXJjZS5cbisgKi9cbitzdGF0aWMgYm9vbCBuc2ltX3Rsc19yeF9vZmZsb2FkZWQoc3RydWN0IG5ldGRldnNpbSAqbnMsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbit7XG4rXHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNvbm4sIFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucywgbGlzdClcbitcdFx0aWYgKGNvbm4tXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfUlggXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjb25uLVx1MDAzZWxwb3J0ID09IHQtXHUwMDNlZHBvcnQgXHUwMDI2XHUwMDI2IGNvbm4tXHUwMDNlcnBvcnQgPT0gdC1cdTAwM2VzcG9ydCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZjb25uLVx1MDAzZWxhZGRyLCBcdTAwMjZ0LVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZjb25uLVx1MDAzZXJhZGRyLCBcdTAwMjZ0LVx1MDAzZXNhZGRyKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogVGhlIHN0YWNrIGxlYXZlcyBhIHRhZyBzaXplZCBwbGFjZWhvbGRlciBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHJlY29yZCBmb3JcbisgKiB0aGUgZGV2aWNlIHRvIHdyaXRlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgaW50by4gIFdlIGRvIG5vdCBlbmNyeXB0LCBzb1xuKyAqIG5vdGhpbmcgZXZlciBmaWxscyBpdCBpbiwgYW5kIGl0IGNvbWVzIGZyb20gYSBwYWdlIGZyYWcgdGhhdCB3YXMgbmV2ZXJcbisgKiB6ZXJvZWQgLSBjbGVhciBpdCByYXRoZXIgdGhhbiBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9udG8gdGhlIHdpcmUuXG4rICpcbisgKiB0bHNfYXBwZW5kX2ZyYWcoKSBlaXRoZXIgZ3Jvd3MgdGhlIGxhc3QgZnJhZyBvciBhZGRzIG9uZSwgc28gdGhlIHRhZyBpc1xuKyAqIGFsd2F5cyB0aGUgdGFpbCBvZiB0aGUgcmVjb3JkJ3MgbGFzdCBmcmFnLiAgQ2xlYXJpbmcgaXQgdGhlcmUgcmF0aGVyIHRoYW5cbisgKiBpbiB0aGUgc2tiIGNvdmVycyBldmVyeSBzZWdtZW50IHRoZSByZWNvcmQgd2FzIHNwbGl0IGludG8sIGFuZCBhbnlcbisgKiByZXRyYW5zbWl0IG9mIHRoZW0sIHNpbmNlIHRoZXkgYWxsIHNoYXJlIHRoZXNlIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIG5zaW1fdGxzX3R4X3plcm9fdGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2tiLVx1MDAzZXNrKTtcbitcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xuK1x0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKnR4X2N0eDtcbitcdHUzMiBzZXEsIGVuZCwgdGFnX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dW5zaWduZWQgaW50IG9mZjtcbitcbitcdG9mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyBfX3RjcF9oZHJsZW4odGgpO1xuK1x0aWYgKG9mZiBcdTAwM2U9IHNrYi1cdTAwM2VsZW4pXG4rXHRcdHJldHVybjtcbitcbitcdHRhZ19zaXplID0gY3R4LVx1MDAzZXByb3RfaW5mby50YWdfc2l6ZTtcbitcdHNlcSA9IG50b2hsKHRoLVx1MDAzZXNlcSk7XG4rXHRlbmQgPSBzZXEgKyBza2ItXHUwMDNlbGVuIC0gb2ZmO1xuK1x0dHhfY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KGN0eCk7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eF9jdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0d2hpbGUgKGJlZm9yZShzZXEsIGVuZCkpIHtcbitcdFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkO1xuK1x0XHRza2JfZnJhZ190ICpmcmFnO1xuK1x0XHR1NjQgcmNkX3NuO1xuK1xuK1x0XHRyZWNvcmQgPSB0bHNfZ2V0X3JlY29yZCh0eF9jdHgsIHNlcSwgXHUwMDI2cmNkX3NuKTtcbitcdFx0aWYgKCFyZWNvcmQgfHwgdGxzX3JlY29yZF9pc19zdGFydF9tYXJrZXIocmVjb3JkKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0ZnJhZyA9IFx1MDAyNnJlY29yZC1cdTAwM2VmcmFnc1tyZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIC0gMV07XG4rXHRcdG1lbXNldChza2JfZnJhZ19hZGRyZXNzKGZyYWcpICsgc2tiX2ZyYWdfc2l6ZShmcmFnKSAtIHRhZ19zaXplLFxuK1x0XHQgICAgICAgMCwgdGFnX3NpemUpO1xuK1xuK1x0XHRzZXEgPSByZWNvcmQtXHUwMDNlZW5kX3NlcTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhfY3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbit9XG4rXG4rLyogU3RhbmQgaW4gZm9yIHRoZSBpbmxpbmUgZW5jcnlwdGlvbiB0aGUgaGFyZHdhcmUgd291bGQgZG8gb24gdGhlIHdheSBvdXQuXG4rICogVGhlIHN0YWNrIGhhcyBhbHJlYWR5IGZyYW1lZCB0aGUgcmVjb3JkIGFuZCB3ZSBkbyBub3QgZW5jcnlwdCwgc28gdGhlIHRhZ1xuKyAqIGlzIGFsbCB0aGF0IGlzIGxlZnQgdG8gZGVhbCB3aXRoLiAgVGhlIHNvY2tldCBpcyByaWdodCBoZXJlLCBzbyBpZGVudGlmeVxuKyAqIHRoZSBjb25uZWN0aW9uIHRoZSB3YXkgdGhlIHJlYWwgZHJpdmVycyBkby5cbisgKi9cbitzdGF0aWMgdm9pZCBuc2ltX3Rsc190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpZiAoIXRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuc2ltX3Rsc190eF96ZXJvX3RhZ3Moc2tiKTtcbitcdGF0b21pYzY0X2luYyhcdTAwMjZucy1cdTAwM2V0bHMudHhfcGFja2V0cyk7XG4rXHRhdG9taWM2NF9hZGQoc2tiLVx1MDAzZWxlbiwgXHUwMDI2bnMtXHUwMDNldGxzLnR4X2J5dGVzKTtcbit9XG4rXG4rLyogU3RhbmQgaW4gZm9yIHRoZSBpbmxpbmUgZGVjcnlwdGlvbiB0aGUgcGVlcidzIGhhcmR3YXJlIHdvdWxkIGRvLCBzaW5jZSB3ZVxuKyAqIGFyZSBhYm91dCB0byBoYW5kIHRoZSBza2IgdG8gaXRzIHN0YWNrLiAgV2UgZG8gbm90IGRlY3J5cHQgZWl0aGVyLCBzbyBhbGxcbisgKiB0aGF0IGlzIG5lZWRlZCBpcyB0aGUgZmxhZyB0aGF0IHRlbGxzIHRoZSBrVExTIGNvcmUgdGhlIHBheWxvYWQgaXNcbisgKiBhbHJlYWR5IHBsYWludGV4dC5cbisgKi9cbitzdGF0aWMgdm9pZCBuc2ltX3Rsc19yeChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgdDtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghbnNpbV90bHNfcGFyc2Uoc2tiLCBcdTAwMjZ0KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFuc2ltX3Rsc19yeF9vZmZsb2FkZWQobnMsIFx1MDAyNnQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbitcdGF0b21pYzY0X2luYyhcdTAwMjZucy1cdTAwM2V0bHMucnhfcGFja2V0cyk7XG4rXHRhdG9taWM2NF9hZGQoc2tiLVx1MDAzZWxlbiwgXHUwMDI2bnMtXHUwMDNldGxzLnJ4X2J5dGVzKTtcbit9XG4rXG4rLyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxuKyAqIHBlZXIncyByZWNlaXZlIHBhdGgsIHNvIHRoaXMgb25lIGNhbGwgc2l0ZSBzdGFuZHMgaW4gZm9yIHRoZSBoYXJkd2FyZSBvZlxuKyAqIGJvdGggcG9ydHMuICBJdCBoYXMgdG8gcnVuIGJlZm9yZSBuc2ltX2ZvcndhcmRfc2tiKCkgbW92ZXMgdGhlIHNrYiBvdmVyLFxuKyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cbisgKi9cbit2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxuK1x0XHQgc3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucylcbit7XG4rXHQvKiBuc2ltX2RvX3BzcCgpIHJhbiBmaXJzdCBhbmQgbWF5IGhhdmUgd3JhcHBlZCB0aGUgcmVjb3JkIHN0cmVhbSwgc29cbitcdCAqIHRoaXMgaXMgbm8gbG9uZ2VyIGEgcGxhaW4gVExTIG92ZXIgVENQIHBhY2tldC4gIE5vIE5JQyBjaGFpbnMgdGhlXG4rXHQgKiB0d28gaW5saW5lIG9mZmxvYWRzIGVpdGhlciwgc28gbGVhdmUgaXQgYWxvbmUuXG4rXHQgKi9cbitcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0bnNpbV90bHNfdHgobnMsIHNrYik7XG4rXHRuc2ltX3Rsc19yeChwZWVyX25zLCBza2IpO1xuK31cbitcbitzdGF0aWMgaW50IG5zaW1fdGxzX2Rldl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdCAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbitcdFx0XHQgICAgdTMyIHN0YXJ0X29mZmxvYWRfdGNwX3NuKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHQvKiBNaXJyb3IgdGhlIGNpcGhlciBzdXBwb3J0IG9mIGEgdHlwaWNhbCBvZmZsb2FkIGNhcGFibGUgTklDLiAqL1xuK1x0c3dpdGNoIChjcnlwdG9faW5mby1cdTAwM2VjaXBoZXJfdHlwZSkge1xuK1x0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4OlxuK1x0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMjU2OlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGNvbm4gPSBremFsbG9jX29iaigqY29ubik7XG4rXHRpZiAoIWNvbm4pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuK1x0XHRjb25uLVx1MDAzZWxhZGRyID0gc2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyO1xuK1x0XHRjb25uLVx1MDAzZXJhZGRyID0gc2stXHUwMDNlc2tfdjZfZGFkZHI7XG4rXHR9IGVsc2Uge1xuK1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVx1MDAzZXNrX3Jjdl9zYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VsYWRkcik7XG4rXHRcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoc2stXHUwMDNlc2tfZGFkZHIsIFx1MDAyNmNvbm4tXHUwMDNlcmFkZHIpO1xuK1x0fVxuK1x0Y29ubi1cdTAwM2VmYW1pbHkgPSBzay1cdTAwM2Vza19mYW1pbHk7XG4rXHRjb25uLVx1MDAzZWxwb3J0ID0gaHRvbnMoaW5ldF9zayhzayktXHUwMDNlaW5ldF9udW0pO1xuK1x0Y29ubi1cdTAwM2VycG9ydCA9IHNrLVx1MDAzZXNrX2Rwb3J0O1xuK1x0Y29ubi1cdTAwM2VkaXIgPSBkaXJlY3Rpb247XG4rXHRjb25uLVx1MDAzZXN0YXJ0X3NuID0gc3RhcnRfb2ZmbG9hZF90Y3Bfc247XG4rXHRjb25uLVx1MDAzZWNpcGhlcl90eXBlID0gY3J5cHRvX2luZm8tXHUwMDNlY2lwaGVyX3R5cGU7XG4rXHRjb25uLVx1MDAzZXRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnMtXHUwMDNldGxzLmxvY2spO1xuK1x0aWYgKG5zLVx1MDAzZXRscy5jb3VudCBcdTAwM2U9IE5TSU1fVExTX01BWF9DT05OKSB7XG4rXHRcdHJldCA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmNvbm4tXHUwMDNlbGlzdCwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zKTtcbitcdG5zLVx1MDAzZXRscy5jb3VudCsrO1xuK1x0aWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKVxuK1x0XHRucy1cdTAwM2V0bHMudHhfY29ubisrO1xuK1x0ZWxzZVxuK1x0XHRucy1cdTAwM2V0bHMucnhfY29ubisrO1xuK291dF91bmxvY2s6XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRrZnJlZShjb25uKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5zaW1fdGxzX2Rldl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcbitcdFx0XHQgICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24pXG4re1xuK1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnMtXHUwMDNldGxzLmxvY2spO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbitcdFx0aWYgKGNvbm4tXHUwMDNldGxzX2N0eCAhPSB0bHNfY3R4IHx8IGNvbm4tXHUwMDNlZGlyICE9IGRpcmVjdGlvbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmNvbm4tXHUwMDNlbGlzdCk7XG4rXHRcdG5zLVx1MDAzZXRscy5jb3VudC0tO1xuK1x0XHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG4rXHRcdFx0bnMtXHUwMDNldGxzLnR4X2Nvbm4tLTtcbitcdFx0ZWxzZVxuK1x0XHRcdG5zLVx1MDAzZXRscy5yeF9jb25uLS07XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdG5ldGRldl9lcnIobmV0ZGV2LCBcIlRMUyAlcyBjb250ZXh0IG5vdCBmb3VuZCBvbiBkZWxcXG5cIixcbitcdFx0ICAgZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggPyBcInR4XCIgOiBcInJ4XCIpO1xuK31cbitcbisvKiBOb3RoaW5nIGlzIGV2ZXIgb3V0IG9mIHN5bmMgaGVyZTogdGhlIGVtdWxhdGlvbiBkb2VzIG5vdCBkZWNyeXB0LCBzbyBpdFxuKyAqIG5ldmVyIGxvc2VzIHRoZSByZWNvcmQgYm91bmRhcmllcyBhbmQgbmV2ZXIgYXNrcyBmb3IgYSByZXN5bmMuICBUaGUgY29yZVxuKyAqIGNhbiBzdGlsbCBjYWxsIGluIG9uIHRoZSBSWCBwYXRoLCBzbyBhY2NvdW50IGZvciBpdCBhbmQgbW92ZSBvbi5cbisgKi9cbitzdGF0aWMgaW50IG5zaW1fdGxzX2Rldl9yZXN5bmMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdCAgICAgICB1MzIgc2VxLCB1OCAqcmNkX3NuLFxuK1x0XHRcdCAgICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGF0b21pYzY0X2luYyhcdTAwMjZucy1cdTAwM2V0bHMucmVzeW5jcyk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcbitcdC50bHNfZGV2X2FkZFx0PSBuc2ltX3Rsc19kZXZfYWRkLFxuK1x0LnRsc19kZXZfZGVsXHQ9IG5zaW1fdGxzX2Rldl9kZWwsXG4rXHQudGxzX2Rldl9yZXN5bmNcdD0gbnNpbV90bHNfZGV2X3Jlc3luYyxcbit9O1xuK1xuK3N0YXRpYyBzc2l6ZV90IG5zaW1fdGxzX2RiZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuK1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjtcbitcdHNpemVfdCBidWZzaXplO1xuK1x0Y2hhciAqYnVmLCAqcDtcbitcdGludCBsZW47XG4rXG4rXHQvKiBUd28gZnVsbCBJUHY2IGFkZHJlc3NlcyBhbmQgcG9ydHMgZml0IGluIDE2MCBieXRlcyBhIGxpbmUuICovXG4rXHRidWZzaXplID0gKE5TSU1fVExTX01BWF9DT05OICogMTYwKSArIDIwMDtcbitcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJ1ZilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwID0gYnVmO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4rXHRcdCAgICAgICBcImNvbm4gY291bnQ9JXUgdHg9JXUgcng9JXVcXG5cIixcbitcdFx0ICAgICAgIG5zLVx1MDAzZXRscy5jb3VudCwgbnMtXHUwMDNldGxzLnR4X2Nvbm4sIG5zLVx1MDAzZXRscy5yeF9jb25uKTtcbitcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4rXHRcdCAgICAgICBcInR4X3BhY2tldHM9JWxsdSB0eF9ieXRlcz0lbGx1IHJ4X3BhY2tldHM9JWxsdSByeF9ieXRlcz0lbGx1IHJlc3luY3M9JWxsdVxcblwiLFxuK1x0XHQgICAgICAgYXRvbWljNjRfcmVhZChcdTAwMjZucy1cdTAwM2V0bHMudHhfcGFja2V0cyksXG4rXHRcdCAgICAgICBhdG9taWM2NF9yZWFkKFx1MDAyNm5zLVx1MDAzZXRscy50eF9ieXRlcyksXG4rXHRcdCAgICAgICBhdG9taWM2NF9yZWFkKFx1MDAyNm5zLVx1MDAzZXRscy5yeF9wYWNrZXRzKSxcbitcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X2J5dGVzKSxcbitcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJlc3luY3MpKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XG4rXHRcdGlmIChjb25uLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcbitcdFx0XHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuK1x0XHRcdFx0ICAgICAgIFwiJXMgWyVwSTZjXToldSAtXHUwMDNlIFslcEk2Y106JXUgY2lwaGVyPSV1IHNuPSV1XFxuXCIsXG4rXHRcdFx0XHQgICAgICAgY29ubi1cdTAwM2VkaXIgPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/XG4rXHRcdFx0XHQgICAgICAgXCJ0eFwiIDogXCJyeFwiLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmNvbm4tXHUwMDNlbGFkZHIsIG50b2hzKGNvbm4tXHUwMDNlbHBvcnQpLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmNvbm4tXHUwMDNlcmFkZHIsIG50b2hzKGNvbm4tXHUwMDNlcnBvcnQpLFxuK1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXHUwMDNlc3RhcnRfc24pO1xuK1x0XHRlbHNlXG4rXHRcdFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbitcdFx0XHRcdCAgICAgICBcIiVzICVwSTQ6JXUgLVx1MDAzZSAlcEk0OiV1IGNpcGhlcj0ldSBzbj0ldVxcblwiLFxuK1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggP1xuK1x0XHRcdFx0ICAgICAgIFwidHhcIiA6IFwicnhcIixcbitcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZWxhZGRyLnM2X2FkZHIzMlszXSxcbitcdFx0XHRcdCAgICAgICBudG9ocyhjb25uLVx1MDAzZWxwb3J0KSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZXJhZGRyLnM2X2FkZHIzMlszXSxcbitcdFx0XHRcdCAgICAgICBudG9ocyhjb25uLVx1MDAzZXJwb3J0KSxcbitcdFx0XHRcdCAgICAgICBjb25uLVx1MDAzZWNpcGhlcl90eXBlLCBjb25uLVx1MDAzZXN0YXJ0X3NuKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG4rXG4rXHRrZnJlZShidWYpO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV90bHNfZGJnX2ZvcHMgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4rXHQucmVhZCA9IG5zaW1fdGxzX2RiZ19yZWFkLFxuK1x0Lmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLFxuK307XG4rXG4rdm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuK3tcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucyk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4rXG4rXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNldGxzZGV2X29wcyA9IFx1MDAyNm5zaW1fdGxzZGV2X29wcztcbitcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcbitcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcbitcbitcdG5zLVx1MDAzZXRscy5kZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJ0bHNcIiwgMDQwMCxcbitcdFx0XHRcdFx0ICAgIG5zLVx1MDAzZW5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciwgbnMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZuc2ltX3Rsc19kYmdfZm9wcyk7XG4rfVxuK1xuK3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4re1xuK1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7XG4rXHR1MzIgbGVmdDtcbitcbitcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShucy1cdTAwM2V0bHMuZGZpbGUpO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcdGxlZnQgPSBucy1cdTAwM2V0bHMuY291bnQ7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgdG1wLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbitcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmNvbm4tXHUwMDNlbGlzdCk7XG4rXHRcdGtmcmVlX3JjdShjb25uLCByY3UpO1xuK1x0fVxuK1x0bnMtXHUwMDNldGxzLmNvdW50ID0gMDtcbitcdG5zLVx1MDAzZXRscy50eF9jb25uID0gMDtcbitcdG5zLVx1MDAzZXRscy5yeF9jb25uID0gMDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdGlmIChsZWZ0KVxuK1x0XHRuZXRkZXZfZXJyKG5zLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcInRlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXG5cIixcbitcdFx0XHQgICBsZWZ0KTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlXG5AQCAtMCwwICsxLDIgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbit0bHNfb2ZmbG9hZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuaW5kZXggOTgwOGMyZmJhZTllOC4uNWJlYjRlZDY0ZWI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXG5AQCAtMSw1ICsxLDcgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyBPUiBNSVRcbiBcbitDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxuK1xuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGRldmxpbmsuc2ggXFxcbiBcdGRldmxpbmtfaW5fbmV0bnMuc2ggXFxcbkBAIC0xNSw5ICsxNywxNCBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRwZWVyLnNoIFxcXG4gXHRwc2FtcGxlLnNoIFxcXG4gXHR0Yy1tcS12aXNpYmlsaXR5LnNoIFxcXG4rXHR0bHMuc2ggXFxcbiBcdHVkcF90dW5uZWxfbmljLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuIFxuK1RFU1RfR0VOX0ZJTEVTIDo9IFxcXG4rXHR0bHNfb2ZmbG9hZFxuKyMgZW5kIG9mIFRFU1RfR0VOX0ZJTEVTXG4rXG4gVEVTVF9GSUxFUyA6PSBcXFxuIFx0ZXRodG9vbC1jb21tb24uc2hcbiAjIGVuZCBvZiBURVNUX0ZJTEVTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zOTllMmM0ZDM4MmRmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLnNoXG5AQCAtMCwwICsxLDI3MSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgRXhlcmNpc2UgbmV0ZGV2c2ltJ3MgZW11bGF0ZWQga1RMUyBkZXZpY2Ugb2ZmbG9hZCBvdmVyIGEgbGlua2VkXG4rIyBuZXRkZXZzaW0gcGFpciwgb25lIHBvcnQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlLlxuKyNcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNTQgIyBrc2Z0X3NraXAgY29tZXMgZnJvbSBsaWIuc2hcbitcbitsaWJfZGlyPSQoZGlybmFtZSBcIiQwXCIpXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLy4uLy4uLy4uL25ldC9saWIuc2hcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTFcbitzb3VyY2UgXCIkbGliX2RpclwiLy4uLy4uLy4uL25ldC9saWIuc2hcbitcbitOU0lNX0RFVl8xX0lEPSQoKDI1NiArIFJBTkRPTSAlIDI1NikpXG4rTlNJTV9ERVZfMV9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzFfSURcbitOU0lNX0RFVl8yX0lEPSQoKDUxMiArIFJBTkRPTSAlIDI1NikpXG4rTlNJTV9ERVZfMl9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzJfSURcbitcbitOU0lNX0RFVl9TWVNfTkVXPS9zeXMvYnVzL25ldGRldnNpbS9uZXdfZGV2aWNlXG4rTlNJTV9ERVZfU1lTX0RFTD0vc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVxuK05TSU1fREVWX1NZU19MSU5LPS9zeXMvYnVzL25ldGRldnNpbS9saW5rX2RldmljZVxuK1xuK0RFQlVHRlM9L3N5cy9rZXJuZWwvZGVidWcvbmV0ZGV2c2ltXG4rTlNJTV9ERVZfMV9UTFM9JERFQlVHRlMvbmV0ZGV2c2ltJE5TSU1fREVWXzFfSUQvcG9ydHMvMC90bHNcbitOU0lNX0RFVl8yX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMl9JRC9wb3J0cy8wL3Rsc1xuK1xuK1NSVl9JUD0xOTIuMTY4LjEzLjFcbitDTElfSVA9MTkyLjE2OC4xMy4yXG4rUE9SVD00NDMzXG4rXG4rU1lOQ0RJUj1cbitCSU49JGxpYl9kaXIvdGxzX29mZmxvYWRcbitcbitudW1fcGFzcz0wXG4rbnVtX2ZhaWw9MFxuK1xuK2NoZWNrKClcbit7XG4rXHRsb2NhbCBtc2c9XCIkMVwiXG4rXHRsb2NhbCByZXQ9XCIkMlwiXG4rXG4rXHRpZiBbIFwiJHJldFwiIC1lcSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIlBBU1M6ICRtc2dcIlxuK1x0XHRudW1fcGFzcz0kKChudW1fcGFzcyArIDEpKVxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogJG1zZ1wiXG4rXHRcdG51bV9mYWlsPSQoKG51bV9mYWlsICsgMSkpXG4rXHRmaVxuK31cbitcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcsU0MyMzI5ICMgaW52b2tlZCBmcm9tIHRoZSBFWElUIHRyYXBcbitjbGVhbnVwKClcbit7XG4rXHRpcCBuZXRucyBkZWwgbnNjbCAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgbnNzdiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIFwiJE5TSU1fREVWXzJfSURcIiBcdTAwM2UgXCIkTlNJTV9ERVZfU1lTX0RFTFwiIDJcdTAwM2UvZGV2L251bGxcbitcdGVjaG8gXCIkTlNJTV9ERVZfMV9JRFwiIFx1MDAzZSBcIiROU0lNX0RFVl9TWVNfREVMXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0WyAtbiBcIiRTWU5DRElSXCIgXSBcdTAwMjZcdTAwMjYgcm0gLXJmIFwiJFNZTkNESVJcIlxuK31cbitcbitzZXR1cCgpXG4re1xuK1x0c2V0IC1lXG4rXG4rXHRlY2hvIFwiJE5TSU1fREVWXzFfSURcIiBcdTAwM2UgXCIkTlNJTV9ERVZfU1lTX05FV1wiXG4rXHRlY2hvIFwiJE5TSU1fREVWXzJfSURcIiBcdTAwM2UgXCIkTlNJTV9ERVZfU1lTX05FV1wiXG4rXHR1ZGV2YWRtIHNldHRsZSAyXHUwMDNlL2Rldi9udWxsIHx8IHNsZWVwIDFcbitcbitcdE5TSU1fREVWXzFfTkFNRT0kKGZpbmQgXCIkTlNJTV9ERVZfMV9TWVNcIi9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFxcXG4rXHRcdC1wYXRoIFwiJE5TSU1fREVWXzFfU1lTXCIvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFxcOylcbitcdE5TSU1fREVWXzJfTkFNRT0kKGZpbmQgXCIkTlNJTV9ERVZfMl9TWVNcIi9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFxcXG4rXHRcdC1wYXRoIFwiJE5TSU1fREVWXzJfU1lTXCIvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFxcOylcbitcbitcdGlwIG5ldG5zIGFkZCBuc3N2XG4rXHRpcCBuZXRucyBhZGQgbnNjbFxuK1xuK1x0aXAgbGluayBzZXQgXCIkTlNJTV9ERVZfMV9OQU1FXCIgbmV0bnMgbnNzdlxuK1x0aXAgbGluayBzZXQgXCIkTlNJTV9ERVZfMl9OQU1FXCIgbmV0bnMgbnNjbFxuK1xuK1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGFkZHIgYWRkIFwiJFNSVl9JUC8yNFwiIGRldiBcIiROU0lNX0RFVl8xX05BTUVcIlxuK1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGFkZHIgYWRkIFwiJENMSV9JUC8yNFwiIGRldiBcIiROU0lNX0RFVl8yX05BTUVcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiBcIiROU0lNX0RFVl8xX05BTUVcIiB1cFxuK1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiBcIiROU0lNX0RFVl8yX05BTUVcIiB1cFxuK1xuK1x0TlNJTV9ERVZfMV9GRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxuK1x0ZXhlYyB7TlNJTV9ERVZfMV9GRH1cdTAwM2MvdmFyL3J1bi9uZXRucy9uc3N2XG4rXHROU0lNX0RFVl8xX0lGSURYPSQoaXAgbmV0bnMgZXhlYyBuc3N2IFxcXG4rXHRcdGNhdCAvc3lzL2NsYXNzL25ldC9cIiROU0lNX0RFVl8xX05BTUVcIi9pZmluZGV4KVxuK1xuK1x0TlNJTV9ERVZfMl9GRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxuK1x0ZXhlYyB7TlNJTV9ERVZfMl9GRH1cdTAwM2MvdmFyL3J1bi9uZXRucy9uc2NsXG4rXHROU0lNX0RFVl8yX0lGSURYPSQoaXAgbmV0bnMgZXhlYyBuc2NsIFxcXG4rXHRcdGNhdCAvc3lzL2NsYXNzL25ldC9cIiROU0lNX0RFVl8yX05BTUVcIi9pZmluZGV4KVxuK1xuK1x0ZWNobyBcIiROU0lNX0RFVl8xX0ZEOiROU0lNX0RFVl8xX0lGSURYICROU0lNX0RFVl8yX0ZEOiROU0lNX0RFVl8yX0lGSURYXCIgXFxcbitcdFx0XHUwMDNlIFwiJE5TSU1fREVWX1NZU19MSU5LXCJcbitcbitcdFNZTkNESVI9JChta3RlbXAgLWQpXG4rXHRzZXQgK2Vcbit9XG4rXG4rZmVhdHVyZSgpXG4re1xuK1x0bG9jYWwgbmV0bnM9XCIkMVwiXG4rXHRsb2NhbCBkZXY9XCIkMlwiXG4rXHRsb2NhbCBmZWF0PVwiJDNcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuZXRuc1wiIGV0aHRvb2wgLWsgXCIkZGV2XCIgMlx1MDAzZS9kZXYvbnVsbCB8IFxcXG4rXHRcdHNlZCAtbiBcInMvXiRmZWF0OiBcXChbYS16XSpcXCkuKi9cXDEvcFwiXG4rfVxuK1xuK2RiZ19maWVsZCgpXG4re1xuK1x0c2VkIC1uIFwicy8uKlxcXHUwMDNjJDI9XFwoWzAtOV0qXFwpLiovXFwxL3BcIiBcIiQxXCIgfCBoZWFkIC0xXG4rfVxuK1xuK3Rsc19zdGF0KClcbit7XG4rXHRpcCBuZXRucyBleGVjIFwiJDFcIiBjYXQgL3Byb2MvbmV0L3Rsc19zdGF0IHwgXFxcbitcdFx0c2VkIC1uIFwicy9eJDIgXFwoWzAtOV0qXFwpL1xcMS9wXCJcbit9XG4rXG4rIyBCb3RoIGVuZHMgcGFyayBvbmNlIHRoZWlyIG9mZmxvYWQgaXMgaW5zdGFsbGVkIGFuZCBiZWZvcmUgYW55IGRhdGEgaXNcbisjIHNlbnQsIHNvIHRoZSBkcml2ZXIncyBjb250ZXh0IGNvdW50IGNhbiBiZSBzYW1wbGVkIHdpdGhvdXQgcmFjaW5nIHRoZVxuKyMgdHJhbnNmZXIuICBQYXNzIFwibm9zYW1wbGVcIiB3aGVuIHRoZSBvZmZsb2FkIGlzIGV4cGVjdGVkIHRvIGJlIHJlZnVzZWQsXG4rIyBzaW5jZSB0aGVuIG5laXRoZXIgZW5kIGV2ZXIgcmVhY2hlcyB0aGUgYmFycmllci5cbitydW5fcGFpcigpXG4re1xuK1x0bG9jYWwgc2FtcGxlPVwiJHsxOi1zYW1wbGV9XCJcbitcdGxvY2FsIHNydl9yYyBjbGlfcmMgd2FpdGVkPTBcbitcbitcdHJtIC1mIFwiJFNZTkNESVJcIi8qLnJlYWR5IFwiJFNZTkNESVJcIi9nb1xuK1x0Q09OTlNfMT0wXG4rXHRDT05OU18yPTBcbitcbitcdGlwIG5ldG5zIGV4ZWMgbnNzdiBcIiRCSU5cIiBzZXJ2ZXIgXCIkU1JWX0lQXCIgXCIkUE9SVFwiIFwiJFNZTkNESVJcIiBcdTAwMjZcbitcdGxvY2FsIHNydl9waWQ9JCFcbitcdGlwIG5ldG5zIGV4ZWMgbnNjbCBcIiRCSU5cIiBjbGllbnQgXCIkU1JWX0lQXCIgXCIkUE9SVFwiIFwiJFNZTkNESVJcIiBcdTAwMjZcbitcdGxvY2FsIGNsaV9waWQ9JCFcbitcbitcdGlmIFsgXCIkc2FtcGxlXCIgPSBcInNhbXBsZVwiIF07IHRoZW5cbitcdFx0d2hpbGUgWyAhIC1lIFwiJFNZTkNESVIvc2VydmVyLnJlYWR5XCIgXSB8fFxuK1x0XHQgICAgICBbICEgLWUgXCIkU1lOQ0RJUi9jbGllbnQucmVhZHlcIiBdOyBkb1xuK1x0XHRcdFsgXCIkd2FpdGVkXCIgLWdlIDIwMCBdIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRcdHNsZWVwIDAuMDVcbitcdFx0XHR3YWl0ZWQ9JCgod2FpdGVkICsgMSkpXG4rXHRcdGRvbmVcbitcdFx0Q09OTlNfMT0kKGRiZ19maWVsZCBcIiROU0lNX0RFVl8xX1RMU1wiIGNvdW50KVxuK1x0XHRDT05OU18yPSQoZGJnX2ZpZWxkIFwiJE5TSU1fREVWXzJfVExTXCIgY291bnQpXG4rXHRcdDogXCIke0NPTk5TXzE6PTB9XCJcbitcdFx0OiBcIiR7Q09OTlNfMjo9MH1cIlxuK1x0ZmlcbitcdHRvdWNoIFwiJFNZTkNESVIvZ29cIlxuK1xuK1x0d2FpdCBcIiRzcnZfcGlkXCI7IHNydl9yYz0kP1xuK1x0d2FpdCBcIiRjbGlfcGlkXCI7IGNsaV9yYz0kP1xuK1xuK1x0WyBcIiRzcnZfcmNcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBbIFwiJGNsaV9yY1wiIC1lcSAwIF1cbit9XG4rXG4rIyMjXG4rIyMjIENvZGUgc3RhcnRcbisjIyNcbitcbitpZiBbIFwiJChpZCAtdSlcIiAtbmUgMCBdOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogbmVlZCByb290XCJcbitcdGV4aXQgXCIka3NmdF9za2lwXCJcbitmaVxuK1xuK2lmICEgY29tbWFuZCAtdiBldGh0b29sIFx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGV0aHRvb2wgbm90IGZvdW5kXCJcbitcdGV4aXQgXCIka3NmdF9za2lwXCJcbitmaVxuK1xuK2lmIFsgISAteCBcIiRCSU5cIiBdOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogJEJJTiBub3QgYnVpbHRcIlxuK1x0ZXhpdCBcIiRrc2Z0X3NraXBcIlxuK2ZpXG4rXG4rbW9kcHJvYmUgbmV0ZGV2c2ltIDJcdTAwM2UvZGV2L251bGxcbitpZiBbICEgLWQgL3N5cy9idXMvbmV0ZGV2c2ltIF07IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBuZXRkZXZzaW0gbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0IFwiJGtzZnRfc2tpcFwiXG4rZmlcbitcbittb2Rwcm9iZSB0bHMgMlx1MDAzZS9kZXYvbnVsbFxuK2lmIFsgISAtZSAvcHJvYy9uZXQvdGxzX3N0YXQgXTsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGtlcm5lbCBUTFMgbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0IFwiJGtzZnRfc2tpcFwiXG4rZmlcbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK3NldHVwXG4rXG4rIyBUaGUgb2ZmbG9hZCBoYXMgdG8gYmUgYWR2ZXJ0aXNlZCwgYW5kIG9uIGJ5IGRlZmF1bHQgbGlrZSB0aGUgb3RoZXJcbisjIG5ldGRldnNpbSBjcnlwdG8gb2ZmbG9hZHMuXG4rZm9yIGYgaW4gdGxzLWh3LXR4LW9mZmxvYWQgdGxzLWh3LXJ4LW9mZmxvYWQ7IGRvXG4rXHRbIFwiJChmZWF0dXJlIG5zc3YgXCIkTlNJTV9ERVZfMV9OQU1FXCIgXCIkZlwiKVwiID0gXCJvblwiIF1cbitcdGNoZWNrIFwiJGYgYWR2ZXJ0aXNlZCBhbmQgb24gYnkgZGVmYXVsdFwiICQ/XG4rZG9uZVxuK1xuK1sgLWUgXCIkTlNJTV9ERVZfMV9UTFNcIiBdXG4rY2hlY2sgXCJwZXItcG9ydCBkZWJ1Z2ZzIHRscyBmaWxlIGV4aXN0c1wiICQ/XG4rXG4rIyBNYWluIGRhdGEgcGF0aCBydW4uXG4rcnVuX3BhaXJcbitjaGVjayBcIm9mZmxvYWRlZCBUTFMgZGF0YSB0cmFuc2ZlclwiICQ/XG4rXG4rIyBTYW1wbGVkIGF0IHRoZSBiYXJyaWVyLCBzbyBlYWNoIHBvcnQgbXVzdCBiZSBob2xkaW5nIGV4YWN0bHkgdGhlIFRYIGFuZFxuKyMgdGhlIFJYIGNvbnRleHQgb2YgaXRzIG93biBzb2NrZXQuXG4rWyBcIiRDT05OU18xXCIgLWVxIDIgXSBcdTAwMjZcdTAwMjYgWyBcIiRDT05OU18yXCIgLWVxIDIgXVxuK2NoZWNrIFwidHggYW5kIHJ4IGNvbnRleHRzIGluc3RhbGxlZCBvbiBib3RoIHBvcnRzXCIgJD9cbitcbisjIEJvdGggZW5kcyBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHRoZSBkZXZpY2UgcGF0aCwgbm90IHRoZSBTVyBmYWxsYmFjay5cbitbIFwiJCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc3N2IFRsc1J4RGV2aWNlKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc2NsIFRsc1R4RGV2aWNlKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKVwiIC1nZSAxIF1cbitjaGVjayBcImJvdGggZW5kcyB1c2VkIHRoZSBkZXZpY2UgcGF0aFwiICQ/XG4rXG4rWyBcIiQodGxzX3N0YXQgbnNzdiBUbHNUeFN3KVwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKHRsc19zdGF0IG5zY2wgVGxzVHhTdylcIiAtZXEgMCBdXG4rY2hlY2sgXCJubyBzaWxlbnQgZmFsbGJhY2sgdG8gdGhlIHNvZnR3YXJlIHBhdGhcIiAkP1xuK1xuK1sgXCIkKHRsc19zdGF0IG5zc3YgVGxzRGVjcnlwdEVycm9yKVwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc2NsIFRsc0RlY3J5cHRFcnJvcilcIiAtZXEgMCBdXG4rY2hlY2sgXCJubyBkZWNyeXB0IGVycm9yc1wiICQ/XG4rXG4rIyBUaGUgZHJpdmVyIG11c3QgaGF2ZSBzZWVuIHRoZSByZWNvcmRzIGdvIGJ5IGluIGJvdGggZGlyZWN0aW9ucy5cbitbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMV9UTFNcIiB0eF9wYWNrZXRzKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMV9UTFNcIiByeF9wYWNrZXRzKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMl9UTFNcIiB0eF9wYWNrZXRzKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMl9UTFNcIiByeF9wYWNrZXRzKVwiIC1nZSAxIF1cbitjaGVjayBcImRyaXZlciBjb3VudGVkIG9mZmxvYWRlZCBwYWNrZXRzIGJvdGggd2F5c1wiICQ/XG4rXG4rIyBTb2NrZXRzIGFyZSBjbG9zZWQgYnkgbm93LCBzbyBldmVyeSBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGdpdmVuIGJhY2suXG4rWyBcIiQoZGJnX2ZpZWxkIFwiJE5TSU1fREVWXzFfVExTXCIgY291bnQpXCIgLWVxIDAgXSBcdTAwMjZcdTAwMjYgXFxcbitcdFsgXCIkKGRiZ19maWVsZCBcIiROU0lNX0RFVl8yX1RMU1wiIGNvdW50KVwiIC1lcSAwIF1cbitjaGVjayBcImFsbCBvZmZsb2FkIGNvbnRleHRzIHJlbGVhc2VkIG9uIGNsb3NlXCIgJD9cbitcbitbIFwiJCh0bHNfc3RhdCBuc3N2IFRsc0N1cnJUeERldmljZSlcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBcXFxuK1x0WyBcIiQodGxzX3N0YXQgbnNzdiBUbHNDdXJyUnhEZXZpY2UpXCIgLWVxIDAgXVxuK2NoZWNrIFwibm8gZGV2aWNlIGNvbnRleHRzIGxlZnQgYmVoaW5kXCIgJD9cbitcbisjIFR1cm5pbmcgdGhlIGZlYXR1cmUgb2ZmIGhhcyB0byBtYWtlIHRoZSBvZmZsb2FkIHJlZnVzZSB0aGUgY29ubmVjdGlvbjtcbisjIHRoZSB0ZXN0IGJpbmFyeSBpbnNpc3RzIG9uIHRoZSBkZXZpY2UgcGF0aCwgc28gaXQgbXVzdCBub3cgZmFpbC5cbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8xX05BTUVcIiB0bHMtaHctdHgtb2ZmbG9hZCBvZmZcbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8xX05BTUVcIiB0bHMtaHctcngtb2ZmbG9hZCBvZmZcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8yX05BTUVcIiB0bHMtaHctdHgtb2ZmbG9hZCBvZmZcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8yX05BTUVcIiB0bHMtaHctcngtb2ZmbG9hZCBvZmZcbitcbitydW5fcGFpciBub3NhbXBsZVxuK3JjPSQ/XG4rWyBcIiRyY1wiIC1uZSAwIF1cbitjaGVjayBcIm9mZmxvYWQgZGVjbGluZWQgb25jZSB0aGUgZmVhdHVyZSBpcyBvZmZcIiAkP1xuK1xuK1sgXCIkKHRsc19zdGF0IG5zc3YgVGxzVHhTdylcIiAtZ2UgMSBdXG4rY2hlY2sgXCJzb2Z0d2FyZSBwYXRoIHVzZWQgd2hlbiBvZmZsb2FkIGlzIG9mZlwiICQ/XG4rXG4raXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXCIkTlNJTV9ERVZfMV9OQU1FXCIgdGxzLWh3LXR4LW9mZmxvYWQgb25cbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8xX05BTUVcIiB0bHMtaHctcngtb2ZmbG9hZCBvblxuK2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwiJE5TSU1fREVWXzJfTkFNRVwiIHRscy1ody10eC1vZmZsb2FkIG9uXG4raXAgbmV0bnMgZXhlYyBuc2NsIGV0aHRvb2wgLUsgXCIkTlNJTV9ERVZfMl9OQU1FXCIgdGxzLWh3LXJ4LW9mZmxvYWQgb25cbitcbitydW5fcGFpclxuK2NoZWNrIFwib2ZmbG9hZCB3b3JrcyBhZ2FpbiBhZnRlciByZS1lbmFibGluZ1wiICQ/XG4rXG4rZWNob1xuK2VjaG8gXCJwYXNzZWQ6ICRudW1fcGFzcyBmYWlsZWQ6ICRudW1fZmFpbFwiXG4rWyBcIiRudW1fZmFpbFwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IGV4aXQgMFxuK2V4aXQgMVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHNfb2ZmbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rsc19vZmZsb2FkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lYmZiNGJmY2Q0ZjQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xuQEAgLTAsMCArMSw0OTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICoga1RMUyBkZXZpY2Ugb2ZmbG9hZCBkYXRhIHBhdGggZXhlcmNpc2UsIGRyaXZlbiBieSB0bHMuc2guXG4rICpcbisgKiBPbmUgaW5zdGFuY2UgcnVucyBhcyB0aGUgc2VydmVyIGFuZCBvbmUgYXMgdGhlIGNsaWVudCwgZWFjaCBpbiBpdHMgb3duXG4rICogbmV0d29yayBuYW1lc3BhY2UsIGNvbm5lY3RlZCBiYWNrIHRvIGJhY2sgYnkgYSBsaW5rZWQgbmV0ZGV2c2ltIHBhaXIuXG4rICogQm90aCBlbmRzIGVuYWJsZSBrVExTIGFuZCByZWx5IG9uIG5ldGRldnNpbSdzIGVtdWxhdGVkIFRMUyBvZmZsb2FkLCBzb1xuKyAqIGV2ZXJ5IHJlY29yZCB0cmF2ZWxzIHRocm91Z2ggbmV0L3Rscy90bHNfZGV2aWNlLmMgcmF0aGVyIHRoYW4gdGhlXG4rICogc29mdHdhcmUgcGF0aC5cbisgKlxuKyAqIFRoZSB0d28gcHJvY2Vzc2VzIHJlbmRlenZvdXMgdGhyb3VnaCBhIHNoYXJlZCBkaXJlY3Rvcnkgc28gdGhhdCBuZWl0aGVyXG4rICogc2lkZSBzZW5kcyBiZWZvcmUgdGhlIG90aGVyIGhhcyBpbnN0YWxsZWQgaXRzIFJYIG9mZmxvYWQuXG4rICovXG4rXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4rXG4rI2lmbmRlZiBTT0xfVExTXG4rI2RlZmluZSBTT0xfVExTXHRcdFx0MjgyXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBUQ1BfVUxQXG4rI2RlZmluZSBUQ1BfVUxQXHRcdFx0MzFcbisjZW5kaWZcbitcbisjZGVmaW5lIEJVTEtfTEVOXHRcdCgyMDAgKiAxMDI0KVxuKyNkZWZpbmUgTU9SRV9GUkFHU1x0XHQ2NFxuKyNkZWZpbmUgU1BMSUNFX0ZSQUdfTEVOXHRcdDQwOTZcbisjZGVmaW5lIFNQTElDRV9GUkFHU1x0XHQ4XG4rXG4rLyogVExTX01JTl9SRUNPUkRfU0laRV9MSU0gYW5kIFRMU19NQVhfUEFZTE9BRF9TSVpFLCB3aGljaCBhcmUgbm90IHVhcGkuICovXG4rI2RlZmluZSBSRUNfTElNX01JTlx0XHQ2NFxuKyNkZWZpbmUgUkVDX0xJTV9NQVhcdFx0MTYzODRcbitcbisjZGVmaW5lIFNNQUxMX1JFQ1NcdFx0MTAwXG4rI2RlZmluZSBTTUFMTF9MRU5cdFx0KFJFQ19MSU1fTUlOICogU01BTExfUkVDUylcbitcbisjZGVmaW5lIFNZTkNfVElNRU9VVF9NU1x0XHQyMDAwMFxuKyNkZWZpbmUgQ09OTkVDVF9USU1FT1VUX01TXHQyMDAwMFxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpyb2xlO1xuK1xuK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICp3aGF0KVxuK3tcbitcdGZwcmludGYoc3RkZXJyLCBcIiVzOiAlczogJXNcXG5cIiwgcm9sZSwgd2hhdCwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGV4aXQoMSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZhaWwoY29uc3QgY2hhciAqZm10LCAuLi4pXG4re1xuK1x0dmFfbGlzdCBhcDtcbitcbitcdGZwcmludGYoc3RkZXJyLCBcIiVzOiBcIiwgcm9sZSk7XG4rXHR2YV9zdGFydChhcCwgZm10KTtcbitcdHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7XG4rXHR2YV9lbmQoYXApO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuK1x0ZXhpdCgxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXNsZWVwKHVuc2lnbmVkIGludCBtcylcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XG4rXHRcdC50dl9zZWMgPSBtcyAvIDEwMDAsXG4rXHRcdC50dl9uc2VjID0gKG1zICUgMTAwMCkgKiAxMDAwMDAwTCxcbitcdH07XG4rXG4rXHRuYW5vc2xlZXAoXHUwMDI2dHMsIE5VTEwpO1xuK31cbitcbisvKiAvcHJvYy9uZXQvdGxzX3N0YXQgaXMgcGVyIG5ldG5zLCBzbyBib3RoIGVuZHMgY2FuIGNoZWNrIHRoYXQgdGhlaXIgb3duXG4rICogY29ubmVjdGlvbiByZWFsbHkgbGFuZGVkIG9uIHRoZSBkZXZpY2UgcGF0aC5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3Rsc19zdGF0KGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0Y2hhciBsaW5lWzI1Nl07XG4rXHR1bnNpZ25lZCBsb25nIHZhbDtcbitcdEZJTEUgKmY7XG4rXG4rXHRmID0gZm9wZW4oXCIvcHJvYy9uZXQvdGxzX3N0YXRcIiwgXCJyXCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRkaWUoXCJvcGVuIC9wcm9jL25ldC90bHNfc3RhdFwiKTtcbitcbitcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4rXHRcdGNoYXIga2V5WzY0XTtcbitcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIiU2M3MgJWx1XCIsIGtleSwgXHUwMDI2dmFsKSAhPSAyKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIXN0cmNtcChrZXksIG5hbWUpKSB7XG4rXHRcdFx0ZmNsb3NlKGYpO1xuK1x0XHRcdHJldHVybiB2YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdGZjbG9zZShmKTtcbitcdGZhaWwoXCIlcyBub3QgZm91bmQgaW4gL3Byb2MvbmV0L3Rsc19zdGF0XCIsIG5hbWUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZpbGxfcGF0dGVybihjaGFyICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBzZWVkKVxuK3tcbitcdHNpemVfdCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspXG4rXHRcdGJ1ZltpXSA9IChjaGFyKShzZWVkICsgaSAqIDMxICsgKGkgXHUwMDNlXHUwMDNlIDgpICogNyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNoZWNrX3BhdHRlcm4oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgc2VlZCxcbitcdFx0XHQgIGNvbnN0IGNoYXIgKndoYXQpXG4re1xuK1x0Y2hhciAqd2FudCA9IG1hbGxvYyhsZW4pO1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIXdhbnQpXG4rXHRcdGRpZShcIm1hbGxvY1wiKTtcbitcbitcdGZpbGxfcGF0dGVybih3YW50LCBsZW4sIHNlZWQpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspIHtcbitcdFx0aWYgKGJ1ZltpXSAhPSB3YW50W2ldKVxuK1x0XHRcdGZhaWwoXCIlczogcGF5bG9hZCBtaXNtYXRjaCBhdCBieXRlICV6dTogZ290IDB4JTAyeCB3YW50IDB4JTAyeFwiLFxuK1x0XHRcdCAgICAgd2hhdCwgaSwgKHVuc2lnbmVkIGNoYXIpYnVmW2ldLFxuK1x0XHRcdCAgICAgKHVuc2lnbmVkIGNoYXIpd2FudFtpXSk7XG4rXHR9XG4rXG4rXHRmcmVlKHdhbnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0c2l6ZV90IGRvbmUgPSAwO1xuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuK1x0XHRzc2l6ZV90IG4gPSBzZW5kKGZkLCBidWYgKyBkb25lLCBsZW4gLSBkb25lLCAwKTtcbitcbitcdFx0aWYgKG4gXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRkaWUoXCJzZW5kXCIpO1xuK1x0XHR9XG4rXHRcdGRvbmUgKz0gbjtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmVhZF9hbGwoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0c2l6ZV90IGRvbmUgPSAwO1xuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuK1x0XHRzc2l6ZV90IG4gPSByZWN2KGZkLCBidWYgKyBkb25lLCBsZW4gLSBkb25lLCAwKTtcbitcbitcdFx0aWYgKG4gXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRkaWUoXCJyZWN2XCIpO1xuK1x0XHR9XG4rXHRcdGlmIChuID09IDApXG4rXHRcdFx0ZmFpbChcInBlZXIgY2xvc2VkIGFmdGVyICV6dSBvZiAlenUgYnl0ZXNcIiwgZG9uZSwgbGVuKTtcbitcdFx0ZG9uZSArPSBuO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbmFibGVfa3RscyhpbnQgZmQpXG4re1xuK1x0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IGNpID0ge307XG4rXHR1bnNpZ25lZCBsb25nIHR4X2JlZm9yZSwgcnhfYmVmb3JlO1xuK1xuK1x0dHhfYmVmb3JlID0gcmVhZF90bHNfc3RhdChcIlRsc1R4RGV2aWNlXCIpO1xuK1x0cnhfYmVmb3JlID0gcmVhZF90bHNfc3RhdChcIlRsc1J4RGV2aWNlXCIpO1xuK1xuK1x0aWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcInRsc1wiLCBzaXplb2YoXCJ0bHNcIikpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRDUF9VTFAsIHRscylcIik7XG4rXG4rXHRjaS5pbmZvLnZlcnNpb24gPSBUTFNfMV8yX1ZFUlNJT047XG4rXHRjaS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyODtcbitcdG1lbXNldChjaS5pdiwgJ2knLCBzaXplb2YoY2kuaXYpKTtcbitcdG1lbXNldChjaS5rZXksICdrJywgc2l6ZW9mKGNpLmtleSkpO1xuK1x0bWVtc2V0KGNpLnNhbHQsICdzJywgc2l6ZW9mKGNpLnNhbHQpKTtcbitcdG1lbXNldChjaS5yZWNfc2VxLCAwLCBzaXplb2YoY2kucmVjX3NlcSkpO1xuK1xuK1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2Y2ksIHNpemVvZihjaSkpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRMU19UWClcIik7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1JYLCBcdTAwMjZjaSwgc2l6ZW9mKGNpKSkpXG4rXHRcdGRpZShcInNldHNvY2tvcHQoVExTX1JYKVwiKTtcbitcbitcdC8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZXhlcmNpc2U6IHJlZnVzZSB0byBzaWxlbnRseSBmYWxsIGJhY2sgdG9cbitcdCAqIHRoZSBzb2Z0d2FyZSBwYXRoLCBvdGhlcndpc2UgdGhlIHRlc3Qgd291bGQgcGFzcyB3aXRob3V0IGV2ZXJcbitcdCAqIHRvdWNoaW5nIHRsc19kZXZpY2UuYy5cbitcdCAqL1xuK1x0aWYgKHJlYWRfdGxzX3N0YXQoXCJUbHNUeERldmljZVwiKSAhPSB0eF9iZWZvcmUgKyAxKVxuK1x0XHRmYWlsKFwiVFggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzVHhEZXZpY2UgJWx1IC1cdTAwM2UgJWx1KVwiLFxuK1x0XHQgICAgIHR4X2JlZm9yZSwgcmVhZF90bHNfc3RhdChcIlRsc1R4RGV2aWNlXCIpKTtcbitcdGlmIChyZWFkX3Rsc19zdGF0KFwiVGxzUnhEZXZpY2VcIikgIT0gcnhfYmVmb3JlICsgMSlcbitcdFx0ZmFpbChcIlJYIGRpZCBub3QgbGFuZCBvbiB0aGUgZGV2aWNlIHBhdGggKFRsc1J4RGV2aWNlICVsdSAtXHUwMDNlICVsdSlcIixcbitcdFx0ICAgICByeF9iZWZvcmUsIHJlYWRfdGxzX3N0YXQoXCJUbHNSeERldmljZVwiKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHN5bmNfcGF0aChjaGFyICpvdXQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqd2hvKVxuK3tcbitcdGlmICgoc2l6ZV90KXNucHJpbnRmKG91dCwgbGVuLCBcIiVzLyVzLnJlYWR5XCIsIGRpciwgd2hvKSBcdTAwM2U9IGxlbilcbitcdFx0ZmFpbChcInN5bmMgZGlyIHBhdGggdG9vIGxvbmdcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcilcbit7XG4rXHRjaGFyIG1pbmVbUEFUSF9NQVhdLCB0aGVpcnNbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZCA9IDA7XG4rXHRpbnQgZmQ7XG4rXG4rXHRzeW5jX3BhdGgobWluZSwgc2l6ZW9mKG1pbmUpLCBkaXIsIG1lKTtcbitcdHN5bmNfcGF0aCh0aGVpcnMsIHNpemVvZih0aGVpcnMpLCBkaXIsIHBlZXIpO1xuK1xuK1x0ZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdGRpZShcImNyZWF0ZSBzeW5jIGZpbGVcIik7XG4rXHRjbG9zZShmZCk7XG4rXG4rXHR3aGlsZSAoYWNjZXNzKHRoZWlycywgRl9PSykpIHtcbitcdFx0aWYgKHdhaXRlZCBcdTAwM2U9IFNZTkNfVElNRU9VVF9NUylcbitcdFx0XHRmYWlsKFwidGltZWQgb3V0IHdhaXRpbmcgZm9yICVzXCIsIHBlZXIpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0XHR3YWl0ZWQgKz0gMjA7XG4rXHR9XG4rfVxuK1xuKy8qIEJvdGggZW5kcyBzdG9wIGhlcmUgd2l0aCB0aGVpciBvZmZsb2FkIGluc3RhbGxlZCBhbmQgbm8gZGF0YSBzZW50IHlldCxcbisgKiBzbyB0aGF0IHRoZSBkcml2ZXIgc3RhdGUgY2FuIGJlIGluc3BlY3RlZCBmcm9tIHRoZSBvdXRzaWRlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2dvKGNvbnN0IGNoYXIgKmRpcilcbit7XG4rXHR1bnNpZ25lZCBpbnQgd2FpdGVkID0gMDtcbitcdGNoYXIgZ29bUEFUSF9NQVhdO1xuK1xuK1x0aWYgKChzaXplX3Qpc25wcmludGYoZ28sIHNpemVvZihnbyksIFwiJXMvZ29cIiwgZGlyKSBcdTAwM2U9IHNpemVvZihnbykpXG4rXHRcdGZhaWwoXCJzeW5jIGRpciBwYXRoIHRvbyBsb25nXCIpO1xuK1xuK1x0d2hpbGUgKGFjY2VzcyhnbywgRl9PSykpIHtcbitcdFx0aWYgKHdhaXRlZCBcdTAwM2U9IFNZTkNfVElNRU9VVF9NUylcbitcdFx0XHRmYWlsKFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIGdvXCIpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0XHR3YWl0ZWQgKz0gMjA7XG4rXHR9XG4rfVxuK1xuKy8qIFNtYWxsIHdyaXRlcyB3aXRoIE1TR19NT1JFIGFjY3VtdWxhdGUgaW50byBvbmUgb3BlbiByZWNvcmQgYmVmb3JlIGl0IGlzXG4rICogcHVzaGVkLCB3aGljaCBpcyB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0bHNfcHVzaF9kYXRhKCkuXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9tc2dfbW9yZShpbnQgZmQsIHVuc2lnbmVkIGludCBzZWVkKVxuK3tcbitcdGNoYXIgYnVmW01PUkVfRlJBR1MgKyAxXTtcbitcdGludCBpO1xuK1xuK1x0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTU9SRV9GUkFHUzsgaSsrKSB7XG4rXHRcdGlmIChzZW5kKGZkLCBidWYgKyBpLCAxLCBNU0dfTU9SRSkgIT0gMSlcbitcdFx0XHRkaWUoXCJzZW5kKE1TR19NT1JFKVwiKTtcbitcdH1cbitcdGlmIChzZW5kKGZkLCBidWYgKyBNT1JFX0ZSQUdTLCAxLCAwKSAhPSAxKVxuK1x0XHRkaWUoXCJzZW5kKGxhc3QpXCIpO1xuK31cbitcbisvKiBzcGxpY2UoKSByZWFjaGVzIHRsc19wdXNoX2RhdGEoKSB3aXRoIE1TR19TUExJQ0VfUEFHRVMgb25jZVxuKyAqIFRMU19UWF9aRVJPQ09QWV9STyBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGRpc3RpbmN0IGZyYWdtZW50IHBhdGguXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9zcGxpY2UoaW50IGZkLCB1bnNpZ25lZCBpbnQgc2VlZClcbit7XG4rXHRjaGFyIGJ1ZltTUExJQ0VfRlJBR19MRU5dO1xuK1x0aW50IHZhbCA9IDE7XG4rXHRpbnQgaTtcbitcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRMU19UWF9aRVJPQ09QWV9STylcIik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTUExJQ0VfRlJBR1M7IGkrKykge1xuK1x0XHRpbnQgcFsyXTtcbitcbitcdFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQgKyBpICogU1BMSUNFX0ZSQUdfTEVOKTtcbitcbitcdFx0aWYgKHBpcGUocCkpXG4rXHRcdFx0ZGllKFwicGlwZVwiKTtcbitcdFx0aWYgKHdyaXRlKHBbMV0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IHNpemVvZihidWYpKVxuK1x0XHRcdGRpZShcIndyaXRlIHRvIHBpcGVcIik7XG4rXHRcdGlmIChzcGxpY2UocFswXSwgTlVMTCwgZmQsIE5VTEwsIHNpemVvZihidWYpLFxuK1x0XHRcdCAgIGkgPT0gU1BMSUNFX0ZSQUdTIC0gMSA/IDAgOiBTUExJQ0VfRl9NT1JFKSAhPVxuK1x0XHQgICAgc2l6ZW9mKGJ1ZikpXG4rXHRcdFx0ZGllKFwic3BsaWNlXCIpO1xuK1x0XHRjbG9zZShwWzBdKTtcbitcdFx0Y2xvc2UocFsxXSk7XG4rXHR9XG4rXG4rXHR2YWwgPSAwO1xuK1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4rXHRcdGRpZShcInNldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPIG9mZilcIik7XG4rfVxuK1xuKy8qIEEgcmVjb3JkIGNhbiBiZSB1cCB0byAxNkssIHNvIG5vcm1hbGx5IG9uZSBzZWdtZW50IGNhcnJpZXMgYSBwaWVjZSBvZiBhXG4rICogc2luZ2xlIHJlY29yZC4gIFNocmlua2luZyB0aGUgbGltaXQgcHV0cyBhIGRvemVuIG9yIHNvIHdob2xlIHJlY29yZHMgaW5cbisgKiBldmVyeSBzZWdtZW50IGluc3RlYWQsIHdoaWNoIGlzIHRoZSBtdWx0aS1yZWNvcmQgcGF0aCB0aHJvdWdoIHRoZSBkcml2ZXIuXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9zbWFsbF9yZWNvcmRzKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXG4re1xuK1x0Y2hhciBidWZbU01BTExfTEVOXTtcbitcdHVpbnQxNl90IGxpbWl0O1xuK1xuK1x0bGltaXQgPSBSRUNfTElNX01JTjtcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfTUFYX1BBWUxPQURfTEVOLCBcdTAwMjZsaW1pdCxcbitcdFx0ICAgICAgIHNpemVvZihsaW1pdCkpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRMU19UWF9NQVhfUEFZTE9BRF9MRU4pXCIpO1xuK1xuK1x0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpO1xuK1x0d3JpdGVfYWxsKGZkLCBidWYsIHNpemVvZihidWYpKTtcbitcbitcdGxpbWl0ID0gUkVDX0xJTV9NQVg7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgXHUwMDI2bGltaXQsXG4rXHRcdCAgICAgICBzaXplb2YobGltaXQpKSlcbitcdFx0ZGllKFwic2V0c29ja29wdChUTFNfVFhfTUFYX1BBWUxPQURfTEVOIHJlc3RvcmUpXCIpO1xuK31cbitcbisjZGVmaW5lIFNFRURfQzJTX0JVTEtcdDB4MTFcbisjZGVmaW5lIFNFRURfUzJDX0JVTEtcdDB4MjJcbisjZGVmaW5lIFNFRURfQzJTX01PUkVcdDB4MzNcbisjZGVmaW5lIFNFRURfQzJTX1NQTElDRVx0MHg0NFxuKyNkZWZpbmUgU0VFRF9DMlNfU01BTExcdDB4NTVcbitcbitzdGF0aWMgdm9pZCBydW5fY2xpZW50KGludCBmZClcbit7XG4rXHRjaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pO1xuK1xuK1x0aWYgKCFidWYpXG4rXHRcdGRpZShcIm1hbGxvY1wiKTtcbitcbitcdGZpbGxfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX0MyU19CVUxLKTtcbitcdHdyaXRlX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XG4rXG4rXHRyZWFkX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XG4rXHRjaGVja19wYXR0ZXJuKGJ1ZiwgQlVMS19MRU4sIFNFRURfUzJDX0JVTEssIFwic2VydmVyIC1cdTAwM2UgY2xpZW50IGJ1bGtcIik7XG4rXG4rXHRzZW5kX21zZ19tb3JlKGZkLCBTRUVEX0MyU19NT1JFKTtcbitcdHNlbmRfc3BsaWNlKGZkLCBTRUVEX0MyU19TUExJQ0UpO1xuK1x0c2VuZF9zbWFsbF9yZWNvcmRzKGZkLCBTRUVEX0MyU19TTUFMTCk7XG4rXG4rXHQvKiBXYWl0IGZvciB0aGUgc2VydmVyJ3MgdmVyZGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZyBkb3duLiAqL1xuK1x0cmVhZF9hbGwoZmQsIGJ1ZiwgMSk7XG4rXHRpZiAoYnVmWzBdICE9ICdrJylcbitcdFx0ZmFpbChcInNlcnZlciByZXBvcnRlZCBhIGZhaWx1cmVcIik7XG4rXG4rXHRmcmVlKGJ1Zik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkKVxuK3tcbitcdHNpemVfdCBzcGxpY2VfbGVuID0gKHNpemVfdClTUExJQ0VfRlJBR19MRU4gKiBTUExJQ0VfRlJBR1M7XG4rXHRjaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pO1xuK1x0Y2hhciBtb3JlW01PUkVfRlJBR1MgKyAxXTtcbitcdGNoYXIgKnNidWY7XG4rXHRjaGFyIG9rID0gJ2snO1xuK1x0aW50IGk7XG4rXG4rXHRzYnVmID0gbWFsbG9jKHNwbGljZV9sZW4pO1xuK1x0aWYgKCFidWYgfHwgIXNidWYpXG4rXHRcdGRpZShcIm1hbGxvY1wiKTtcbitcbitcdHJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcbitcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSywgXCJjbGllbnQgLVx1MDAzZSBzZXJ2ZXIgYnVsa1wiKTtcbitcbitcdGZpbGxfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX1MyQ19CVUxLKTtcbitcdHdyaXRlX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XG4rXG4rXHRyZWFkX2FsbChmZCwgbW9yZSwgc2l6ZW9mKG1vcmUpKTtcbitcdGNoZWNrX3BhdHRlcm4obW9yZSwgc2l6ZW9mKG1vcmUpLCBTRUVEX0MyU19NT1JFLCBcImNsaWVudCAtXHUwMDNlIHNlcnZlciBNU0dfTU9SRVwiKTtcbitcbitcdHJlYWRfYWxsKGZkLCBzYnVmLCBzcGxpY2VfbGVuKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNQTElDRV9GUkFHUzsgaSsrKVxuK1x0XHRjaGVja19wYXR0ZXJuKHNidWYgKyAoc2l6ZV90KWkgKiBTUExJQ0VfRlJBR19MRU4sXG4rXHRcdFx0ICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgK1xuK1x0XHRcdCAgICAgIGkgKiBTUExJQ0VfRlJBR19MRU4sIFwiY2xpZW50IC1cdTAwM2Ugc2VydmVyIHNwbGljZVwiKTtcbitcbitcdHJlYWRfYWxsKGZkLCBidWYsIFNNQUxMX0xFTik7XG4rXHRjaGVja19wYXR0ZXJuKGJ1ZiwgU01BTExfTEVOLCBTRUVEX0MyU19TTUFMTCxcbitcdFx0ICAgICAgXCJjbGllbnQgLVx1MDAzZSBzZXJ2ZXIgc21hbGwgcmVjb3Jkc1wiKTtcbitcbitcdHdyaXRlX2FsbChmZCwgXHUwMDI2b2ssIDEpO1xuK1xuK1x0ZnJlZShzYnVmKTtcbitcdGZyZWUoYnVmKTtcbit9XG4rXG4rc3RhdGljIGludCBkb19zZXJ2ZXIoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xuK1x0aW50IGxmZCwgZmQsIG9uZSA9IDE7XG4rXG4rXHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGxmZCBcdTAwM2MgMClcbitcdFx0ZGllKFwic29ja2V0XCIpO1xuK1x0aWYgKHNldHNvY2tvcHQobGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuK1x0XHRkaWUoXCJTT19SRVVTRUFERFJcIik7XG4rXG4rXHRzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbitcdHNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7XG4rXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcbitcdFx0ZmFpbChcImJhZCBiaW5kIGFkZHJlc3MgJXNcIiwgaXApO1xuK1xuK1x0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2EsIHNpemVvZihzYSkpKVxuK1x0XHRkaWUoXCJiaW5kXCIpO1xuK1x0aWYgKGxpc3RlbihsZmQsIDEpKVxuK1x0XHRkaWUoXCJsaXN0ZW5cIik7XG4rXG4rXHRmZCA9IGFjY2VwdChsZmQsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRkaWUoXCJhY2NlcHRcIik7XG4rXHRjbG9zZShsZmQpO1xuK1xuK1x0ZW5hYmxlX2t0bHMoZmQpO1xuK1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcInNlcnZlclwiLCBcImNsaWVudFwiKTtcbitcdHdhaXRfZm9yX2dvKHN5bmNkaXIpO1xuK1xuK1x0cnVuX3NlcnZlcihmZCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBkb19jbGllbnQoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZCA9IDA7XG4rXHRpbnQgZmQ7XG4rXG4rXHRzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbitcdHNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7XG4rXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcbitcdFx0ZmFpbChcImJhZCBzZXJ2ZXIgYWRkcmVzcyAlc1wiLCBpcCk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcbitcdFx0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRcdGRpZShcInNvY2tldFwiKTtcbitcdFx0aWYgKCFjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2EsIHNpemVvZihzYSkpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdGlmICh3YWl0ZWQgXHUwMDNlPSBDT05ORUNUX1RJTUVPVVRfTVMpXG4rXHRcdFx0ZGllKFwiY29ubmVjdFwiKTtcbitcdFx0bXNsZWVwKDIwKTtcbitcdFx0d2FpdGVkICs9IDIwO1xuK1x0fVxuK1xuK1x0ZW5hYmxlX2t0bHMoZmQpO1xuK1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcImNsaWVudFwiLCBcInNlcnZlclwiKTtcbitcdHdhaXRfZm9yX2dvKHN5bmNkaXIpO1xuK1xuK1x0cnVuX2NsaWVudChmZCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdGludCBwb3J0O1xuK1xuK1x0aWYgKGFyZ2MgIT0gNSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcInVzYWdlOiAlcyBzZXJ2ZXJ8Y2xpZW50IFx1MDAzY2lwXHUwMDNlIFx1MDAzY3BvcnRcdTAwM2UgXHUwMDNjc3luY2Rpclx1MDAzZVxcblwiLFxuK1x0XHRcdGFyZ3ZbMF0pO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcbitcdHJvbGUgPSBhcmd2WzFdO1xuK1x0cG9ydCA9IGF0b2koYXJndlszXSk7XG4rXG4rXHRpZiAoIXN0cmNtcChyb2xlLCBcInNlcnZlclwiKSlcbitcdFx0cmV0dXJuIGRvX3NlcnZlcihhcmd2WzJdLCBwb3J0LCBhcmd2WzRdKTtcbitcdGlmICghc3RyY21wKHJvbGUsIFwiY2xpZW50XCIpKVxuK1x0XHRyZXR1cm4gZG9fY2xpZW50KGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwidW5rbm93biByb2xlICVzXFxuXCIsIHJvbGUpO1xuK1x0cmV0dXJuIDI7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MTkuNzU2NzU0NTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MjU3NjAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtUTFMgT2ZmbG9hZCBQYXRjaCBmb3IgbmV0ZGV2c2ltKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBhZGRpbmcgZW11bGF0ZWQga1RMUyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgdG8gYG5ldGRldnNpbWAuIEknbSBpbW1lZGlhdGVseSB6ZXJvaW5nIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgYSB3b3JraG9yc2UgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcgaW4gdGhlIG5ldHdvcmtpbmcgd29ybGQuIEdldHRpbmcgdGhpcyByaWdodCBpcyBjcnVjaWFsIGZvciB0aGUgc3RhYmlsaXR5IG9mIHRoZSBrZXJuZWwgYW5kIHRoZSByZWxpYWJpbGl0eSBvZiBvdXIgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS5cblxuSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBoYW5kZnVsIG9mIGZpbGVzOiBgS2NvbmZpZ2AsIHRoZSBgTWFrZWZpbGVgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgLCBgdGxzLmNgLCBhbmQgYSBuZXcgc2VsZnRlc3QuIFRoYXQncyBhIHJlYXNvbmFibGUgc2NvcGUgZm9yIHRoaXMga2luZCBvZiBmZWF0dXJlIGFkZGl0aW9uLiBHaXZlbiB0aGF0IGBuZXRkZXZzaW1gIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgdGhlIGFjY2Vzc2liaWxpdHkgaXMgY2xlYXJseSB0aGVyZS5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlLi4uIHdlJ2xsIG5lZWQgYENPTkZJR19ORVRERVZTSU1gLCBgQ09ORklHX1RMU2AsIGFuZCBgQ09ORklHX1RMU19ERVZJQ0VgLiBJJ2xsIGltbWVkaWF0ZWx5IHN0YXJ0IGNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZW5mb3JjZWQgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFyZSBhdm9pZGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L0tjb25maWdgIGFuZCBgbmV0L3Rscy9LY29uZmlnYC5cblxuT2theSwgbG9va2luZyBhdCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBgTkVUREVWU0lNYCBkZXBlbmRzIG9uIGBJTkVUYCwgYFBTQU1QTEUgfHwgUFNBTVBMRT1uYCwgYFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uYCwgYW5kIGltcG9ydGFudGx5LCBgVExTIHx8IFRMUz1uYC4gVGhpcyBzZWVtcyBsb2dpY2FsLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHdpdGhpbiB0aGUgZGVwZW5kZW5jaWVzLiBOb3cgbGV0J3MgY2hlY2sgYG5ldC90bHMvS2NvbmZpZ2AgZm9yIHRoZSBgVExTX0RFVklDRWAgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBkcmlsbCBkb3duIHRvIGVuc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc2NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjI3LjAyOTMzMzc2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3OTI1NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjI4Ljg1NzI2NTE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjUzMzYxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gVExTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFRMUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIGV4cG9zZWQuIEkgcmVtZW1iZXIgdGhhdCBgbmV0L3Rscy9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLCBzbyBsZXQncyBuYXZpZ2F0ZSB0byB0aGF0IGZpbGUuIEknbSBmb2N1c2luZyBhcm91bmQgbGluZSAxOTsgdGhhdCdzIGdlbmVyYWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTkgd2lsbCBiZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQncyBkZWZpbmVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hhdCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgbG9va3MgbGlrZSBmb3IgVExTIGZlYXR1cmUgY29uZmlndXJhdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgZmVlbCBmb3IgaG93IEkgY2FuIGluZmx1ZW5jZSBvciBpbnRlZ3JhdGUgdGhpcyBpbnRvIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MzQuODIyNjAzNDY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MzQuODIyNjY3NzA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAwMjQwNDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9ucywgZXhwcmVzc2VkIGFzIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEZXBlbmRlbmN5IERlZHVjdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEl0IGxvb2tzIGxpa2UgYFRMU19ERVZJQ0VgIGlzIGluaGVyZW50bHkgbGlua2VkIHRvIGBUTFNgLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBgVExTYCBpdHNlbGYgaXMgYnVpbGRpbmcgb24gdG9wIG9mIHRoZSBgSU5FVGAgc3RhY2ssIGFzIEknZCBleHBlY3QuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgYE5FVERFVlNJTWAsIHdoaWNoIGFwcGFyZW50bHkgZGVwZW5kcyBvbiBgVExTYCAqb3IqIGV4cGxpY2l0bHkgZGlzYWJsaW5nIGBUTFNgIChgVExTPW5gKS4gQnV0IHNpbmNlIHRoZSBnb2FsIGlzIHRvICplbmFibGUqIGBORVRERVZTSU1gLCB0aGUgcmVxdWlyZW1lbnQgYmVjb21lcyBjbGVhcjogd2UgZGVmaW5pdGVseSBuZWVkIGBUTFNgLlxuXG5UaGVyZWZvcmUsIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIGJvaWxzIGRvd24gdG8gZW5zdXJpbmcgdGhhdCBgTkVUREVWU0lNYCwgYFRMU2AsIGFuZCBgVExTX0RFVklDRWAgYXJlIGFsbCBlbmFibGVkIGFuZCBwcm9wZXJseSBzZXQgdXAgdG8gd29yayB0b2dldGhlci4gRXNzZW50aWFsbHksIGdldHRpbmcgdGhlIHdob2xlIHN0YWNrIGluIG9yZGVyLlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFkZGVkIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYW5kIHRoZSByZWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCB0ZWxsIHRoZSBmdWxsIHN0b3J5LiBJIHdhbnQgdG8gc2VlICpob3cqIHRoZXNlIG1vZHVsZXMgaGF2ZSBpbnRlZ3JhdGVkIGFuZCBob3cgdGhleSdyZSBoYW5kbGluZyB0aGlzIHNwZWNpZmljIGFzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMjgsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjQzLjgyNTA3NjAxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ3OTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfMC05XSsgKStuc2ltX3Rsc19bYS16XzAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz00NT1zdHJ1Y3QgbnNpbV90bHNfdHVwbGUge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTUxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzo1MjpzdGF0aWMgYm9vbCBuc2ltX3Rsc19wYXJzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy01My1cXHRcXHRcXHQgICBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtOTAtICovXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjkxOnN0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtOTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTE1LSAqL1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxMTY6c3RhdGljIHZvaWQgbnNpbV90bHNfdHhfemVyb190YWdzKHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTExNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTU3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxNTg6c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTE1OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTcyLSAqL1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxNzM6c3RhdGljIHZvaWQgbnNpbV90bHNfcngoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTE3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM9MTk2PXZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjA5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoyMTA6c3RhdGljIGludCBuc2ltX3Rsc19kZXZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjExLVxcdFxcdFxcdCAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTI2Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MjY3OnN0YXRpYyB2b2lkIG5zaW1fdGxzX2Rldl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjY4LVxcdFxcdFxcdCAgICAgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTI5OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MzAwOnN0YXRpYyBpbnQgbnNpbV90bHNfZGV2X3Jlc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTMwMS1cXHRcXHRcXHQgICAgICAgdTMyIHNlcSwgdTggKnJjZF9zbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0zMTE9c3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0zMTYtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjMxNzpzdGF0aWMgc3NpemVfdCBuc2ltX3Rsc19kYmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzE4LVxcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV90bHNfZGJnX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzgxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzozODI6dm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0zODMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTM5NS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6Mzk2OnZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTM5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjQzLjg3NjU2MzkxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0Nzg0NDUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUHJpb3JpdGl6aW5nIFRMUyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBUTFMgZnVuY3Rpb25zIGhlcmUuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGxlYW5pbmcgbWUgdG93YXJkcyBmb2N1c2luZyBvbiBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfZGV2X2FkZGAsIGBuc2ltX3Rsc19kZXZfZGVsYCwgYG5zaW1fdGxzX2Rldl9yZXN5bmNgLCBgbnNpbV90bHNfZGJnX3JlYWRgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBhIGZldyBvZiB0aG9zZSDigJMgYG5zaW1fdGxzX2Rldl9hZGRgLCBgbnNpbV90bHNfZGV2X2RlbGAsIGBuc2ltX3Rsc19kZXZfcmVzeW5jYCwgYW5kIGBuc2ltX3Rsc19kYmdfcmVhZGAg4oCTIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoZSBndWlkYW5jZSBzdWdnZXN0cyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBhdm9pZCBpbmxpbmVkIGhlbHBlcnMgd2l0aG91dCBkaXN0aW5jdCBzeW1ib2xzLiBIb3dldmVyLCBJIHNlZSB0aGF0IGBuc2ltX3Rsc19kZXZfYWRkYCBpcyBhc3NpZ25lZCB0byBgbnNpbV90bHNkZXZfb3BzYCwgYSBzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMuIFRoYXQncyBnb29kLCBtZWFuaW5nIGl0ICp3b24ndCogYmUgaW5saW5lZCBhbmQgaXMgcG90ZW50aWFsbHkgYSBzb2xpZCBjaG9pY2UuIEJ1dCBgbnNpbV9kb190bHNgIGlzIG5vbi1zdGF0aWMuXG5cbkxldCdzIHNpbXBsaWZ5IHRoaW5ncyBmb3Igbm93IGFuZCB1c2UgYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC5cblxuV2FpdCwgdGhpbmtpbmcgbW9yZSBhYm91dCBpdCwgYG5zaW1fdGxzX2Rldl9hZGRgIGlzIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBhZGRpbmcgYSBuZXcgVExTIGNvbnRleHQuIEV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgc28gaXQgd29uJ3QgYmUgaW5saW5lZC4gSXQncyBhIHZhbGlkLCBwZXJoYXBzIHRoZSBiZXN0IHRhcmdldC4gQWx0aG91Z2gsIGl0IGlzIGEgdmFsaWQgdGFyZ2V0IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB3ZSBjb3VsZCBhbHNvIGNob29zZSBgbnNpbV9kb190bHNgLlxuXG5BY3R1YWxseSwgbm93IEkgcmVtZW1iZXIsIGBuc2ltX2RvX3Rsc2AgaXMgY2FsbGVkIGZyb20gYG5zaW1fc3RhcnRfeG1pdGAuXG5cblRpbWUgdG8gZG91YmxlLWNoZWNrIGBuc2ltX2RvX3Rsc2AgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIHRoZSByaWdodCBmaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjUzLjM1NTAxMzQyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcbiAxOTE6XFx0LyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxcbiAxOTI6XFx0ICogcGVlcidzIHJlY2VpdmUgcGF0aCwgc28gdGhpcyBvbmUgY2FsbCBzaXRlIHN0YW5kcyBpbiBmb3IgdGhlIGhhcmR3YXJlIG9mXFxuIDE5MzpcXHQgKiBib3RoIHBvcnRzLiAgSXQgaGFzIHRvIHJ1biBiZWZvcmUgbnNpbV9mb3J3YXJkX3NrYigpIG1vdmVzIHRoZSBza2Igb3ZlcixcXG4gMTk0OlxcdCAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cXG4gMTk1OlxcdCAqL1xcbiAxOTY6XFx0dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG4gMTk3OlxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKVxcbiAxOTg6XFx0e1xcbiAxOTk6XFx0XFx0LyogbnNpbV9kb19wc3AoKSByYW4gZmlyc3QgYW5kIG1heSBoYXZlIHdyYXBwZWQgdGhlIHJlY29yZCBzdHJlYW0sIHNvXFxuIDIwMDpcXHRcXHQgKiB0aGlzIGlzIG5vIGxvbmdlciBhIHBsYWluIFRMUyBvdmVyIFRDUCBwYWNrZXQuICBObyBOSUMgY2hhaW5zIHRoZVxcbiAyMDE6XFx0XFx0ICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLlxcbiAyMDI6XFx0XFx0ICovXFxuIDIwMzpcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbiAyMDQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRuc2ltX3Rsc190eChucywgc2tiKTtcXG4gMjA3OlxcdFxcdG5zaW1fdGxzX3J4KHBlZXJfbnMsIHNrYik7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6NTMuMzU1MTAxNzkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTkzNDQ2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gVExTIEluaXRpYWxpemF0aW9uIGFuZCBUZWFyZG93bioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlc2UgdHdvIHNwZWNpZmljIGZ1bmN0aW9uczogYG5zaW1fdGxzX2luaXRgIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiBUaGVzZSBuYW1lcyBpbW1lZGlhdGVseSBzdWdnZXN0IHRoZXkgYXJlIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gb2YgVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYG5zaW1gIGZyYW1ld29yay4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGluZ3MgbGlrZSBlc3RhYmxpc2hpbmcgc2VjdXJlIGNvbm5lY3Rpb25zLCBzZXR0aW5nIHVwIFRMUyBjb250ZXh0cywgaGFuZGxpbmcgY2VydGlmaWNhdGVzLCBrZXkgbWFuYWdlbWVudCwgYW5kIHVsdGltYXRlbHksIGdyYWNlZnVsbHkgc2h1dHRpbmcgZG93biB0aG9zZSBzZWN1cmVkIHNlc3Npb25zLiBBIHN1Y2Nlc3NmdWwgaW52ZXN0aWdhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgaW52b2x2ZSBsb29raW5nIGZvciBhIG51bWJlciBvZiBmZWF0dXJlcyBsaWtlIGEgc3VjY2Vzc2Z1bCBUTFMgaW5pdGlhbGl6YXRpb24sIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cCB3aGVuIHRlYXJpbmcgZG93biB0aGUgVExTIGNvbm5lY3Rpb24sIGFuZCB0aGUgaW5jbHVzaW9uIG9mIHdlbGwtc3RydWN0dXJlZCBmdW5jdGlvbnMgc3VjaCBhcyBgU1NMX0NUWF9uZXdgLCBgU1NMX25ld2AsIGBTU0xfY29ubmVjdGAsIGFuZCBgU1NMX3NodXRkb3duYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuc2ltYCBtYW5hZ2VzIHRoZSBpbnRyaWNhY2llcyBvZiBUTFMgd2l0aGluIGl0cyBhcmNoaXRlY3R1cmUuIE5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6NTguMzE0NDUxNDI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdH07XFxuIDM4MTpcXHRcXG4gMzgyOlxcdHZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4gMzgzOlxcdHtcXG4gMzg0OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZucy1cXHUwMDNldGxzLmNvbm5zKTtcXG4gMzg1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2V0bHNkZXZfb3BzID0gXFx1MDAyNm5zaW1fdGxzZGV2X29wcztcXG4gMzg4OlxcdFxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xcbiAzODk6XFx0XFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTlNJTV9UTFNfRkVBVFVSRVM7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdG5zLVxcdTAwM2V0bHMuZGZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJ0bHNcXFwiLCAwNDAwLFxcbiAzOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5zLVxcdTAwM2Vuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4gMzkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bnNpbV90bHNfZGJnX2ZvcHMpO1xcbiAzOTQ6XFx0fVxcbiAzOTU6XFx0XFxuIDM5NjpcXHR2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiAzOTc6XFx0e1xcbiAzOTg6XFx0XFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7XFxuIDM5OTpcXHRcXHR1MzIgbGVmdDtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVxcdTAwM2V0bHMuZGZpbGUpO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuIDQwNDpcXHRcXHRsZWZ0ID0gbnMtXFx1MDAzZXRscy5jb3VudDtcXG4gNDA1OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCB0bXAsIFxcdTAwMjZucy1cXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XFxuIDQwNjpcXHRcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWxpc3QpO1xcbiA0MDc6XFx0XFx0XFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XFxuIDQwODpcXHRcXHR9XFxuIDQwOTpcXHRcXHRucy1cXHUwMDNldGxzLmNvdW50ID0gMDtcXG4gNDEwOlxcdFxcdG5zLVxcdTAwM2V0bHMudHhfY29ubiA9IDA7XFxuIDQxMTpcXHRcXHRucy1cXHUwMDNldGxzLnJ4X2Nvbm4gPSAwO1xcbiA0MTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuIDQxMzpcXHRcXG4gNDE0OlxcdFxcdGlmIChsZWZ0KVxcbiA0MTU6XFx0XFx0XFx0bmV0ZGV2X2Vycihucy1cXHUwMDNlbmV0ZGV2LFxcbiA0MTY6XFx0XFx0XFx0XFx0ICAgXFxcInRlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXFxcblxcXCIsXFxuIDQxNzpcXHRcXHRcXHRcXHQgICBsZWZ0KTtcXG4gNDE4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6NTguMzE0NjMyMjU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NTU3NDYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGtUTFMgT2ZmbG9hZCBQYXRjaCBmb3IgbmV0ZGV2c2ltKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGp1c3QgZ3JhYiBgbnNpbV9kb190bHNgIHNpbmNlIGl0J3Mgbm90IHN0YXRpYyBhbmQgbm90IGlubGluZWQsIGFsb25nIHdpdGggYG5zaW1fdGxzX2luaXRgIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiAgYG5zaW1fdGxzX2Rldl9hZGRgIGNhdWdodCBteSBleWUgaW5pdGlhbGx5LCBzaW5jZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiAtIGluZGljYXRpbmcgaXQncyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBCdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG5zaW1fdGxzX2Rldl9hZGRgIGFuZCBgbnNpbV90bHNfZGV2X2RlbGAgYXJlIHJlYWxseSB0aGUgaGVhcnQgb2YgdGhlIFRMUyBjb250ZXh0IG1hbmFnZW1lbnQgZm9yIHRoaXMgbmV0ZGV2c2ltIGtUTFMgb2ZmbG9hZC4gVGhleSAqYXJlKiBhc3NpZ25lZCB0byB0aGUgYG5zaW1fdGxzZGV2X29wc2Agc3RydWN0dXJlIHdoaWNoIGlzIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHRoZSBrVExTIGNvbnRleHQgYWRkaXRpb24gYW5kIGRlbGV0aW9uLCBzbyBJIHNob3VsZCBpbmNsdWRlIHRoZW0uIFRoZW4sIHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzaG91bGQgc3RpY2sgd2l0aCBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiBJJ20gZ29pbmcgdG8gc3RpY2sgd2l0aCB0aGUgYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIGBORVRERVZTSU1gLCBgVExTYCwgYW5kIGBUTFNfREVWSUNFYC4gQ2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4uLiBgVExTYCBuZWVkcyBgSU5FVGAuIGBORVRERVZTSU1gIG5lZWRzIGBJTkVUYCwgIGBQU0FNUExFIHx8IFBTQU1QTEU9bmAsIGBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9bmAsIGFuZCBgVExTIHx8IFRMUz1uYC4gU28sIHRob3NlIHRocmVlIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5UaGUgYmlnIHBpY3R1cmUgaXMgdGhpczogdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldywgZW11bGF0ZWQga1RMUyBvZmZsb2FkIGNhcGFiaWxpdHkgdG8gdGhlIGBuZXRkZXZzaW1gIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYWRkaXRpb24gdGhhdCBwcm92aWRlcyBuZXcsIHJlYWNoYWJsZSBjb2RlIHBhdGhzLiBUaGlzIG1lYW5zIGl0J3MgZm9yIHRlc3RpbmcgVExTIGhhcmR3YXJlIG9mZmxvYWQgaW4gYSB2aXJ0dWFsaXplZCwgc2ltdWxhdGVkIGVudmlyb25tZW50LiBUaGUgbmV3IGNvZGUgc2hvdWxkIGJlIGludm9rZWQgdmlhIHRoZSBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucyBhbmQgdHlwaWNhbCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBgbmV0ZGV2c2ltYC5cblxuVG8gcmVjYXAsIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5MiwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNTowNzowNy4xNzAzODIzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTUxMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fZG9fdGxzXCIsXG4gICAgXCJuc2ltX3Rsc19pbml0XCIsXG4gICAgXCJuc2ltX3Rsc190ZWFyZG93blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZW11bGF0ZWQga1RMUyBvZmZsb2FkIHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiBuZXRkZXZzaW0gaXMgdXNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fZG9fdGxzXCIsXG4gICAgXCJuc2ltX3Rsc19pbml0XCIsXG4gICAgXCJuc2ltX3Rsc190ZWFyZG93blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZW11bGF0ZWQga1RMUyBvZmZsb2FkIHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiBuZXRkZXZzaW0gaXMgdXNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 14:41:21 +0000 UTC FinishedAt: 2026-07-29 15:07:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "TLS", "TLS_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "TLS", "TLS_DEVICE" ], "series_id": "424efba7-fa9a-474b-9760-7ed353c70dd0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_do_tls", "nsim_tls_init", "nsim_tls_teardown" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZG9fdGxzJiMzNDssCiAgICAmIzM0O25zaW1fdGxzX2luaXQmIzM0OywKICAgICYjMzQ7bnNpbV90bHNfdGVhcmRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGZvciB0ZXN0aW5nIFRMUyBoYXJkd2FyZSBvZmZsb2FkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIG5ldGRldnNpbSBpcyB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWY2ZDAzN2I4MjlhZTZkNzQxMTkxOTBhMjE4NmI4NGU1NGU1YTg2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjA2OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnXG5pbmRleCBmZjc5YzQ2NjcxMmRmLi5jYjRkNGJiODdhZmMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvS2NvbmZpZ1xuQEAgLTYwNyw2ICYjNDM7NjA3LDcgQEAgY29uZmlnIE5FVERFVlNJTVxuIFx0ZGVwZW5kcyBvbiBJTkVUXG4gXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4mIzQzO1x0ZGVwZW5kcyBvbiBUTFMgfHwgVExTPW5cbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFBBR0VfUE9PTFxuIFx0c2VsZWN0IE5FVF9TSEFQRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcbmluZGV4IDg3NzE4MjA0ZmI0ZGUuLmM3Zjc2MjEzMjNiMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuQEAgLTI1LDMgJiM0MzsyNSw3IEBAIGVuZGlmXG4gaWZuZXEgKCQoQ09ORklHX01BQ1NFQyksKVxuIG5ldGRldnNpbS1vYmpzICYjNDM7PSBtYWNzZWMub1xuIGVuZGlmXG4mIzQzO1xuJiM0MztpZm5lcSAoJChDT05GSUdfVExTX0RFVklDRSksKVxuJiM0MztuZXRkZXZzaW0tb2JqcyAmIzQzOz0gdGxzLm9cbiYjNDM7ZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjhkYzBiMGE3ZDFhMTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTE1MSw2ICYjNDM7MTUxLDggQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKGRyKVxuIFx0XHRnb3RvIG91dF9kcm9wX2ZyZWU7XG4gXG4mIzQzO1x0bnNpbV9kb190bHMoc2tiLCBucywgcGVlcl9ucyk7XG4mIzQzO1xuIFx0cnhxID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRpZiAocnhxIFx1MDAzZT0gcGVlcl9kZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcylcbiBcdFx0cnhxID0gcnhxICUgcGVlcl9kZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcztcbkBAIC0xMDY2LDYgJiM0MzsxMDY4LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFxuIFx0bnNpbV9tYWNzZWNfaW5pdChucyk7XG4gXHRuc2ltX2lwc2VjX2luaXQobnMpO1xuJiM0MztcdG5zaW1fdGxzX2luaXQobnMpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVx1MDAzZW5ldGRldik7XG4gXHRpZiAoZXJyKVxuQEAgLTEwOTMsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5zLVx1MDAzZXBlZXIsIE5VTEwpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbiBlcnJfaXBzZWNfdGVhcmRvd246XG4mIzQzO1x0bnNpbV90bHNfdGVhcmRvd24obnMpO1xuIFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX21hY3NlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX2JwZl91bmluaXQobnMpO1xuQEAgLTExOTUsNiAmIzQzOzExOTksNyBAQCB2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdFJDVV9JTklUX1BPSU5URVIobnMtXHUwMDNlcGVlciwgTlVMTCk7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnMtXHUwMDNlbnNpbV9kZXZfcG9ydCkpIHtcbiYjNDM7XHRcdG5zaW1fdGxzX3RlYXJkb3duKG5zKTtcbiBcdFx0bnNpbV9tYWNzZWNfdGVhcmRvd24obnMpO1xuIFx0XHRuc2ltX2lwc2VjX3RlYXJkb3duKG5zKTtcbiBcdFx0bnNpbV9icGZfdW5pbml0KG5zKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmggYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjU4MmE3NmFjZTlkMzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuQEAgLTU2LDYgJiM0Mzs1NiwyMCBAQCBzdHJ1Y3QgbnNpbV9pcHNlYyB7XG4gXHR1MzIgdHg7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG5zaW1fdGxzIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGNvbm5zO1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcdC8qIHByb3RlY3RzIGNvbm5zIGFuZCB0aGUgY291bnRlcnMgYmVsb3cgKi9cbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpkZmlsZTtcbiYjNDM7XHR1MzIgY291bnQ7XG4mIzQzO1x0dTMyIHR4X2Nvbm47XG4mIzQzO1x0dTMyIHJ4X2Nvbm47XG4mIzQzO1x0YXRvbWljNjRfdCB0eF9wYWNrZXRzO1xuJiM0MztcdGF0b21pYzY0X3QgdHhfYnl0ZXM7XG4mIzQzO1x0YXRvbWljNjRfdCByeF9wYWNrZXRzO1xuJiM0MztcdGF0b21pYzY0X3QgcnhfYnl0ZXM7XG4mIzQzO1x0YXRvbWljNjRfdCByZXN5bmNzO1xuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIE5TSU1fTUFDU0VDX01BWF9TRUNZX0NPVU5UIDNcbiAjZGVmaW5lIE5TSU1fTUFDU0VDX01BWF9SWFNDX0NPVU5UIDFcbiBzdHJ1Y3QgbnNpbV9yeHNjIHtcbkBAIC0xNDEsNiAmIzQzOzE1NSw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xuIFx0Ym9vbCBicGZfbWFwX2FjY2VwdDtcbiBcdHN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjO1xuIFx0c3RydWN0IG5zaW1fbWFjc2VjIG1hY3NlYztcbiYjNDM7XHRzdHJ1Y3QgbnNpbV90bHMgdGxzO1xuIFx0c3RydWN0IG5zaW1fdmxhbiB2bGFuO1xuIFx0c3RydWN0IHtcbiBcdFx0dTMyIGluamVjdF9lcnJvcjtcbkBAIC00MzUsNiAmIzQzOzQ1MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuJiM0Mzt2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuJiM0Mzt2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbiYjNDM7dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiYjNDM7XHRcdCBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbiB2b2lkIG5zaW1fbWFjc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuIHZvaWQgbnNpbV9tYWNzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2OTVmMmUyYmViODBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY1xuQEAgLTAsMCAmIzQzOzEsNDE4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC90bHMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0ZGV2c2ltLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIEVtdWxhdGVkIGtUTFMgb2ZmbG9hZC4gIE5vIGNyeXB0byBpcyBwZXJmb3JtZWQsIHNvIHRoaXMgaXMgb25seSBzZWxmXG4mIzQzOyAqIGNvbnNpc3RlbnQgYmV0d2VlbiB0d28gbmV0ZGV2c2ltIHBvcnRzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNJTV9UTFNfTUFYX0NPTk5cdDMyXG4mIzQzO1xuJiM0MzsvKiBuZXRkZXZfZml4X2ZlYXR1cmVzKCkgZHJvcHMgTkVUSUZfRl9IV19UTFNfUlggdW5sZXNzIHRoZSBkZXZpY2UgYWxzbyBkb2VzXG4mIzQzOyAqIFJYIGNoZWNrc3Vtcywgd2hpY2ggZXZlcnkgb2ZmbG9hZCBjYXBhYmxlIE5JQyBkb2VzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBOU0lNX1RMU19GRUFUVVJFU1x0KE5FVElGX0ZfSFdfVExTX1RYIHwgTkVUSUZfRl9IV19UTFNfUlggfCBcXFxuJiM0MztcdFx0XHRcdCBORVRJRl9GX1JYQ1NVTSlcbiYjNDM7XG4mIzQzO3N0cnVjdCBuc2ltX3Rsc19jb25uIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiYjNDM7XG4mIzQzO1x0LyogSWRlbnRpdHkgYXMgc2VlbiBvbiB0aGUgd2lyZSwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgcG9ydFxuJiM0MztcdCAqIHRoZSBvZmZsb2FkIHdhcyBpbnN0YWxsZWQgb246IGwqIGlzIHRoaXMgc2lkZSwgciogaXMgdGhlIHBlZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9hZGRyIGxhZGRyO1xuJiM0MztcdHN0cnVjdCBpbjZfYWRkciByYWRkcjtcbiYjNDM7XHRfX2JlMTYgbHBvcnQ7XG4mIzQzO1x0X19iZTE2IHJwb3J0O1xuJiM0MztcdHUxNiBmYW1pbHk7XG4mIzQzO1xuJiM0MztcdGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXI7XG4mIzQzO1x0dTMyIHN0YXJ0X3NuO1xuJiM0MztcdHUxNiBjaXBoZXJfdHlwZTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbnNpbV90bHNfdHVwbGUge1xuJiM0MztcdHN0cnVjdCBpbjZfYWRkciBzYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7XG4mIzQzO1x0X19iZTE2IHNwb3J0O1xuJiM0MztcdF9fYmUxNiBkcG9ydDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5zaW1fdGxzX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZ0LVx1MDAzZXNhZGRyKTtcbiYjNDM7XHRcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLVx1MDAzZWRhZGRyLCBcdTAwMjZ0LVx1MDAzZWRhZGRyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwNmgtXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0dC1cdTAwM2VzYWRkciA9IGlwNmgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0XHR0LVx1MDAzZWRhZGRyID0gaXA2aC1cdTAwM2VkYWRkcjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dGggPSB0Y3BfaGRyKHNrYik7XG4mIzQzO1x0dC1cdTAwM2VzcG9ydCA9IHRoLVx1MDAzZXNvdXJjZTtcbiYjNDM7XHR0LVx1MDAzZWRwb3J0ID0gdGgtXHUwMDNlZGVzdDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE9uIFJYIHRoZXJlIGlzIG5vIHNvY2tldCB0byBsb29rIGF0IHlldCwgc28gbWF0Y2ggdGhlIHR1cGxlIGluc3RhbGxlZCBhdFxuJiM0MzsgKiAtXHUwMDNldGxzX2Rldl9hZGQoKSB0aW1lLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzLiAgVGhlIHBhY2tldCBpc1xuJiM0MzsgKiBhcnJpdmluZywgc28gdGhlIHBlZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXMgaXRzIHNvdXJjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjb25uLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpXG4mIzQzO1x0XHRpZiAoY29ubi1cdTAwM2VkaXIgPT0gVExTX09GRkxPQURfQ1RYX0RJUl9SWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjb25uLVx1MDAzZWxwb3J0ID09IHQtXHUwMDNlZHBvcnQgXHUwMDI2XHUwMDI2IGNvbm4tXHUwMDNlcnBvcnQgPT0gdC1cdTAwM2VzcG9ydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Y29ubi1cdTAwM2VsYWRkciwgXHUwMDI2dC1cdTAwM2VkYWRkcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmNvbm4tXHUwMDNlcmFkZHIsIFx1MDAyNnQtXHUwMDNlc2FkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc3RhY2sgbGVhdmVzIGEgdGFnIHNpemVkIHBsYWNlaG9sZGVyIGF0IHRoZSBlbmQgb2YgZXZlcnkgcmVjb3JkIGZvclxuJiM0MzsgKiB0aGUgZGV2aWNlIHRvIHdyaXRlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgaW50by4gIFdlIGRvIG5vdCBlbmNyeXB0LCBzb1xuJiM0MzsgKiBub3RoaW5nIGV2ZXIgZmlsbHMgaXQgaW4sIGFuZCBpdCBjb21lcyBmcm9tIGEgcGFnZSBmcmFnIHRoYXQgd2FzIG5ldmVyXG4mIzQzOyAqIHplcm9lZCAtIGNsZWFyIGl0IHJhdGhlciB0aGFuIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb250byB0aGUgd2lyZS5cbiYjNDM7ICpcbiYjNDM7ICogdGxzX2FwcGVuZF9mcmFnKCkgZWl0aGVyIGdyb3dzIHRoZSBsYXN0IGZyYWcgb3IgYWRkcyBvbmUsIHNvIHRoZSB0YWcgaXNcbiYjNDM7ICogYWx3YXlzIHRoZSB0YWlsIG9mIHRoZSByZWNvcmQmIzM5O3MgbGFzdCBmcmFnLiAgQ2xlYXJpbmcgaXQgdGhlcmUgcmF0aGVyIHRoYW5cbiYjNDM7ICogaW4gdGhlIHNrYiBjb3ZlcnMgZXZlcnkgc2VnbWVudCB0aGUgcmVjb3JkIHdhcyBzcGxpdCBpbnRvLCBhbmQgYW55XG4mIzQzOyAqIHJldHJhbnNtaXQgb2YgdGhlbSwgc2luY2UgdGhleSBhbGwgc2hhcmUgdGhlc2UgcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc190eF96ZXJvX3RhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2tiLVx1MDAzZXNrKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqdHhfY3R4O1xuJiM0MztcdHUzMiBzZXEsIGVuZCwgdGFnX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2ZmO1xuJiM0MztcbiYjNDM7XHRvZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IF9fdGNwX2hkcmxlbih0aCk7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2U9IHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRhZ19zaXplID0gY3R4LVx1MDAzZXByb3RfaW5mby50YWdfc2l6ZTtcbiYjNDM7XHRzZXEgPSBudG9obCh0aC1cdTAwM2VzZXEpO1xuJiM0MztcdGVuZCA9IHNlcSAmIzQzOyBza2ItXHUwMDNlbGVuIC0gb2ZmO1xuJiM0MztcdHR4X2N0eCA9IHRsc19vZmZsb2FkX2N0eF90eChjdHgpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eF9jdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdHdoaWxlIChiZWZvcmUoc2VxLCBlbmQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XG4mIzQzO1x0XHRza2JfZnJhZ190ICpmcmFnO1xuJiM0MztcdFx0dTY0IHJjZF9zbjtcbiYjNDM7XG4mIzQzO1x0XHRyZWNvcmQgPSB0bHNfZ2V0X3JlY29yZCh0eF9jdHgsIHNlcSwgXHUwMDI2cmNkX3NuKTtcbiYjNDM7XHRcdGlmICghcmVjb3JkIHx8IHRsc19yZWNvcmRfaXNfc3RhcnRfbWFya2VyKHJlY29yZCkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGZyYWcgPSBcdTAwMjZyZWNvcmQtXHUwMDNlZnJhZ3NbcmVjb3JkLVx1MDAzZW51bV9mcmFncyAtIDFdO1xuJiM0MztcdFx0bWVtc2V0KHNrYl9mcmFnX2FkZHJlc3MoZnJhZykgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShmcmFnKSAtIHRhZ19zaXplLFxuJiM0MztcdFx0ICAgICAgIDAsIHRhZ19zaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRzZXEgPSByZWNvcmQtXHUwMDNlZW5kX3NlcTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9jdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBlbmNyeXB0aW9uIHRoZSBoYXJkd2FyZSB3b3VsZCBkbyBvbiB0aGUgd2F5IG91dC5cbiYjNDM7ICogVGhlIHN0YWNrIGhhcyBhbHJlYWR5IGZyYW1lZCB0aGUgcmVjb3JkIGFuZCB3ZSBkbyBub3QgZW5jcnlwdCwgc28gdGhlIHRhZ1xuJiM0MzsgKiBpcyBhbGwgdGhhdCBpcyBsZWZ0IHRvIGRlYWwgd2l0aC4gIFRoZSBzb2NrZXQgaXMgcmlnaHQgaGVyZSwgc28gaWRlbnRpZnlcbiYjNDM7ICogdGhlIGNvbm5lY3Rpb24gdGhlIHdheSB0aGUgcmVhbCBkcml2ZXJzIGRvLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRuc2ltX3Rsc190eF96ZXJvX3RhZ3Moc2tiKTtcbiYjNDM7XHRhdG9taWM2NF9pbmMoXHUwMDI2bnMtXHUwMDNldGxzLnR4X3BhY2tldHMpO1xuJiM0MztcdGF0b21pYzY0X2FkZChza2ItXHUwMDNlbGVuLCBcdTAwMjZucy1cdTAwM2V0bHMudHhfYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBkZWNyeXB0aW9uIHRoZSBwZWVyJiMzOTtzIGhhcmR3YXJlIHdvdWxkIGRvLCBzaW5jZSB3ZVxuJiM0MzsgKiBhcmUgYWJvdXQgdG8gaGFuZCB0aGUgc2tiIHRvIGl0cyBzdGFjay4gIFdlIGRvIG5vdCBkZWNyeXB0IGVpdGhlciwgc28gYWxsXG4mIzQzOyAqIHRoYXQgaXMgbmVlZGVkIGlzIHRoZSBmbGFnIHRoYXQgdGVsbHMgdGhlIGtUTFMgY29yZSB0aGUgcGF5bG9hZCBpc1xuJiM0MzsgKiBhbHJlYWR5IHBsYWludGV4dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG5zaW1fdGxzX3J4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5zaW1fdGxzX3R1cGxlIHQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghbnNpbV90bHNfcGFyc2Uoc2tiLCBcdTAwMjZ0KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuc2ltX3Rsc19yeF9vZmZsb2FkZWQobnMsIFx1MDAyNnQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbiYjNDM7XHRhdG9taWM2NF9pbmMoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X3BhY2tldHMpO1xuJiM0MztcdGF0b21pYzY0X2FkZChza2ItXHUwMDNlbGVuLCBcdTAwMjZucy1cdTAwM2V0bHMucnhfYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBuZXRkZXZzaW0gaGFzIG5vIHdpcmU6IG5zaW1fc3RhcnRfeG1pdCgpIGhhbmRzIHRoZSBza2Igc3RyYWlnaHQgdG8gdGhlXG4mIzQzOyAqIHBlZXImIzM5O3MgcmVjZWl2ZSBwYXRoLCBzbyB0aGlzIG9uZSBjYWxsIHNpdGUgc3RhbmRzIGluIGZvciB0aGUgaGFyZHdhcmUgb2ZcbiYjNDM7ICogYm90aCBwb3J0cy4gIEl0IGhhcyB0byBydW4gYmVmb3JlIG5zaW1fZm9yd2FyZF9za2IoKSBtb3ZlcyB0aGUgc2tiIG92ZXIsXG4mIzQzOyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG4mIzQzO1x0XHQgc3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucylcbiYjNDM7e1xuJiM0MztcdC8qIG5zaW1fZG9fcHNwKCkgcmFuIGZpcnN0IGFuZCBtYXkgaGF2ZSB3cmFwcGVkIHRoZSByZWNvcmQgc3RyZWFtLCBzb1xuJiM0MztcdCAqIHRoaXMgaXMgbm8gbG9uZ2VyIGEgcGxhaW4gVExTIG92ZXIgVENQIHBhY2tldC4gIE5vIE5JQyBjaGFpbnMgdGhlXG4mIzQzO1x0ICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bnNpbV90bHNfdHgobnMsIHNrYik7XG4mIzQzO1x0bnNpbV90bHNfcngocGVlcl9ucywgc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuc2ltX3Rsc19kZXZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0ICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24sXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbiYjNDM7XHRcdFx0ICAgIHUzMiBzdGFydF9vZmZsb2FkX3RjcF9zbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogTWlycm9yIHRoZSBjaXBoZXIgc3VwcG9ydCBvZiBhIHR5cGljYWwgb2ZmbG9hZCBjYXBhYmxlIE5JQy4gKi9cbiYjNDM7XHRzd2l0Y2ggKGNyeXB0b19pbmZvLVx1MDAzZWNpcGhlcl90eXBlKSB7XG4mIzQzO1x0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4OlxuJiM0MztcdGNhc2UgVExTX0NJUEhFUl9BRVNfR0NNXzI1NjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjb25uID0ga3phbGxvY19vYmooKmNvbm4pO1xuJiM0MztcdGlmICghY29ubilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRjb25uLVx1MDAzZWxhZGRyID0gc2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyO1xuJiM0MztcdFx0Y29ubi1cdTAwM2VyYWRkciA9IHNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVx1MDAzZXNrX3Jjdl9zYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VsYWRkcik7XG4mIzQzO1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVx1MDAzZXNrX2RhZGRyLCBcdTAwMjZjb25uLVx1MDAzZXJhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29ubi1cdTAwM2VmYW1pbHkgPSBzay1cdTAwM2Vza19mYW1pbHk7XG4mIzQzO1x0Y29ubi1cdTAwM2VscG9ydCA9IGh0b25zKGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtKTtcbiYjNDM7XHRjb25uLVx1MDAzZXJwb3J0ID0gc2stXHUwMDNlc2tfZHBvcnQ7XG4mIzQzO1x0Y29ubi1cdTAwM2VkaXIgPSBkaXJlY3Rpb247XG4mIzQzO1x0Y29ubi1cdTAwM2VzdGFydF9zbiA9IHN0YXJ0X29mZmxvYWRfdGNwX3NuO1xuJiM0MztcdGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUgPSBjcnlwdG9faW5mby1cdTAwM2VjaXBoZXJfdHlwZTtcbiYjNDM7XHRjb25uLVx1MDAzZXRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1x0aWYgKG5zLVx1MDAzZXRscy5jb3VudCBcdTAwM2U9IE5TSU1fVExTX01BWF9DT05OKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QsIFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucyk7XG4mIzQzO1x0bnMtXHUwMDNldGxzLmNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG4mIzQzO1x0XHRucy1cdTAwM2V0bHMudHhfY29ubiYjNDM7JiM0Mzs7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bnMtXHUwMDNldGxzLnJ4X2Nvbm4mIzQzOyYjNDM7O1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtmcmVlKGNvbm4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc19kZXZfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuJiM0MztcdFx0XHQgICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbiYjNDM7XHRcdGlmIChjb25uLVx1MDAzZXRsc19jdHggIT0gdGxzX2N0eCB8fCBjb25uLVx1MDAzZWRpciAhPSBkaXJlY3Rpb24pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0bnMtXHUwMDNldGxzLmNvdW50LS07XG4mIzQzO1x0XHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG4mIzQzO1x0XHRcdG5zLVx1MDAzZXRscy50eF9jb25uLS07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG5zLVx1MDAzZXRscy5yeF9jb25uLS07XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1xuJiM0MztcdFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1RMUyAlcyBjb250ZXh0IG5vdCBmb3VuZCBvbiBkZWxcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/IFwmIzM0O3R4XCYjMzQ7IDogXCYjMzQ7cnhcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBOb3RoaW5nIGlzIGV2ZXIgb3V0IG9mIHN5bmMgaGVyZTogdGhlIGVtdWxhdGlvbiBkb2VzIG5vdCBkZWNyeXB0LCBzbyBpdFxuJiM0MzsgKiBuZXZlciBsb3NlcyB0aGUgcmVjb3JkIGJvdW5kYXJpZXMgYW5kIG5ldmVyIGFza3MgZm9yIGEgcmVzeW5jLiAgVGhlIGNvcmVcbiYjNDM7ICogY2FuIHN0aWxsIGNhbGwgaW4gb24gdGhlIFJYIHBhdGgsIHNvIGFjY291bnQgZm9yIGl0IGFuZCBtb3ZlIG9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBuc2ltX3Rsc19kZXZfcmVzeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0ICAgICAgIHUzMiBzZXEsIHU4ICpyY2Rfc24sXG4mIzQzO1x0XHRcdCAgICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRhdG9taWM2NF9pbmMoXHUwMDI2bnMtXHUwMDNldGxzLnJlc3luY3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcbiYjNDM7XHQudGxzX2Rldl9hZGRcdD0gbnNpbV90bHNfZGV2X2FkZCxcbiYjNDM7XHQudGxzX2Rldl9kZWxcdD0gbnNpbV90bHNfZGV2X2RlbCxcbiYjNDM7XHQudGxzX2Rldl9yZXN5bmNcdD0gbnNpbV90bHNfZGV2X3Jlc3luYyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG5zaW1fdGxzX2RiZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuJiM0MztcdFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XG4mIzQzO1x0c2l6ZV90IGJ1ZnNpemU7XG4mIzQzO1x0Y2hhciAqYnVmLCAqcDtcbiYjNDM7XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHQvKiBUd28gZnVsbCBJUHY2IGFkZHJlc3NlcyBhbmQgcG9ydHMgZml0IGluIDE2MCBieXRlcyBhIGxpbmUuICovXG4mIzQzO1x0YnVmc2l6ZSA9IChOU0lNX1RMU19NQVhfQ09OTiAqIDE2MCkgJiM0MzsgMjAwO1xuJiM0MztcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFidWYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cCA9IGJ1ZjtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtjb25uIGNvdW50PSV1IHR4PSV1IHJ4PSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5zLVx1MDAzZXRscy5jb3VudCwgbnMtXHUwMDNldGxzLnR4X2Nvbm4sIG5zLVx1MDAzZXRscy5yeF9jb25uKTtcbiYjNDM7XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDt0eF9wYWNrZXRzPSVsbHUgdHhfYnl0ZXM9JWxsdSByeF9wYWNrZXRzPSVsbHUgcnhfYnl0ZXM9JWxsdSByZXN5bmNzPSVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgYXRvbWljNjRfcmVhZChcdTAwMjZucy1cdTAwM2V0bHMudHhfcGFja2V0cyksXG4mIzQzO1x0XHQgICAgICAgYXRvbWljNjRfcmVhZChcdTAwMjZucy1cdTAwM2V0bHMudHhfYnl0ZXMpLFxuJiM0MztcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X3BhY2tldHMpLFxuJiM0MztcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X2J5dGVzKSxcbiYjNDM7XHRcdCAgICAgICBhdG9taWM2NF9yZWFkKFx1MDAyNm5zLVx1MDAzZXRscy5yZXN5bmNzKSk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAoY29ubi1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4mIzQzO1x0XHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslcyBbJXBJNmNdOiV1IC1cdTAwM2UgWyVwSTZjXToldSBjaXBoZXI9JXUgc249JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggP1xuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDt0eFwmIzM0OyA6IFwmIzM0O3J4XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZWxhZGRyLCBudG9ocyhjb25uLVx1MDAzZWxwb3J0KSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2Y29ubi1cdTAwM2VyYWRkciwgbnRvaHMoY29ubi1cdTAwM2VycG9ydCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXHUwMDNlc3RhcnRfc24pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXMgJXBJNDoldSAtXHUwMDNlICVwSTQ6JXUgY2lwaGVyPSV1IHNuPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25uLVx1MDAzZWRpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYID9cbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7dHhcJiMzNDsgOiBcJiMzNDtyeFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2Y29ubi1cdTAwM2VsYWRkci5zNl9hZGRyMzJbM10sXG4mIzQzO1x0XHRcdFx0ICAgICAgIG50b2hzKGNvbm4tXHUwMDNlbHBvcnQpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZXJhZGRyLnM2X2FkZHIzMlszXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgbnRvaHMoY29ubi1cdTAwM2VycG9ydCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXHUwMDNlc3RhcnRfc24pO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fdGxzX2RiZ19mb3BzID0ge1xuJiM0MztcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4mIzQzO1x0LnJlYWQgPSBuc2ltX3Rsc19kYmdfcmVhZCxcbiYjNDM7XHQubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssXG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4mIzQzO3tcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZXRsc2Rldl9vcHMgPSBcdTAwMjZuc2ltX3Rsc2Rldl9vcHM7XG4mIzQzO1x0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xuJiM0MztcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcbiYjNDM7XG4mIzQzO1x0bnMtXHUwMDNldGxzLmRmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0bHNcJiMzNDssIDA0MDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgbnMtXHUwMDNlbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLCBucyxcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZuc2ltX3Rsc19kYmdfZm9wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubiwgKnRtcDtcbiYjNDM7XHR1MzIgbGVmdDtcbiYjNDM7XG4mIzQzO1x0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVx1MDAzZXRscy5kZmlsZSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1x0bGVmdCA9IG5zLVx1MDAzZXRscy5jb3VudDtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgdG1wLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbiYjNDM7XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XG4mIzQzO1x0fVxuJiM0MztcdG5zLVx1MDAzZXRscy5jb3VudCA9IDA7XG4mIzQzO1x0bnMtXHUwMDNldGxzLnR4X2Nvbm4gPSAwO1xuJiM0MztcdG5zLVx1MDAzZXRscy5yeF9jb25uID0gMDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChsZWZ0KVxuJiM0MztcdFx0bmV0ZGV2X2Vycihucy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O3RlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGxlZnQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlXG5AQCAtMCwwICYjNDM7MSwyIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0Mzt0bHNfb2ZmbG9hZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuaW5kZXggOTgwOGMyZmJhZTllOC4uNWJlYjRlZDY0ZWI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXG5AQCAtMSw1ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7IE9SIE1JVFxuIFxuJiM0MztDRkxBR1MgJiM0Mzs9ICQoS0hEUl9JTkNMVURFUylcbiYjNDM7XG4gVEVTVF9QUk9HUyA6PSBcXFxuIFx0ZGV2bGluay5zaCBcXFxuIFx0ZGV2bGlua19pbl9uZXRucy5zaCBcXFxuQEAgLTE1LDkgJiM0MzsxNywxNCBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRwZWVyLnNoIFxcXG4gXHRwc2FtcGxlLnNoIFxcXG4gXHR0Yy1tcS12aXNpYmlsaXR5LnNoIFxcXG4mIzQzO1x0dGxzLnNoIFxcXG4gXHR1ZHBfdHVubmVsX25pYy5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiYjNDM7VEVTVF9HRU5fRklMRVMgOj0gXFxcbiYjNDM7XHR0bHNfb2ZmbG9hZFxuJiM0MzsjIGVuZCBvZiBURVNUX0dFTl9GSUxFU1xuJiM0MztcbiBURVNUX0ZJTEVTIDo9IFxcXG4gXHRldGh0b29sLWNvbW1vbi5zaFxuICMgZW5kIG9mIFRFU1RfRklMRVNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM5OWUyYzRkMzgyZGZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2hcbkBAIC0wLDAgJiM0MzsxLDI3MSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIEV4ZXJjaXNlIG5ldGRldnNpbSYjMzk7cyBlbXVsYXRlZCBrVExTIGRldmljZSBvZmZsb2FkIG92ZXIgYSBsaW5rZWRcbiYjNDM7IyBuZXRkZXZzaW0gcGFpciwgb25lIHBvcnQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlLlxuJiM0MzsjXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE1NCAjIGtzZnRfc2tpcCBjb21lcyBmcm9tIGxpYi5zaFxuJiM0MztcbiYjNDM7bGliX2Rpcj0kKGRpcm5hbWUgXCYjMzQ7JDBcJiMzNDspXG4mIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li8uLi8uLi8uLi9uZXQvbGliLnNoXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuJiM0Mztzb3VyY2UgXCYjMzQ7JGxpYl9kaXJcJiMzNDsvLi4vLi4vLi4vbmV0L2xpYi5zaFxuJiM0MztcbiYjNDM7TlNJTV9ERVZfMV9JRD0kKCgyNTYgJiM0MzsgUkFORE9NICUgMjU2KSlcbiYjNDM7TlNJTV9ERVZfMV9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzFfSURcbiYjNDM7TlNJTV9ERVZfMl9JRD0kKCg1MTIgJiM0MzsgUkFORE9NICUgMjU2KSlcbiYjNDM7TlNJTV9ERVZfMl9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzJfSURcbiYjNDM7XG4mIzQzO05TSU1fREVWX1NZU19ORVc9L3N5cy9idXMvbmV0ZGV2c2ltL25ld19kZXZpY2VcbiYjNDM7TlNJTV9ERVZfU1lTX0RFTD0vc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVxuJiM0MztOU0lNX0RFVl9TWVNfTElOSz0vc3lzL2J1cy9uZXRkZXZzaW0vbGlua19kZXZpY2VcbiYjNDM7XG4mIzQzO0RFQlVHRlM9L3N5cy9rZXJuZWwvZGVidWcvbmV0ZGV2c2ltXG4mIzQzO05TSU1fREVWXzFfVExTPSRERUJVR0ZTL25ldGRldnNpbSROU0lNX0RFVl8xX0lEL3BvcnRzLzAvdGxzXG4mIzQzO05TSU1fREVWXzJfVExTPSRERUJVR0ZTL25ldGRldnNpbSROU0lNX0RFVl8yX0lEL3BvcnRzLzAvdGxzXG4mIzQzO1xuJiM0MztTUlZfSVA9MTkyLjE2OC4xMy4xXG4mIzQzO0NMSV9JUD0xOTIuMTY4LjEzLjJcbiYjNDM7UE9SVD00NDMzXG4mIzQzO1xuJiM0MztTWU5DRElSPVxuJiM0MztCSU49JGxpYl9kaXIvdGxzX29mZmxvYWRcbiYjNDM7XG4mIzQzO251bV9wYXNzPTBcbiYjNDM7bnVtX2ZhaWw9MFxuJiM0MztcbiYjNDM7Y2hlY2soKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbXNnPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgcmV0PVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIFsgXCYjMzQ7JHJldFwmIzM0OyAtZXEgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O1BBU1M6ICRtc2dcJiMzNDtcbiYjNDM7XHRcdG51bV9wYXNzPSQoKG51bV9wYXNzICYjNDM7IDEpKVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG1zZ1wmIzM0O1xuJiM0MztcdFx0bnVtX2ZhaWw9JCgobnVtX2ZhaWwgJiM0MzsgMSkpXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3LFNDMjMyOSAjIGludm9rZWQgZnJvbSB0aGUgRVhJVCB0cmFwXG4mIzQzO2NsZWFudXAoKVxuJiM0Mzt7XG4mIzQzO1x0aXAgbmV0bnMgZGVsIG5zY2wgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBuc3N2IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRlY2hvIFwmIzM0OyROU0lNX0RFVl8yX0lEXCYjMzQ7IFx1MDAzZSBcJiMzNDskTlNJTV9ERVZfU1lTX0RFTFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBcJiMzNDskTlNJTV9ERVZfMV9JRFwmIzM0OyBcdTAwM2UgXCYjMzQ7JE5TSU1fREVWX1NZU19ERUxcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFsgLW4gXCYjMzQ7JFNZTkNESVJcJiMzNDsgXSBcdTAwMjZcdTAwMjYgcm0gLXJmIFwmIzM0OyRTWU5DRElSXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwKClcbiYjNDM7e1xuJiM0MztcdHNldCAtZVxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyROU0lNX0RFVl8xX0lEXCYjMzQ7IFx1MDAzZSBcJiMzNDskTlNJTV9ERVZfU1lTX05FV1wmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7JE5TSU1fREVWXzJfSURcJiMzNDsgXHUwMDNlIFwmIzM0OyROU0lNX0RFVl9TWVNfTkVXXCYjMzQ7XG4mIzQzO1x0dWRldmFkbSBzZXR0bGUgMlx1MDAzZS9kZXYvbnVsbCB8fCBzbGVlcCAxXG4mIzQzO1xuJiM0MztcdE5TSU1fREVWXzFfTkFNRT0kKGZpbmQgXCYjMzQ7JE5TSU1fREVWXzFfU1lTXCYjMzQ7L25ldCAtbWF4ZGVwdGggMSAtdHlwZSBkICEgXFxcbiYjNDM7XHRcdC1wYXRoIFwmIzM0OyROU0lNX0RFVl8xX1NZU1wmIzM0Oy9uZXQgLWV4ZWMgYmFzZW5hbWUge30gXFw7KVxuJiM0MztcdE5TSU1fREVWXzJfTkFNRT0kKGZpbmQgXCYjMzQ7JE5TSU1fREVWXzJfU1lTXCYjMzQ7L25ldCAtbWF4ZGVwdGggMSAtdHlwZSBkICEgXFxcbiYjNDM7XHRcdC1wYXRoIFwmIzM0OyROU0lNX0RFVl8yX1NZU1wmIzM0Oy9uZXQgLWV4ZWMgYmFzZW5hbWUge30gXFw7KVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBhZGQgbnNzdlxuJiM0MztcdGlwIG5ldG5zIGFkZCBuc2NsXG4mIzQzO1xuJiM0MztcdGlwIGxpbmsgc2V0IFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgbmV0bnMgbnNzdlxuJiM0MztcdGlwIGxpbmsgc2V0IFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgbmV0bnMgbnNjbFxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIG5zc3YgaXAgYWRkciBhZGQgXCYjMzQ7JFNSVl9JUC8yNFwmIzM0OyBkZXYgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0O1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBhZGRyIGFkZCBcJiMzNDskQ0xJX0lQLzI0XCYjMzQ7IGRldiBcJiMzNDskTlNJTV9ERVZfMl9OQU1FXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBsaW5rIHNldCBkZXYgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0OyB1cFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBsaW5rIHNldCBkZXYgXCYjMzQ7JE5TSU1fREVWXzJfTkFNRVwmIzM0OyB1cFxuJiM0MztcbiYjNDM7XHROU0lNX0RFVl8xX0ZEPSQoKDI1NiAmIzQzOyBSQU5ET00gJSAyNTYpKVxuJiM0MztcdGV4ZWMge05TSU1fREVWXzFfRkR9XHUwMDNjL3Zhci9ydW4vbmV0bnMvbnNzdlxuJiM0MztcdE5TSU1fREVWXzFfSUZJRFg9JChpcCBuZXRucyBleGVjIG5zc3YgXFxcbiYjNDM7XHRcdGNhdCAvc3lzL2NsYXNzL25ldC9cJiMzNDskTlNJTV9ERVZfMV9OQU1FXCYjMzQ7L2lmaW5kZXgpXG4mIzQzO1xuJiM0MztcdE5TSU1fREVWXzJfRkQ9JCgoMjU2ICYjNDM7IFJBTkRPTSAlIDI1NikpXG4mIzQzO1x0ZXhlYyB7TlNJTV9ERVZfMl9GRH1cdTAwM2MvdmFyL3J1bi9uZXRucy9uc2NsXG4mIzQzO1x0TlNJTV9ERVZfMl9JRklEWD0kKGlwIG5ldG5zIGV4ZWMgbnNjbCBcXFxuJiM0MztcdFx0Y2F0IC9zeXMvY2xhc3MvbmV0L1wmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsvaWZpbmRleClcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDskTlNJTV9ERVZfMV9GRDokTlNJTV9ERVZfMV9JRklEWCAkTlNJTV9ERVZfMl9GRDokTlNJTV9ERVZfMl9JRklEWFwmIzM0OyBcXFxuJiM0MztcdFx0XHUwMDNlIFwmIzM0OyROU0lNX0RFVl9TWVNfTElOS1wmIzM0O1xuJiM0MztcbiYjNDM7XHRTWU5DRElSPSQobWt0ZW1wIC1kKVxuJiM0MztcdHNldCAmIzQzO2VcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZmVhdHVyZSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuZXRucz1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIGRldj1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXQ9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbmV0bnNcJiMzNDsgZXRodG9vbCAtayBcJiMzNDskZGV2XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfCBcXFxuJiM0MztcdFx0c2VkIC1uIFwmIzM0O3MvXiRmZWF0OiBcXChbYS16XSpcXCkuKi9cXDEvcFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztkYmdfZmllbGQoKVxuJiM0Mzt7XG4mIzQzO1x0c2VkIC1uIFwmIzM0O3MvLipcXFx1MDAzYyQyPVxcKFswLTldKlxcKS4qL1xcMS9wXCYjMzQ7IFwmIzM0OyQxXCYjMzQ7IHwgaGVhZCAtMVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0bHNfc3RhdCgpXG4mIzQzO3tcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyQxXCYjMzQ7IGNhdCAvcHJvYy9uZXQvdGxzX3N0YXQgfCBcXFxuJiM0MztcdFx0c2VkIC1uIFwmIzM0O3MvXiQyIFxcKFswLTldKlxcKS9cXDEvcFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIEJvdGggZW5kcyBwYXJrIG9uY2UgdGhlaXIgb2ZmbG9hZCBpcyBpbnN0YWxsZWQgYW5kIGJlZm9yZSBhbnkgZGF0YSBpc1xuJiM0MzsjIHNlbnQsIHNvIHRoZSBkcml2ZXImIzM5O3MgY29udGV4dCBjb3VudCBjYW4gYmUgc2FtcGxlZCB3aXRob3V0IHJhY2luZyB0aGVcbiYjNDM7IyB0cmFuc2Zlci4gIFBhc3MgXCYjMzQ7bm9zYW1wbGVcJiMzNDsgd2hlbiB0aGUgb2ZmbG9hZCBpcyBleHBlY3RlZCB0byBiZSByZWZ1c2VkLFxuJiM0MzsjIHNpbmNlIHRoZW4gbmVpdGhlciBlbmQgZXZlciByZWFjaGVzIHRoZSBiYXJyaWVyLlxuJiM0MztydW5fcGFpcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBzYW1wbGU9XCYjMzQ7JHsxOi1zYW1wbGV9XCYjMzQ7XG4mIzQzO1x0bG9jYWwgc3J2X3JjIGNsaV9yYyB3YWl0ZWQ9MFxuJiM0MztcbiYjNDM7XHRybSAtZiBcJiMzNDskU1lOQ0RJUlwmIzM0Oy8qLnJlYWR5IFwmIzM0OyRTWU5DRElSXCYjMzQ7L2dvXG4mIzQzO1x0Q09OTlNfMT0wXG4mIzQzO1x0Q09OTlNfMj0wXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNzdiBcJiMzNDskQklOXCYjMzQ7IHNlcnZlciBcJiMzNDskU1JWX0lQXCYjMzQ7IFwmIzM0OyRQT1JUXCYjMzQ7IFwmIzM0OyRTWU5DRElSXCYjMzQ7IFx1MDAyNlxuJiM0MztcdGxvY2FsIHNydl9waWQ9JCFcbiYjNDM7XHRpcCBuZXRucyBleGVjIG5zY2wgXCYjMzQ7JEJJTlwmIzM0OyBjbGllbnQgXCYjMzQ7JFNSVl9JUFwmIzM0OyBcJiMzNDskUE9SVFwmIzM0OyBcJiMzNDskU1lOQ0RJUlwmIzM0OyBcdTAwMjZcbiYjNDM7XHRsb2NhbCBjbGlfcGlkPSQhXG4mIzQzO1xuJiM0MztcdGlmIFsgXCYjMzQ7JHNhbXBsZVwmIzM0OyA9IFwmIzM0O3NhbXBsZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHR3aGlsZSBbICEgLWUgXCYjMzQ7JFNZTkNESVIvc2VydmVyLnJlYWR5XCYjMzQ7IF0gfHxcbiYjNDM7XHRcdCAgICAgIFsgISAtZSBcJiMzNDskU1lOQ0RJUi9jbGllbnQucmVhZHlcJiMzNDsgXTsgZG9cbiYjNDM7XHRcdFx0WyBcJiMzNDskd2FpdGVkXCYjMzQ7IC1nZSAyMDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdFx0c2xlZXAgMC4wNVxuJiM0MztcdFx0XHR3YWl0ZWQ9JCgod2FpdGVkICYjNDM7IDEpKVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0Q09OTlNfMT0kKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMV9UTFNcJiMzNDsgY291bnQpXG4mIzQzO1x0XHRDT05OU18yPSQoZGJnX2ZpZWxkIFwmIzM0OyROU0lNX0RFVl8yX1RMU1wmIzM0OyBjb3VudClcbiYjNDM7XHRcdDogXCYjMzQ7JHtDT05OU18xOj0wfVwmIzM0O1xuJiM0MztcdFx0OiBcJiMzNDske0NPTk5TXzI6PTB9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHR0b3VjaCBcJiMzNDskU1lOQ0RJUi9nb1wmIzM0O1xuJiM0MztcbiYjNDM7XHR3YWl0IFwmIzM0OyRzcnZfcGlkXCYjMzQ7OyBzcnZfcmM9JD9cbiYjNDM7XHR3YWl0IFwmIzM0OyRjbGlfcGlkXCYjMzQ7OyBjbGlfcmM9JD9cbiYjNDM7XG4mIzQzO1x0WyBcJiMzNDskc3J2X3JjXCYjMzQ7IC1lcSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGNsaV9yY1wmIzM0OyAtZXEgMCBdXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMjI1xuJiM0MzsjIyMgQ29kZSBzdGFydFxuJiM0MzsjIyNcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JChpZCAtdSlcJiMzNDsgLW5lIDAgXTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogbmVlZCByb290XCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiAhIGNvbW1hbmQgLXYgZXRodG9vbCBcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGV0aHRvb2wgbm90IGZvdW5kXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbICEgLXggXCYjMzQ7JEJJTlwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiAkQklOIG5vdCBidWlsdFwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7bW9kcHJvYmUgbmV0ZGV2c2ltIDJcdTAwM2UvZGV2L251bGxcbiYjNDM7aWYgWyAhIC1kIC9zeXMvYnVzL25ldGRldnNpbSBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBuZXRkZXZzaW0gbm90IGF2YWlsYWJsZVwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7bW9kcHJvYmUgdGxzIDJcdTAwM2UvZGV2L251bGxcbiYjNDM7aWYgWyAhIC1lIC9wcm9jL25ldC90bHNfc3RhdCBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBrZXJuZWwgVExTIG5vdCBhdmFpbGFibGVcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO3NldHVwXG4mIzQzO1xuJiM0MzsjIFRoZSBvZmZsb2FkIGhhcyB0byBiZSBhZHZlcnRpc2VkLCBhbmQgb24gYnkgZGVmYXVsdCBsaWtlIHRoZSBvdGhlclxuJiM0MzsjIG5ldGRldnNpbSBjcnlwdG8gb2ZmbG9hZHMuXG4mIzQzO2ZvciBmIGluIHRscy1ody10eC1vZmZsb2FkIHRscy1ody1yeC1vZmZsb2FkOyBkb1xuJiM0MztcdFsgXCYjMzQ7JChmZWF0dXJlIG5zc3YgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0OyBcJiMzNDskZlwmIzM0OylcJiMzNDsgPSBcJiMzNDtvblwmIzM0OyBdXG4mIzQzO1x0Y2hlY2sgXCYjMzQ7JGYgYWR2ZXJ0aXNlZCBhbmQgb24gYnkgZGVmYXVsdFwmIzM0OyAkP1xuJiM0Mztkb25lXG4mIzQzO1xuJiM0MztbIC1lIFwmIzM0OyROU0lNX0RFVl8xX1RMU1wmIzM0OyBdXG4mIzQzO2NoZWNrIFwmIzM0O3Blci1wb3J0IGRlYnVnZnMgdGxzIGZpbGUgZXhpc3RzXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIE1haW4gZGF0YSBwYXRoIHJ1bi5cbiYjNDM7cnVuX3BhaXJcbiYjNDM7Y2hlY2sgXCYjMzQ7b2ZmbG9hZGVkIFRMUyBkYXRhIHRyYW5zZmVyXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIFNhbXBsZWQgYXQgdGhlIGJhcnJpZXIsIHNvIGVhY2ggcG9ydCBtdXN0IGJlIGhvbGRpbmcgZXhhY3RseSB0aGUgVFggYW5kXG4mIzQzOyMgdGhlIFJYIGNvbnRleHQgb2YgaXRzIG93biBzb2NrZXQuXG4mIzQzO1sgXCYjMzQ7JENPTk5TXzFcJiMzNDsgLWVxIDIgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskQ09OTlNfMlwmIzM0OyAtZXEgMiBdXG4mIzQzO2NoZWNrIFwmIzM0O3R4IGFuZCByeCBjb250ZXh0cyBpbnN0YWxsZWQgb24gYm90aCBwb3J0c1wmIzM0OyAkP1xuJiM0MztcbiYjNDM7IyBCb3RoIGVuZHMgbXVzdCBoYXZlIGdvbmUgdGhyb3VnaCB0aGUgZGV2aWNlIHBhdGgsIG5vdCB0aGUgU1cgZmFsbGJhY2suXG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1J4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1R4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKVwmIzM0OyAtZ2UgMSBdXG4mIzQzO2NoZWNrIFwmIzM0O2JvdGggZW5kcyB1c2VkIHRoZSBkZXZpY2UgcGF0aFwmIzM0OyAkP1xuJiM0MztcbiYjNDM7WyBcJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzVHhTdylcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKHRsc19zdGF0IG5zY2wgVGxzVHhTdylcJiMzNDsgLWVxIDAgXVxuJiM0MztjaGVjayBcJiMzNDtubyBzaWxlbnQgZmFsbGJhY2sgdG8gdGhlIHNvZnR3YXJlIHBhdGhcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc0RlY3J5cHRFcnJvcilcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRbIFwmIzM0OyQodGxzX3N0YXQgbnNjbCBUbHNEZWNyeXB0RXJyb3IpXCYjMzQ7IC1lcSAwIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7bm8gZGVjcnlwdCBlcnJvcnNcJiMzNDsgJD9cbiYjNDM7XG4mIzQzOyMgVGhlIGRyaXZlciBtdXN0IGhhdmUgc2VlbiB0aGUgcmVjb3JkcyBnbyBieSBpbiBib3RoIGRpcmVjdGlvbnMuXG4mIzQzO1sgXCYjMzQ7JChkYmdfZmllbGQgXCYjMzQ7JE5TSU1fREVWXzFfVExTXCYjMzQ7IHR4X3BhY2tldHMpXCYjMzQ7IC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0WyBcJiMzNDskKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMV9UTFNcJiMzNDsgcnhfcGFja2V0cylcJiMzNDsgLWdlIDEgXSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRbIFwmIzM0OyQoZGJnX2ZpZWxkIFwmIzM0OyROU0lNX0RFVl8yX1RMU1wmIzM0OyB0eF9wYWNrZXRzKVwmIzM0OyAtZ2UgMSBdIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFsgXCYjMzQ7JChkYmdfZmllbGQgXCYjMzQ7JE5TSU1fREVWXzJfVExTXCYjMzQ7IHJ4X3BhY2tldHMpXCYjMzQ7IC1nZSAxIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7ZHJpdmVyIGNvdW50ZWQgb2ZmbG9hZGVkIHBhY2tldHMgYm90aCB3YXlzXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIFNvY2tldHMgYXJlIGNsb3NlZCBieSBub3csIHNvIGV2ZXJ5IGNvbnRleHQgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gYmFjay5cbiYjNDM7WyBcJiMzNDskKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMV9UTFNcJiMzNDsgY291bnQpXCYjMzQ7IC1lcSAwIF0gXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0WyBcJiMzNDskKGRiZ19maWVsZCBcJiMzNDskTlNJTV9ERVZfMl9UTFNcJiMzNDsgY291bnQpXCYjMzQ7IC1lcSAwIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7YWxsIG9mZmxvYWQgY29udGV4dHMgcmVsZWFzZWQgb24gY2xvc2VcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc0N1cnJUeERldmljZSlcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRbIFwmIzM0OyQodGxzX3N0YXQgbnNzdiBUbHNDdXJyUnhEZXZpY2UpXCYjMzQ7IC1lcSAwIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7bm8gZGV2aWNlIGNvbnRleHRzIGxlZnQgYmVoaW5kXCYjMzQ7ICQ/XG4mIzQzO1xuJiM0MzsjIFR1cm5pbmcgdGhlIGZlYXR1cmUgb2ZmIGhhcyB0byBtYWtlIHRoZSBvZmZsb2FkIHJlZnVzZSB0aGUgY29ubmVjdGlvbjtcbiYjNDM7IyB0aGUgdGVzdCBiaW5hcnkgaW5zaXN0cyBvbiB0aGUgZGV2aWNlIHBhdGgsIHNvIGl0IG11c3Qgbm93IGZhaWwuXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmXG4mIzQzO1xuJiM0MztydW5fcGFpciBub3NhbXBsZVxuJiM0MztyYz0kP1xuJiM0MztbIFwmIzM0OyRyY1wmIzM0OyAtbmUgMCBdXG4mIzQzO2NoZWNrIFwmIzM0O29mZmxvYWQgZGVjbGluZWQgb25jZSB0aGUgZmVhdHVyZSBpcyBvZmZcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO1sgXCYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4U3cpXCYjMzQ7IC1nZSAxIF1cbiYjNDM7Y2hlY2sgXCYjMzQ7c29mdHdhcmUgcGF0aCB1c2VkIHdoZW4gb2ZmbG9hZCBpcyBvZmZcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8xX05BTUVcJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb25cbiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXCYjMzQ7JE5TSU1fREVWXzFfTkFNRVwmIzM0OyB0bHMtaHctcngtb2ZmbG9hZCBvblxuJiM0MztpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcJiMzNDskTlNJTV9ERVZfMl9OQU1FXCYjMzQ7IHRscy1ody10eC1vZmZsb2FkIG9uXG4mIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwmIzM0OyROU0lNX0RFVl8yX05BTUVcJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb25cbiYjNDM7XG4mIzQzO3J1bl9wYWlyXG4mIzQzO2NoZWNrIFwmIzM0O29mZmxvYWQgd29ya3MgYWdhaW4gYWZ0ZXIgcmUtZW5hYmxpbmdcJiMzNDsgJD9cbiYjNDM7XG4mIzQzO2VjaG9cbiYjNDM7ZWNobyBcJiMzNDtwYXNzZWQ6ICRudW1fcGFzcyBmYWlsZWQ6ICRudW1fZmFpbFwmIzM0O1xuJiM0MztbIFwmIzM0OyRudW1fZmFpbFwmIzM0OyAtZXEgMCBdIFx1MDAyNlx1MDAyNiBleGl0IDBcbiYjNDM7ZXhpdCAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rsc19vZmZsb2FkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmI0YmZjZDRmNDRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHNfb2ZmbG9hZC5jXG5AQCAtMCwwICYjNDM7MSw0OTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICoga1RMUyBkZXZpY2Ugb2ZmbG9hZCBkYXRhIHBhdGggZXhlcmNpc2UsIGRyaXZlbiBieSB0bHMuc2guXG4mIzQzOyAqXG4mIzQzOyAqIE9uZSBpbnN0YW5jZSBydW5zIGFzIHRoZSBzZXJ2ZXIgYW5kIG9uZSBhcyB0aGUgY2xpZW50LCBlYWNoIGluIGl0cyBvd25cbiYjNDM7ICogbmV0d29yayBuYW1lc3BhY2UsIGNvbm5lY3RlZCBiYWNrIHRvIGJhY2sgYnkgYSBsaW5rZWQgbmV0ZGV2c2ltIHBhaXIuXG4mIzQzOyAqIEJvdGggZW5kcyBlbmFibGUga1RMUyBhbmQgcmVseSBvbiBuZXRkZXZzaW0mIzM5O3MgZW11bGF0ZWQgVExTIG9mZmxvYWQsIHNvXG4mIzQzOyAqIGV2ZXJ5IHJlY29yZCB0cmF2ZWxzIHRocm91Z2ggbmV0L3Rscy90bHNfZGV2aWNlLmMgcmF0aGVyIHRoYW4gdGhlXG4mIzQzOyAqIHNvZnR3YXJlIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB0d28gcHJvY2Vzc2VzIHJlbmRlenZvdXMgdGhyb3VnaCBhIHNoYXJlZCBkaXJlY3Rvcnkgc28gdGhhdCBuZWl0aGVyXG4mIzQzOyAqIHNpZGUgc2VuZHMgYmVmb3JlIHRoZSBvdGhlciBoYXMgaW5zdGFsbGVkIGl0cyBSWCBvZmZsb2FkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZuZGVmIFNPTF9UTFNcbiYjNDM7I2RlZmluZSBTT0xfVExTXHRcdFx0MjgyXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBUQ1BfVUxQXG4mIzQzOyNkZWZpbmUgVENQX1VMUFx0XHRcdDMxXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBCVUxLX0xFTlx0XHQoMjAwICogMTAyNClcbiYjNDM7I2RlZmluZSBNT1JFX0ZSQUdTXHRcdDY0XG4mIzQzOyNkZWZpbmUgU1BMSUNFX0ZSQUdfTEVOXHRcdDQwOTZcbiYjNDM7I2RlZmluZSBTUExJQ0VfRlJBR1NcdFx0OFxuJiM0MztcbiYjNDM7LyogVExTX01JTl9SRUNPUkRfU0laRV9MSU0gYW5kIFRMU19NQVhfUEFZTE9BRF9TSVpFLCB3aGljaCBhcmUgbm90IHVhcGkuICovXG4mIzQzOyNkZWZpbmUgUkVDX0xJTV9NSU5cdFx0NjRcbiYjNDM7I2RlZmluZSBSRUNfTElNX01BWFx0XHQxNjM4NFxuJiM0MztcbiYjNDM7I2RlZmluZSBTTUFMTF9SRUNTXHRcdDEwMFxuJiM0MzsjZGVmaW5lIFNNQUxMX0xFTlx0XHQoUkVDX0xJTV9NSU4gKiBTTUFMTF9SRUNTKVxuJiM0MztcbiYjNDM7I2RlZmluZSBTWU5DX1RJTUVPVVRfTVNcdFx0MjAwMDBcbiYjNDM7I2RlZmluZSBDT05ORUNUX1RJTUVPVVRfTVNcdDIwMDAwXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcm9sZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICp3aGF0KVxuJiM0Mzt7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyVzOiAlczogJXNcXG5cJiMzNDssIHJvbGUsIHdoYXQsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0ZXhpdCgxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZmFpbChjb25zdCBjaGFyICpmbXQsIC4uLilcbiYjNDM7e1xuJiM0MztcdHZhX2xpc3QgYXA7XG4mIzQzO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDslczogXCYjMzQ7LCByb2xlKTtcbiYjNDM7XHR2YV9zdGFydChhcCwgZm10KTtcbiYjNDM7XHR2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApO1xuJiM0MztcdHZhX2VuZChhcCk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0ZXhpdCgxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXNsZWVwKHVuc2lnbmVkIGludCBtcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyB0cyA9IHtcbiYjNDM7XHRcdC50dl9zZWMgPSBtcyAvIDEwMDAsXG4mIzQzO1x0XHQudHZfbnNlYyA9IChtcyAlIDEwMDApICogMTAwMDAwMEwsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0bmFub3NsZWVwKFx1MDAyNnRzLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogL3Byb2MvbmV0L3Rsc19zdGF0IGlzIHBlciBuZXRucywgc28gYm90aCBlbmRzIGNhbiBjaGVjayB0aGF0IHRoZWlyIG93blxuJiM0MzsgKiBjb25uZWN0aW9uIHJlYWxseSBsYW5kZWQgb24gdGhlIGRldmljZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF90bHNfc3RhdChjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBsaW5lWzI1Nl07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKFwmIzM0Oy9wcm9jL25ldC90bHNfc3RhdFwmIzM0OywgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0ZGllKFwmIzM0O29wZW4gL3Byb2MvbmV0L3Rsc19zdGF0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGNoYXIga2V5WzY0XTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0OyU2M3MgJWx1XCYjMzQ7LCBrZXksIFx1MDAyNnZhbCkgIT0gMilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChrZXksIG5hbWUpKSB7XG4mIzQzO1x0XHRcdGZjbG9zZShmKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRmYWlsKFwmIzM0OyVzIG5vdCBmb3VuZCBpbiAvcHJvYy9uZXQvdGxzX3N0YXRcJiMzNDssIG5hbWUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmaWxsX3BhdHRlcm4oY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgc2VlZClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YnVmW2ldID0gKGNoYXIpKHNlZWQgJiM0MzsgaSAqIDMxICYjNDM7IChpIFx1MDAzZVx1MDAzZSA4KSAqIDcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjaGVja19wYXR0ZXJuKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IHNlZWQsXG4mIzQzO1x0XHRcdCAgY29uc3QgY2hhciAqd2hhdClcbiYjNDM7e1xuJiM0MztcdGNoYXIgKndhbnQgPSBtYWxsb2MobGVuKTtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3YW50KVxuJiM0MztcdFx0ZGllKFwmIzM0O21hbGxvY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZpbGxfcGF0dGVybih3YW50LCBsZW4sIHNlZWQpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChidWZbaV0gIT0gd2FudFtpXSlcbiYjNDM7XHRcdFx0ZmFpbChcJiMzNDslczogcGF5bG9hZCBtaXNtYXRjaCBhdCBieXRlICV6dTogZ290IDB4JTAyeCB3YW50IDB4JTAyeFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICB3aGF0LCBpLCAodW5zaWduZWQgY2hhcilidWZbaV0sXG4mIzQzO1x0XHRcdCAgICAgKHVuc2lnbmVkIGNoYXIpd2FudFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmcmVlKHdhbnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgZG9uZSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChkb25lIFx1MDAzYyBsZW4pIHtcbiYjNDM7XHRcdHNzaXplX3QgbiA9IHNlbmQoZmQsIGJ1ZiAmIzQzOyBkb25lLCBsZW4gLSBkb25lLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGRpZShcJiMzNDtzZW5kXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRvbmUgJiM0Mzs9IG47XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFkX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBkb25lID0gMDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuJiM0MztcdFx0c3NpemVfdCBuID0gcmVjdihmZCwgYnVmICYjNDM7IGRvbmUsIGxlbiAtIGRvbmUsIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O3JlY3ZcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKG4gPT0gMClcbiYjNDM7XHRcdFx0ZmFpbChcJiMzNDtwZWVyIGNsb3NlZCBhZnRlciAlenUgb2YgJXp1IGJ5dGVzXCYjMzQ7LCBkb25lLCBsZW4pO1xuJiM0MztcdFx0ZG9uZSAmIzQzOz0gbjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuYWJsZV9rdGxzKGludCBmZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBjaSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdHhfYmVmb3JlLCByeF9iZWZvcmU7XG4mIzQzO1xuJiM0MztcdHR4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzVHhEZXZpY2VcJiMzNDspO1xuJiM0MztcdHJ4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzUnhEZXZpY2VcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUCwgdGxzKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGNpLmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTjtcbiYjNDM7XHRjaS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyODtcbiYjNDM7XHRtZW1zZXQoY2kuaXYsICYjMzk7aSYjMzk7LCBzaXplb2YoY2kuaXYpKTtcbiYjNDM7XHRtZW1zZXQoY2kua2V5LCAmIzM5O2smIzM5Oywgc2l6ZW9mKGNpLmtleSkpO1xuJiM0MztcdG1lbXNldChjaS5zYWx0LCAmIzM5O3MmIzM5Oywgc2l6ZW9mKGNpLnNhbHQpKTtcbiYjNDM7XHRtZW1zZXQoY2kucmVjX3NlcSwgMCwgc2l6ZW9mKGNpLnJlY19zZXEpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2Y2ksIHNpemVvZihjaSkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1RYKVwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19SWCwgXHUwMDI2Y2ksIHNpemVvZihjaSkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1JYKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZXhlcmNpc2U6IHJlZnVzZSB0byBzaWxlbnRseSBmYWxsIGJhY2sgdG9cbiYjNDM7XHQgKiB0aGUgc29mdHdhcmUgcGF0aCwgb3RoZXJ3aXNlIHRoZSB0ZXN0IHdvdWxkIHBhc3Mgd2l0aG91dCBldmVyXG4mIzQzO1x0ICogdG91Y2hpbmcgdGxzX2RldmljZS5jLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWFkX3Rsc19zdGF0KFwmIzM0O1Rsc1R4RGV2aWNlXCYjMzQ7KSAhPSB0eF9iZWZvcmUgJiM0MzsgMSlcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7VFggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzVHhEZXZpY2UgJWx1IC1cdTAwM2UgJWx1KVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgdHhfYmVmb3JlLCByZWFkX3Rsc19zdGF0KFwmIzM0O1Rsc1R4RGV2aWNlXCYjMzQ7KSk7XG4mIzQzO1x0aWYgKHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzUnhEZXZpY2VcJiMzNDspICE9IHJ4X2JlZm9yZSAmIzQzOyAxKVxuJiM0MztcdFx0ZmFpbChcJiMzNDtSWCBkaWQgbm90IGxhbmQgb24gdGhlIGRldmljZSBwYXRoIChUbHNSeERldmljZSAlbHUgLVx1MDAzZSAlbHUpXCYjMzQ7LFxuJiM0MztcdFx0ICAgICByeF9iZWZvcmUsIHJlYWRfdGxzX3N0YXQoXCYjMzQ7VGxzUnhEZXZpY2VcJiMzNDspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3luY19wYXRoKGNoYXIgKm91dCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICp3aG8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoKHNpemVfdClzbnByaW50ZihvdXQsIGxlbiwgXCYjMzQ7JXMvJXMucmVhZHlcJiMzNDssIGRpciwgd2hvKSBcdTAwM2U9IGxlbilcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7c3luYyBkaXIgcGF0aCB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcilcbiYjNDM7e1xuJiM0MztcdGNoYXIgbWluZVtQQVRIX01BWF0sIHRoZWlyc1tQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRlZCA9IDA7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRzeW5jX3BhdGgobWluZSwgc2l6ZW9mKG1pbmUpLCBkaXIsIG1lKTtcbiYjNDM7XHRzeW5jX3BhdGgodGhlaXJzLCBzaXplb2YodGhlaXJzKSwgZGlyLCBwZWVyKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0ZGllKFwmIzM0O2NyZWF0ZSBzeW5jIGZpbGVcJiMzNDspO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGFjY2Vzcyh0aGVpcnMsIEZfT0spKSB7XG4mIzQzO1x0XHRpZiAod2FpdGVkIFx1MDAzZT0gU1lOQ19USU1FT1VUX01TKVxuJiM0MztcdFx0XHRmYWlsKFwmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciAlc1wmIzM0OywgcGVlcik7XG4mIzQzO1x0XHRtc2xlZXAoMjApO1xuJiM0MztcdFx0d2FpdGVkICYjNDM7PSAyMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJvdGggZW5kcyBzdG9wIGhlcmUgd2l0aCB0aGVpciBvZmZsb2FkIGluc3RhbGxlZCBhbmQgbm8gZGF0YSBzZW50IHlldCxcbiYjNDM7ICogc28gdGhhdCB0aGUgZHJpdmVyIHN0YXRlIGNhbiBiZSBpbnNwZWN0ZWQgZnJvbSB0aGUgb3V0c2lkZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX2dvKGNvbnN0IGNoYXIgKmRpcilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB3YWl0ZWQgPSAwO1xuJiM0MztcdGNoYXIgZ29bUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRpZiAoKHNpemVfdClzbnByaW50Zihnbywgc2l6ZW9mKGdvKSwgXCYjMzQ7JXMvZ29cJiMzNDssIGRpcikgXHUwMDNlPSBzaXplb2YoZ28pKVxuJiM0MztcdFx0ZmFpbChcJiMzNDtzeW5jIGRpciBwYXRoIHRvbyBsb25nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGFjY2VzcyhnbywgRl9PSykpIHtcbiYjNDM7XHRcdGlmICh3YWl0ZWQgXHUwMDNlPSBTWU5DX1RJTUVPVVRfTVMpXG4mIzQzO1x0XHRcdGZhaWwoXCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIGdvXCYjMzQ7KTtcbiYjNDM7XHRcdG1zbGVlcCgyMCk7XG4mIzQzO1x0XHR3YWl0ZWQgJiM0Mzs9IDIwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU21hbGwgd3JpdGVzIHdpdGggTVNHX01PUkUgYWNjdW11bGF0ZSBpbnRvIG9uZSBvcGVuIHJlY29yZCBiZWZvcmUgaXQgaXNcbiYjNDM7ICogcHVzaGVkLCB3aGljaCBpcyB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0bHNfcHVzaF9kYXRhKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX21zZ19tb3JlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZltNT1JFX0ZSQUdTICYjNDM7IDFdO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBzaXplb2YoYnVmKSwgc2VlZCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1PUkVfRlJBR1M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoc2VuZChmZCwgYnVmICYjNDM7IGksIDEsIE1TR19NT1JFKSAhPSAxKVxuJiM0MztcdFx0XHRkaWUoXCYjMzQ7c2VuZChNU0dfTU9SRSlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2VuZChmZCwgYnVmICYjNDM7IE1PUkVfRlJBR1MsIDEsIDApICE9IDEpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7c2VuZChsYXN0KVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNwbGljZSgpIHJlYWNoZXMgdGxzX3B1c2hfZGF0YSgpIHdpdGggTVNHX1NQTElDRV9QQUdFUyBvbmNlXG4mIzQzOyAqIFRMU19UWF9aRVJPQ09QWV9STyBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGRpc3RpbmN0IGZyYWdtZW50IHBhdGguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX3NwbGljZShpbnQgZmQsIHVuc2lnbmVkIGludCBzZWVkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbU1BMSUNFX0ZSQUdfTEVOXTtcbiYjNDM7XHRpbnQgdmFsID0gMTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7c2V0c29ja29wdChUTFNfVFhfWkVST0NPUFlfUk8pXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgU1BMSUNFX0ZSQUdTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IHBbMl07XG4mIzQzO1xuJiM0MztcdFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQgJiM0MzsgaSAqIFNQTElDRV9GUkFHX0xFTik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBpcGUocCkpXG4mIzQzO1x0XHRcdGRpZShcJiMzNDtwaXBlXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICh3cml0ZShwWzFdLCBidWYsIHNpemVvZihidWYpKSAhPSBzaXplb2YoYnVmKSlcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O3dyaXRlIHRvIHBpcGVcJiMzNDspO1xuJiM0MztcdFx0aWYgKHNwbGljZShwWzBdLCBOVUxMLCBmZCwgTlVMTCwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHRcdCAgIGkgPT0gU1BMSUNFX0ZSQUdTIC0gMSA/IDAgOiBTUExJQ0VfRl9NT1JFKSAhPVxuJiM0MztcdFx0ICAgIHNpemVvZihidWYpKVxuJiM0MztcdFx0XHRkaWUoXCYjMzQ7c3BsaWNlXCYjMzQ7KTtcbiYjNDM7XHRcdGNsb3NlKHBbMF0pO1xuJiM0MztcdFx0Y2xvc2UocFsxXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWwgPSAwO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPIG9mZilcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIHJlY29yZCBjYW4gYmUgdXAgdG8gMTZLLCBzbyBub3JtYWxseSBvbmUgc2VnbWVudCBjYXJyaWVzIGEgcGllY2Ugb2YgYVxuJiM0MzsgKiBzaW5nbGUgcmVjb3JkLiAgU2hyaW5raW5nIHRoZSBsaW1pdCBwdXRzIGEgZG96ZW4gb3Igc28gd2hvbGUgcmVjb3JkcyBpblxuJiM0MzsgKiBldmVyeSBzZWdtZW50IGluc3RlYWQsIHdoaWNoIGlzIHRoZSBtdWx0aS1yZWNvcmQgcGF0aCB0aHJvdWdoIHRoZSBkcml2ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX3NtYWxsX3JlY29yZHMoaW50IGZkLCB1bnNpZ25lZCBpbnQgc2VlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmW1NNQUxMX0xFTl07XG4mIzQzO1x0dWludDE2X3QgbGltaXQ7XG4mIzQzO1xuJiM0MztcdGxpbWl0ID0gUkVDX0xJTV9NSU47XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9NQVhfUEFZTE9BRF9MRU4sIFx1MDAyNmxpbWl0LFxuJiM0MztcdFx0ICAgICAgIHNpemVvZihsaW1pdCkpKVxuJiM0MztcdFx0ZGllKFwmIzM0O3NldHNvY2tvcHQoVExTX1RYX01BWF9QQVlMT0FEX0xFTilcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBzaXplb2YoYnVmKSwgc2VlZCk7XG4mIzQzO1x0d3JpdGVfYWxsKGZkLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XG4mIzQzO1x0bGltaXQgPSBSRUNfTElNX01BWDtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgXHUwMDI2bGltaXQsXG4mIzQzO1x0XHQgICAgICAgc2l6ZW9mKGxpbWl0KSkpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7c2V0c29ja29wdChUTFNfVFhfTUFYX1BBWUxPQURfTEVOIHJlc3RvcmUpXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBTRUVEX0MyU19CVUxLXHQweDExXG4mIzQzOyNkZWZpbmUgU0VFRF9TMkNfQlVMS1x0MHgyMlxuJiM0MzsjZGVmaW5lIFNFRURfQzJTX01PUkVcdDB4MzNcbiYjNDM7I2RlZmluZSBTRUVEX0MyU19TUExJQ0VcdDB4NDRcbiYjNDM7I2RlZmluZSBTRUVEX0MyU19TTUFMTFx0MHg1NVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2NsaWVudChpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdGRpZShcJiMzNDttYWxsb2NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSyk7XG4mIzQzO1x0d3JpdGVfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcbiYjNDM7XG4mIzQzO1x0cmVhZF9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pO1xuJiM0MztcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9TMkNfQlVMSywgXCYjMzQ7c2VydmVyIC1cdTAwM2UgY2xpZW50IGJ1bGtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzZW5kX21zZ19tb3JlKGZkLCBTRUVEX0MyU19NT1JFKTtcbiYjNDM7XHRzZW5kX3NwbGljZShmZCwgU0VFRF9DMlNfU1BMSUNFKTtcbiYjNDM7XHRzZW5kX3NtYWxsX3JlY29yZHMoZmQsIFNFRURfQzJTX1NNQUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgdGhlIHNlcnZlciYjMzk7cyB2ZXJkaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nIGRvd24uICovXG4mIzQzO1x0cmVhZF9hbGwoZmQsIGJ1ZiwgMSk7XG4mIzQzO1x0aWYgKGJ1ZlswXSAhPSAmIzM5O2smIzM5OylcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7c2VydmVyIHJlcG9ydGVkIGEgZmFpbHVyZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZyZWUoYnVmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3NlcnZlcihpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc3BsaWNlX2xlbiA9IChzaXplX3QpU1BMSUNFX0ZSQUdfTEVOICogU1BMSUNFX0ZSQUdTO1xuJiM0MztcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7XG4mIzQzO1x0Y2hhciBtb3JlW01PUkVfRlJBR1MgJiM0MzsgMV07XG4mIzQzO1x0Y2hhciAqc2J1ZjtcbiYjNDM7XHRjaGFyIG9rID0gJiMzOTtrJiMzOTs7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdHNidWYgPSBtYWxsb2Moc3BsaWNlX2xlbik7XG4mIzQzO1x0aWYgKCFidWYgfHwgIXNidWYpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7bWFsbG9jXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmVhZF9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pO1xuJiM0MztcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSywgXCYjMzQ7Y2xpZW50IC1cdTAwM2Ugc2VydmVyIGJ1bGtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmaWxsX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9TMkNfQlVMSyk7XG4mIzQzO1x0d3JpdGVfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcbiYjNDM7XG4mIzQzO1x0cmVhZF9hbGwoZmQsIG1vcmUsIHNpemVvZihtb3JlKSk7XG4mIzQzO1x0Y2hlY2tfcGF0dGVybihtb3JlLCBzaXplb2YobW9yZSksIFNFRURfQzJTX01PUkUsIFwmIzM0O2NsaWVudCAtXHUwMDNlIHNlcnZlciBNU0dfTU9SRVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJlYWRfYWxsKGZkLCBzYnVmLCBzcGxpY2VfbGVuKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTUExJQ0VfRlJBR1M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y2hlY2tfcGF0dGVybihzYnVmICYjNDM7IChzaXplX3QpaSAqIFNQTElDRV9GUkFHX0xFTixcbiYjNDM7XHRcdFx0ICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgJiM0MztcbiYjNDM7XHRcdFx0ICAgICAgaSAqIFNQTElDRV9GUkFHX0xFTiwgXCYjMzQ7Y2xpZW50IC1cdTAwM2Ugc2VydmVyIHNwbGljZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJlYWRfYWxsKGZkLCBidWYsIFNNQUxMX0xFTik7XG4mIzQzO1x0Y2hlY2tfcGF0dGVybihidWYsIFNNQUxMX0xFTiwgU0VFRF9DMlNfU01BTEwsXG4mIzQzO1x0XHQgICAgICBcJiMzNDtjbGllbnQgLVx1MDAzZSBzZXJ2ZXIgc21hbGwgcmVjb3Jkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2FsbChmZCwgXHUwMDI2b2ssIDEpO1xuJiM0MztcbiYjNDM7XHRmcmVlKHNidWYpO1xuJiM0MztcdGZyZWUoYnVmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkb19zZXJ2ZXIoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIHNhID0ge307XG4mIzQzO1x0aW50IGxmZCwgZmQsIG9uZSA9IDE7XG4mIzQzO1xuJiM0MztcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGxmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGRpZShcJiMzNDtzb2NrZXRcJiMzNDspO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGxmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGRpZShcJiMzNDtTT19SRVVTRUFERFJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRzYS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpO1xuJiM0MztcdGlmIChpbmV0X3B0b24oQUZfSU5FVCwgaXAsIFx1MDAyNnNhLnNpbl9hZGRyKSAhPSAxKVxuJiM0MztcdFx0ZmFpbChcJiMzNDtiYWQgYmluZCBhZGRyZXNzICVzXCYjMzQ7LCBpcCk7XG4mIzQzO1xuJiM0MztcdGlmIChiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNhLCBzaXplb2Yoc2EpKSlcbiYjNDM7XHRcdGRpZShcJiMzNDtiaW5kXCYjMzQ7KTtcbiYjNDM7XHRpZiAobGlzdGVuKGxmZCwgMSkpXG4mIzQzO1x0XHRkaWUoXCYjMzQ7bGlzdGVuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRkaWUoXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShsZmQpO1xuJiM0MztcbiYjNDM7XHRlbmFibGVfa3RscyhmZCk7XG4mIzQzO1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcJiMzNDtzZXJ2ZXJcJiMzNDssIFwmIzM0O2NsaWVudFwmIzM0Oyk7XG4mIzQzO1x0d2FpdF9mb3JfZ28oc3luY2Rpcik7XG4mIzQzO1xuJiM0MztcdHJ1bl9zZXJ2ZXIoZmQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG9fY2xpZW50KGNvbnN0IGNoYXIgKmlwLCBpbnQgcG9ydCwgY29uc3QgY2hhciAqc3luY2RpcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGludCB3YWl0ZWQgPSAwO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0c2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0c2Euc2luX3BvcnQgPSBodG9ucyhwb3J0KTtcbiYjNDM7XHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7YmFkIHNlcnZlciBhZGRyZXNzICVzXCYjMzQ7LCBpcCk7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O3NvY2tldFwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzYSwgc2l6ZW9mKHNhKSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0aWYgKHdhaXRlZCBcdTAwM2U9IENPTk5FQ1RfVElNRU9VVF9NUylcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O2Nvbm5lY3RcJiMzNDspO1xuJiM0MztcdFx0bXNsZWVwKDIwKTtcbiYjNDM7XHRcdHdhaXRlZCAmIzQzOz0gMjA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmFibGVfa3RscyhmZCk7XG4mIzQzO1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcJiMzNDtjbGllbnRcJiMzNDssIFwmIzM0O3NlcnZlclwmIzM0Oyk7XG4mIzQzO1x0d2FpdF9mb3JfZ28oc3luY2Rpcik7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbGllbnQoZmQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoYXJnYyAhPSA1KSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XCYjMzQ7dXNhZ2U6ICVzIHNlcnZlcnxjbGllbnQgXHUwMDNjaXBcdTAwM2UgXHUwMDNjcG9ydFx1MDAzZSBcdTAwM2NzeW5jZGlyXHUwMDNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRhcmd2WzBdKTtcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cm9sZSA9IGFyZ3ZbMV07XG4mIzQzO1x0cG9ydCA9IGF0b2koYXJndlszXSk7XG4mIzQzO1xuJiM0MztcdGlmICghc3RyY21wKHJvbGUsIFwmIzM0O3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZG9fc2VydmVyKGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xuJiM0MztcdGlmICghc3RyY21wKHJvbGUsIFwmIzM0O2NsaWVudFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZG9fY2xpZW50KGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xuJiM0MztcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7dW5rbm93biByb2xlICVzXFxuXCYjMzQ7LCByb2xlKTtcbiYjNDM7XHRyZXR1cm4gMjtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuc2ltX2RvX3RscyYjMzQ7LAogICAgJiMzNDtuc2ltX3Rsc19pbml0JiMzNDssCiAgICAmIzM0O25zaW1fdGxzX3RlYXJkb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZW11bGF0ZWQga1RMUyBvZmZsb2FkIHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiBuZXRkZXZzaW0gaXMgdXNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmNmQwMzdiODI5YWU2ZDc0MTE5MTkwYTIxODZiODRlNTRlNWE4NjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxNTowNjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGZmNzljNDY2NzEyZGYuLmNiNGQ0YmI4N2FmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtNjA3LDYgJiM0Mzs2MDcsNyBAQCBjb25maWcgTkVUREVWU0lNCiAJZGVwZW5kcyBvbiBJTkVUCiAJZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9bgogCWRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW4KJiM0MzsJZGVwZW5kcyBvbiBUTFMgfHwgVExTPW4KIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUEFHRV9QT09MCiAJc2VsZWN0IE5FVF9TSEFQRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZQppbmRleCA4NzcxODIwNGZiNGRlLi5jN2Y3NjIxMzIzYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlCkBAIC0yNSwzICYjNDM7MjUsNyBAQCBlbmRpZgogaWZuZXEgKCQoQ09ORklHX01BQ1NFQyksKQogbmV0ZGV2c2ltLW9ianMgJiM0Mzs9IG1hY3NlYy5vCiBlbmRpZgomIzQzOwomIzQzO2lmbmVxICgkKENPTkZJR19UTFNfREVWSUNFKSwpCiYjNDM7bmV0ZGV2c2ltLW9ianMgJiM0Mzs9IHRscy5vCiYjNDM7ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCA0ZTlkN2UxMGI1MjdlLi44ZGMwYjBhN2QxYTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0xNTEsNiAmIzQzOzE1MSw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAoZHIpCiAJCWdvdG8gb3V0X2Ryb3BfZnJlZTsKIAomIzQzOwluc2ltX2RvX3Rscyhza2IsIG5zLCBwZWVyX25zKTsKJiM0MzsKIAlyeHEgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlpZiAocnhxICZndDs9IHBlZXJfZGV2LSZndDtudW1fcnhfcXVldWVzKQogCQlyeHEgPSByeHEgJSBwZWVyX2Rldi0mZ3Q7bnVtX3J4X3F1ZXVlczsKQEAgLTEwNjYsNiAmIzQzOzEwNjgsNyBAQCBzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpCiAKIAluc2ltX21hY3NlY19pbml0KG5zKTsKIAluc2ltX2lwc2VjX2luaXQobnMpOwomIzQzOwluc2ltX3Rsc19pbml0KG5zKTsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShucy0mZ3Q7bmV0ZGV2KTsKIAlpZiAoZXJyKQpAQCAtMTA5Myw2ICYjNDM7MTA5Niw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlSQ1VfSU5JVF9QT0lOVEVSKG5zLSZndDtwZWVyLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZShucy0mZ3Q7bmV0ZGV2KTsKIGVycl9pcHNlY190ZWFyZG93bjoKJiM0MzsJbnNpbV90bHNfdGVhcmRvd24obnMpOwogCW5zaW1faXBzZWNfdGVhcmRvd24obnMpOwogCW5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTsKIAluc2ltX2JwZl91bmluaXQobnMpOwpAQCAtMTE5NSw2ICYjNDM7MTE5OSw3IEBAIHZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKQogCVJDVV9JTklUX1BPSU5URVIobnMtJmd0O3BlZXIsIE5VTEwpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJaWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnMtJmd0O25zaW1fZGV2X3BvcnQpKSB7CiYjNDM7CQluc2ltX3Rsc190ZWFyZG93bihucyk7CiAJCW5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTsKIAkJbnNpbV9pcHNlY190ZWFyZG93bihucyk7CiAJCW5zaW1fYnBmX3VuaW5pdChucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmggYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKaW5kZXggNjRmNzdmOTNkOTM3Yy4uNTgyYTc2YWNlOWQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaApAQCAtNTYsNiAmIzQzOzU2LDIwIEBAIHN0cnVjdCBuc2ltX2lwc2VjIHsKIAl1MzIgdHg7CiB9OwogCiYjNDM7c3RydWN0IG5zaW1fdGxzIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBjb25uczsKJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwkvKiBwcm90ZWN0cyBjb25ucyBhbmQgdGhlIGNvdW50ZXJzIGJlbG93ICovCiYjNDM7CXN0cnVjdCBkZW50cnkgKmRmaWxlOwomIzQzOwl1MzIgY291bnQ7CiYjNDM7CXUzMiB0eF9jb25uOwomIzQzOwl1MzIgcnhfY29ubjsKJiM0MzsJYXRvbWljNjRfdCB0eF9wYWNrZXRzOwomIzQzOwlhdG9taWM2NF90IHR4X2J5dGVzOwomIzQzOwlhdG9taWM2NF90IHJ4X3BhY2tldHM7CiYjNDM7CWF0b21pYzY0X3QgcnhfYnl0ZXM7CiYjNDM7CWF0b21pYzY0X3QgcmVzeW5jczsKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfU0VDWV9DT1VOVCAzCiAjZGVmaW5lIE5TSU1fTUFDU0VDX01BWF9SWFNDX0NPVU5UIDEKIHN0cnVjdCBuc2ltX3J4c2MgewpAQCAtMTQxLDYgJiM0MzsxNTUsNyBAQCBzdHJ1Y3QgbmV0ZGV2c2ltIHsKIAlib29sIGJwZl9tYXBfYWNjZXB0OwogCXN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjOwogCXN0cnVjdCBuc2ltX21hY3NlYyBtYWNzZWM7CiYjNDM7CXN0cnVjdCBuc2ltX3RscyB0bHM7CiAJc3RydWN0IG5zaW1fdmxhbiB2bGFuOwogCXN0cnVjdCB7CiAJCXUzMiBpbmplY3RfZXJyb3I7CkBAIC00MzUsNiAmIzQzOzQ1MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIH0KICNlbmRpZgogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpCiYjNDM7dm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTsKJiM0Mzt2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTsKJiM0Mzt2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLAomIzQzOwkJIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpCiB2b2lkIG5zaW1fbWFjc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpOwogdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjY5NWYyZTJiZWI4MAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYwpAQCAtMCwwICYjNDM7MSw0MTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvdGxzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXRkZXZzaW0uaCYjMzQ7CiYjNDM7CiYjNDM7LyogRW11bGF0ZWQga1RMUyBvZmZsb2FkLiAgTm8gY3J5cHRvIGlzIHBlcmZvcm1lZCwgc28gdGhpcyBpcyBvbmx5IHNlbGYKJiM0MzsgKiBjb25zaXN0ZW50IGJldHdlZW4gdHdvIG5ldGRldnNpbSBwb3J0cy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIE5TSU1fVExTX01BWF9DT05OCTMyCiYjNDM7CiYjNDM7LyogbmV0ZGV2X2ZpeF9mZWF0dXJlcygpIGRyb3BzIE5FVElGX0ZfSFdfVExTX1JYIHVubGVzcyB0aGUgZGV2aWNlIGFsc28gZG9lcwomIzQzOyAqIFJYIGNoZWNrc3Vtcywgd2hpY2ggZXZlcnkgb2ZmbG9hZCBjYXBhYmxlIE5JQyBkb2VzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTlNJTV9UTFNfRkVBVFVSRVMJKE5FVElGX0ZfSFdfVExTX1RYIHwgTkVUSUZfRl9IV19UTFNfUlggfCBcCiYjNDM7CQkJCSBORVRJRl9GX1JYQ1NVTSkKJiM0MzsKJiM0MztzdHJ1Y3QgbnNpbV90bHNfY29ubiB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsKJiM0MzsJLyogSWRlbnRpdHkgYXMgc2VlbiBvbiB0aGUgd2lyZSwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgcG9ydAomIzQzOwkgKiB0aGUgb2ZmbG9hZCB3YXMgaW5zdGFsbGVkIG9uOiBsKiBpcyB0aGlzIHNpZGUsIHIqIGlzIHRoZSBwZWVyLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGluNl9hZGRyIGxhZGRyOwomIzQzOwlzdHJ1Y3QgaW42X2FkZHIgcmFkZHI7CiYjNDM7CV9fYmUxNiBscG9ydDsKJiM0MzsJX19iZTE2IHJwb3J0OwomIzQzOwl1MTYgZmFtaWx5OwomIzQzOwomIzQzOwllbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyOwomIzQzOwl1MzIgc3RhcnRfc247CiYjNDM7CXUxNiBjaXBoZXJfdHlwZTsKJiM0MzsJY29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG5zaW1fdGxzX3R1cGxlIHsKJiM0MzsJc3RydWN0IGluNl9hZGRyIHNhZGRyOwomIzQzOwlzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7CiYjNDM7CV9fYmUxNiBzcG9ydDsKJiM0MzsJX19iZTE2IGRwb3J0OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbnNpbV90bHNfcGFyc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDsKJiM0MzsKJiM0MzsJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwomIzQzOwomIzQzOwkJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChpcGgtJmd0O3NhZGRyLCAmYW1wO3QtJmd0O3NhZGRyKTsKJiM0MzsJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLSZndDtkYWRkciwgJmFtcDt0LSZndDtkYWRkcik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CiYjNDM7CiYjNDM7CQlpZiAoaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl0LSZndDtzYWRkciA9IGlwNmgtJmd0O3NhZGRyOwomIzQzOwkJdC0mZ3Q7ZGFkZHIgPSBpcDZoLSZndDtkYWRkcjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdGggPSB0Y3BfaGRyKHNrYik7CiYjNDM7CXQtJmd0O3Nwb3J0ID0gdGgtJmd0O3NvdXJjZTsKJiM0MzsJdC0mZ3Q7ZHBvcnQgPSB0aC0mZ3Q7ZGVzdDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qIE9uIFJYIHRoZXJlIGlzIG5vIHNvY2tldCB0byBsb29rIGF0IHlldCwgc28gbWF0Y2ggdGhlIHR1cGxlIGluc3RhbGxlZCBhdAomIzQzOyAqIC0mZ3Q7dGxzX2Rldl9hZGQoKSB0aW1lLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzLiAgVGhlIHBhY2tldCBpcwomIzQzOyAqIGFycml2aW5nLCBzbyB0aGUgcGVlciBvZiB0aGUgY29ubmVjdGlvbiBpcyBpdHMgc291cmNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucywKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY29ubiwgJmFtcDtucy0mZ3Q7dGxzLmNvbm5zLCBsaXN0KQomIzQzOwkJaWYgKGNvbm4tJmd0O2RpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1JYICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjb25uLSZndDtscG9ydCA9PSB0LSZndDtkcG9ydCAmYW1wOyZhbXA7IGNvbm4tJmd0O3Jwb3J0ID09IHQtJmd0O3Nwb3J0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpcHY2X2FkZHJfZXF1YWwoJmFtcDtjb25uLSZndDtsYWRkciwgJmFtcDt0LSZndDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmYW1wO2Nvbm4tJmd0O3JhZGRyLCAmYW1wO3QtJmd0O3NhZGRyKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgc3RhY2sgbGVhdmVzIGEgdGFnIHNpemVkIHBsYWNlaG9sZGVyIGF0IHRoZSBlbmQgb2YgZXZlcnkgcmVjb3JkIGZvcgomIzQzOyAqIHRoZSBkZXZpY2UgdG8gd3JpdGUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpbnRvLiAgV2UgZG8gbm90IGVuY3J5cHQsIHNvCiYjNDM7ICogbm90aGluZyBldmVyIGZpbGxzIGl0IGluLCBhbmQgaXQgY29tZXMgZnJvbSBhIHBhZ2UgZnJhZyB0aGF0IHdhcyBuZXZlcgomIzQzOyAqIHplcm9lZCAtIGNsZWFyIGl0IHJhdGhlciB0aGFuIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb250byB0aGUgd2lyZS4KJiM0MzsgKgomIzQzOyAqIHRsc19hcHBlbmRfZnJhZygpIGVpdGhlciBncm93cyB0aGUgbGFzdCBmcmFnIG9yIGFkZHMgb25lLCBzbyB0aGUgdGFnIGlzCiYjNDM7ICogYWx3YXlzIHRoZSB0YWlsIG9mIHRoZSByZWNvcmQmIzM5O3MgbGFzdCBmcmFnLiAgQ2xlYXJpbmcgaXQgdGhlcmUgcmF0aGVyIHRoYW4KJiM0MzsgKiBpbiB0aGUgc2tiIGNvdmVycyBldmVyeSBzZWdtZW50IHRoZSByZWNvcmQgd2FzIHNwbGl0IGludG8sIGFuZCBhbnkKJiM0MzsgKiByZXRyYW5zbWl0IG9mIHRoZW0sIHNpbmNlIHRoZXkgYWxsIHNoYXJlIHRoZXNlIHBhZ2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG5zaW1fdGxzX3R4X3plcm9fdGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChza2ItJmd0O3NrKTsKJiM0MzsJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiYjNDM7CXN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICp0eF9jdHg7CiYjNDM7CXUzMiBzZXEsIGVuZCwgdGFnX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXVuc2lnbmVkIGludCBvZmY7CiYjNDM7CiYjNDM7CW9mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgX190Y3BfaGRybGVuKHRoKTsKJiM0MzsJaWYgKG9mZiAmZ3Q7PSBza2ItJmd0O2xlbikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdGFnX3NpemUgPSBjdHgtJmd0O3Byb3RfaW5mby50YWdfc2l6ZTsKJiM0MzsJc2VxID0gbnRvaGwodGgtJmd0O3NlcSk7CiYjNDM7CWVuZCA9IHNlcSAmIzQzOyBza2ItJmd0O2xlbiAtIG9mZjsKJiM0MzsJdHhfY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KGN0eCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHhfY3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlIChiZWZvcmUoc2VxLCBlbmQpKSB7CiYjNDM7CQlzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7CiYjNDM7CQlza2JfZnJhZ190ICpmcmFnOwomIzQzOwkJdTY0IHJjZF9zbjsKJiM0MzsKJiM0MzsJCXJlY29yZCA9IHRsc19nZXRfcmVjb3JkKHR4X2N0eCwgc2VxLCAmYW1wO3JjZF9zbik7CiYjNDM7CQlpZiAoIXJlY29yZCB8fCB0bHNfcmVjb3JkX2lzX3N0YXJ0X21hcmtlcihyZWNvcmQpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZnJhZyA9ICZhbXA7cmVjb3JkLSZndDtmcmFnc1tyZWNvcmQtJmd0O251bV9mcmFncyAtIDFdOwomIzQzOwkJbWVtc2V0KHNrYl9mcmFnX2FkZHJlc3MoZnJhZykgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShmcmFnKSAtIHRhZ19zaXplLAomIzQzOwkJICAgICAgIDAsIHRhZ19zaXplKTsKJiM0MzsKJiM0MzsJCXNlcSA9IHJlY29yZC0mZ3Q7ZW5kX3NlcTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dHhfY3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFN0YW5kIGluIGZvciB0aGUgaW5saW5lIGVuY3J5cHRpb24gdGhlIGhhcmR3YXJlIHdvdWxkIGRvIG9uIHRoZSB3YXkgb3V0LgomIzQzOyAqIFRoZSBzdGFjayBoYXMgYWxyZWFkeSBmcmFtZWQgdGhlIHJlY29yZCBhbmQgd2UgZG8gbm90IGVuY3J5cHQsIHNvIHRoZSB0YWcKJiM0MzsgKiBpcyBhbGwgdGhhdCBpcyBsZWZ0IHRvIGRlYWwgd2l0aC4gIFRoZSBzb2NrZXQgaXMgcmlnaHQgaGVyZSwgc28gaWRlbnRpZnkKJiM0MzsgKiB0aGUgY29ubmVjdGlvbiB0aGUgd2F5IHRoZSByZWFsIGRyaXZlcnMgZG8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpZiAoIXRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwluc2ltX3Rsc190eF96ZXJvX3RhZ3Moc2tiKTsKJiM0MzsJYXRvbWljNjRfaW5jKCZhbXA7bnMtJmd0O3Rscy50eF9wYWNrZXRzKTsKJiM0MzsJYXRvbWljNjRfYWRkKHNrYi0mZ3Q7bGVuLCAmYW1wO25zLSZndDt0bHMudHhfYnl0ZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBkZWNyeXB0aW9uIHRoZSBwZWVyJiMzOTtzIGhhcmR3YXJlIHdvdWxkIGRvLCBzaW5jZSB3ZQomIzQzOyAqIGFyZSBhYm91dCB0byBoYW5kIHRoZSBza2IgdG8gaXRzIHN0YWNrLiAgV2UgZG8gbm90IGRlY3J5cHQgZWl0aGVyLCBzbyBhbGwKJiM0MzsgKiB0aGF0IGlzIG5lZWRlZCBpcyB0aGUgZmxhZyB0aGF0IHRlbGxzIHRoZSBrVExTIGNvcmUgdGhlIHBheWxvYWQgaXMKJiM0MzsgKiBhbHJlYWR5IHBsYWludGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc19yeChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuc2ltX3Rsc190dXBsZSB0OwomIzQzOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO25zLSZndDt0bHMuY29ubnMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIW5zaW1fdGxzX3BhcnNlKHNrYiwgJmFtcDt0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFuc2ltX3Rsc19yeF9vZmZsb2FkZWQobnMsICZhbXA7dCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7ZGVjcnlwdGVkID0gMTsKJiM0MzsJYXRvbWljNjRfaW5jKCZhbXA7bnMtJmd0O3Rscy5yeF9wYWNrZXRzKTsKJiM0MzsJYXRvbWljNjRfYWRkKHNrYi0mZ3Q7bGVuLCAmYW1wO25zLSZndDt0bHMucnhfYnl0ZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBuZXRkZXZzaW0gaGFzIG5vIHdpcmU6IG5zaW1fc3RhcnRfeG1pdCgpIGhhbmRzIHRoZSBza2Igc3RyYWlnaHQgdG8gdGhlCiYjNDM7ICogcGVlciYjMzk7cyByZWNlaXZlIHBhdGgsIHNvIHRoaXMgb25lIGNhbGwgc2l0ZSBzdGFuZHMgaW4gZm9yIHRoZSBoYXJkd2FyZSBvZgomIzQzOyAqIGJvdGggcG9ydHMuICBJdCBoYXMgdG8gcnVuIGJlZm9yZSBuc2ltX2ZvcndhcmRfc2tiKCkgbW92ZXMgdGhlIHNrYiBvdmVyLAomIzQzOyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy4KJiM0MzsgKi8KJiM0Mzt2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLAomIzQzOwkJIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpCiYjNDM7ewomIzQzOwkvKiBuc2ltX2RvX3BzcCgpIHJhbiBmaXJzdCBhbmQgbWF5IGhhdmUgd3JhcHBlZCB0aGUgcmVjb3JkIHN0cmVhbSwgc28KJiM0MzsJICogdGhpcyBpcyBubyBsb25nZXIgYSBwbGFpbiBUTFMgb3ZlciBUQ1AgcGFja2V0LiAgTm8gTklDIGNoYWlucyB0aGUKJiM0MzsJICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbnNpbV90bHNfdHgobnMsIHNrYik7CiYjNDM7CW5zaW1fdGxzX3J4KHBlZXJfbnMsIHNrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnNpbV90bHNfZGV2X2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24sCiYjNDM7CQkJICAgIHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLAomIzQzOwkJCSAgICB1MzIgc3RhcnRfb2ZmbG9hZF90Y3Bfc24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJLyogTWlycm9yIHRoZSBjaXBoZXIgc3VwcG9ydCBvZiBhIHR5cGljYWwgb2ZmbG9hZCBjYXBhYmxlIE5JQy4gKi8KJiM0MzsJc3dpdGNoIChjcnlwdG9faW5mby0mZ3Q7Y2lwaGVyX3R5cGUpIHsKJiM0MzsJY2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4OgomIzQzOwljYXNlIFRMU19DSVBIRVJfQUVTX0dDTV8yNTY6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwljb25uID0ga3phbGxvY19vYmooKmNvbm4pOwomIzQzOwlpZiAoIWNvbm4pCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaWYgKHNrLSZndDtza19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKJiM0MzsJCWNvbm4tJmd0O2xhZGRyID0gc2stJmd0O3NrX3Y2X3Jjdl9zYWRkcjsKJiM0MzsJCWNvbm4tJmd0O3JhZGRyID0gc2stJmd0O3NrX3Y2X2RhZGRyOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChzay0mZ3Q7c2tfcmN2X3NhZGRyLCAmYW1wO2Nvbm4tJmd0O2xhZGRyKTsKJiM0MzsJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoc2stJmd0O3NrX2RhZGRyLCAmYW1wO2Nvbm4tJmd0O3JhZGRyKTsKJiM0MzsJfQomIzQzOwljb25uLSZndDtmYW1pbHkgPSBzay0mZ3Q7c2tfZmFtaWx5OwomIzQzOwljb25uLSZndDtscG9ydCA9IGh0b25zKGluZXRfc2soc2spLSZndDtpbmV0X251bSk7CiYjNDM7CWNvbm4tJmd0O3Jwb3J0ID0gc2stJmd0O3NrX2Rwb3J0OwomIzQzOwljb25uLSZndDtkaXIgPSBkaXJlY3Rpb247CiYjNDM7CWNvbm4tJmd0O3N0YXJ0X3NuID0gc3RhcnRfb2ZmbG9hZF90Y3Bfc247CiYjNDM7CWNvbm4tJmd0O2NpcGhlcl90eXBlID0gY3J5cHRvX2luZm8tJmd0O2NpcGhlcl90eXBlOwomIzQzOwljb25uLSZndDt0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwlpZiAobnMtJmd0O3Rscy5jb3VudCAmZ3Q7PSBOU0lNX1RMU19NQVhfQ09OTikgewomIzQzOwkJcmV0ID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO2Nvbm4tJmd0O2xpc3QsICZhbXA7bnMtJmd0O3Rscy5jb25ucyk7CiYjNDM7CW5zLSZndDt0bHMuY291bnQmIzQzOyYjNDM7OwomIzQzOwlpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpCiYjNDM7CQlucy0mZ3Q7dGxzLnR4X2Nvbm4mIzQzOyYjNDM7OwomIzQzOwllbHNlCiYjNDM7CQlucy0mZ3Q7dGxzLnJ4X2Nvbm4mIzQzOyYjNDM7OwomIzQzO291dF91bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtmcmVlKGNvbm4pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuc2ltX3Rsc19kZXZfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsCiYjNDM7CQkJICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCAmYW1wO25zLSZndDt0bHMuY29ubnMsIGxpc3QpIHsKJiM0MzsJCWlmIChjb25uLSZndDt0bHNfY3R4ICE9IHRsc19jdHggfHwgY29ubi0mZ3Q7ZGlyICE9IGRpcmVjdGlvbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxpc3RfZGVsX3JjdSgmYW1wO2Nvbm4tJmd0O2xpc3QpOwomIzQzOwkJbnMtJmd0O3Rscy5jb3VudC0tOwomIzQzOwkJaWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKQomIzQzOwkJCW5zLSZndDt0bHMudHhfY29ubi0tOwomIzQzOwkJZWxzZQomIzQzOwkJCW5zLSZndDt0bHMucnhfY29ubi0tOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwomIzQzOwkJa2ZyZWVfcmN1KGNvbm4sIHJjdSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtUTFMgJXMgY29udGV4dCBub3QgZm91bmQgb24gZGVsXG4mIzM0OywKJiM0MzsJCSAgIGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYID8gJiMzNDt0eCYjMzQ7IDogJiMzNDtyeCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm90aGluZyBpcyBldmVyIG91dCBvZiBzeW5jIGhlcmU6IHRoZSBlbXVsYXRpb24gZG9lcyBub3QgZGVjcnlwdCwgc28gaXQKJiM0MzsgKiBuZXZlciBsb3NlcyB0aGUgcmVjb3JkIGJvdW5kYXJpZXMgYW5kIG5ldmVyIGFza3MgZm9yIGEgcmVzeW5jLiAgVGhlIGNvcmUKJiM0MzsgKiBjYW4gc3RpbGwgY2FsbCBpbiBvbiB0aGUgUlggcGF0aCwgc28gYWNjb3VudCBmb3IgaXQgYW5kIG1vdmUgb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuc2ltX3Rsc19kZXZfcmVzeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkgICAgICAgdTMyIHNlcSwgdTggKnJjZF9zbiwKJiM0MzsJCQkgICAgICAgZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcmVjdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKJiM0MzsJYXRvbWljNjRfaW5jKCZhbXA7bnMtJmd0O3Rscy5yZXN5bmNzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyBuc2ltX3Rsc2Rldl9vcHMgPSB7CiYjNDM7CS50bHNfZGV2X2FkZAk9IG5zaW1fdGxzX2Rldl9hZGQsCiYjNDM7CS50bHNfZGV2X2RlbAk9IG5zaW1fdGxzX2Rldl9kZWwsCiYjNDM7CS50bHNfZGV2X3Jlc3luYwk9IG5zaW1fdGxzX2Rldl9yZXN5bmMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBuc2ltX3Rsc19kYmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKJiM0MzsJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uOwomIzQzOwlzaXplX3QgYnVmc2l6ZTsKJiM0MzsJY2hhciAqYnVmLCAqcDsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJLyogVHdvIGZ1bGwgSVB2NiBhZGRyZXNzZXMgYW5kIHBvcnRzIGZpdCBpbiAxNjAgYnl0ZXMgYSBsaW5lLiAqLwomIzQzOwlidWZzaXplID0gKE5TSU1fVExTX01BWF9DT05OICogMTYwKSAmIzQzOyAyMDA7CiYjNDM7CWJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXAgPSBidWY7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25zLSZndDt0bHMubG9jayk7CiYjNDM7CXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAomIzQzOwkJICAgICAgICYjMzQ7Y29ubiBjb3VudD0ldSB0eD0ldSByeD0ldVxuJiMzNDssCiYjNDM7CQkgICAgICAgbnMtJmd0O3Rscy5jb3VudCwgbnMtJmd0O3Rscy50eF9jb25uLCBucy0mZ3Q7dGxzLnJ4X2Nvbm4pOwomIzQzOwlwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSwKJiM0MzsJCSAgICAgICAmIzM0O3R4X3BhY2tldHM9JWxsdSB0eF9ieXRlcz0lbGx1IHJ4X3BhY2tldHM9JWxsdSByeF9ieXRlcz0lbGx1IHJlc3luY3M9JWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgYXRvbWljNjRfcmVhZCgmYW1wO25zLSZndDt0bHMudHhfcGFja2V0cyksCiYjNDM7CQkgICAgICAgYXRvbWljNjRfcmVhZCgmYW1wO25zLSZndDt0bHMudHhfYnl0ZXMpLAomIzQzOwkJICAgICAgIGF0b21pYzY0X3JlYWQoJmFtcDtucy0mZ3Q7dGxzLnJ4X3BhY2tldHMpLAomIzQzOwkJICAgICAgIGF0b21pYzY0X3JlYWQoJmFtcDtucy0mZ3Q7dGxzLnJ4X2J5dGVzKSwKJiM0MzsJCSAgICAgICBhdG9taWM2NF9yZWFkKCZhbXA7bnMtJmd0O3Rscy5yZXN5bmNzKSk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmFtcDtucy0mZ3Q7dGxzLmNvbm5zLCBsaXN0KSB7CiYjNDM7CQlpZiAoY29ubi0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQ2KQomIzQzOwkJCXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAomIzQzOwkJCQkgICAgICAgJiMzNDslcyBbJXBJNmNdOiV1IC0mZ3Q7IFslcEk2Y106JXUgY2lwaGVyPSV1IHNuPSV1XG4mIzM0OywKJiM0MzsJCQkJICAgICAgIGNvbm4tJmd0O2RpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYID8KJiM0MzsJCQkJICAgICAgICYjMzQ7dHgmIzM0OyA6ICYjMzQ7cngmIzM0OywKJiM0MzsJCQkJICAgICAgICZhbXA7Y29ubi0mZ3Q7bGFkZHIsIG50b2hzKGNvbm4tJmd0O2xwb3J0KSwKJiM0MzsJCQkJICAgICAgICZhbXA7Y29ubi0mZ3Q7cmFkZHIsIG50b2hzKGNvbm4tJmd0O3Jwb3J0KSwKJiM0MzsJCQkJICAgICAgIGNvbm4tJmd0O2NpcGhlcl90eXBlLCBjb25uLSZndDtzdGFydF9zbik7CiYjNDM7CQllbHNlCiYjNDM7CQkJcCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzICVwSTQ6JXUgLSZndDsgJXBJNDoldSBjaXBoZXI9JXUgc249JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgY29ubi0mZ3Q7ZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggPwomIzQzOwkJCQkgICAgICAgJiMzNDt0eCYjMzQ7IDogJiMzNDtyeCYjMzQ7LAomIzQzOwkJCQkgICAgICAgJmFtcDtjb25uLSZndDtsYWRkci5zNl9hZGRyMzJbM10sCiYjNDM7CQkJCSAgICAgICBudG9ocyhjb25uLSZndDtscG9ydCksCiYjNDM7CQkJCSAgICAgICAmYW1wO2Nvbm4tJmd0O3JhZGRyLnM2X2FkZHIzMlszXSwKJiM0MzsJCQkJICAgICAgIG50b2hzKGNvbm4tJmd0O3Jwb3J0KSwKJiM0MzsJCQkJICAgICAgIGNvbm4tJmd0O2NpcGhlcl90eXBlLCBjb25uLSZndDtzdGFydF9zbik7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucy0mZ3Q7dGxzLmxvY2spOwomIzQzOwomIzQzOwlsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwomIzQzOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3Rsc19kYmdfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuID0gc2ltcGxlX29wZW4sCiYjNDM7CS5yZWFkID0gbnNpbV90bHNfZGJnX3JlYWQsCiYjNDM7CS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykKJiM0Mzt7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7bnMtJmd0O3Rscy5jb25ucyk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsKJiM0MzsJbnMtJmd0O25ldGRldi0mZ3Q7dGxzZGV2X29wcyA9ICZhbXA7bnNpbV90bHNkZXZfb3BzOwomIzQzOwlucy0mZ3Q7bmV0ZGV2LSZndDtmZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUzsKJiM0MzsJbnMtJmd0O25ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTlNJTV9UTFNfRkVBVFVSRVM7CiYjNDM7CiYjNDM7CW5zLSZndDt0bHMuZGZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7dGxzJiMzNDssIDA0MDAsCiYjNDM7CQkJCQkgICAgbnMtJmd0O25zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAomIzQzOwkJCQkJICAgICZhbXA7bnNpbV90bHNfZGJnX2ZvcHMpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7CiYjNDM7CXUzMiBsZWZ0OwomIzQzOwomIzQzOwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnMtJmd0O3Rscy5kZmlsZSk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25zLSZndDt0bHMubG9jayk7CiYjNDM7CWxlZnQgPSBucy0mZ3Q7dGxzLmNvdW50OwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgdG1wLCAmYW1wO25zLSZndDt0bHMuY29ubnMsIGxpc3QpIHsKJiM0MzsJCWxpc3RfZGVsX3JjdSgmYW1wO2Nvbm4tJmd0O2xpc3QpOwomIzQzOwkJa2ZyZWVfcmN1KGNvbm4sIHJjdSk7CiYjNDM7CX0KJiM0MzsJbnMtJmd0O3Rscy5jb3VudCA9IDA7CiYjNDM7CW5zLSZndDt0bHMudHhfY29ubiA9IDA7CiYjNDM7CW5zLSZndDt0bHMucnhfY29ubiA9IDA7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bnMtJmd0O3Rscy5sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGxlZnQpCiYjNDM7CQluZXRkZXZfZXJyKG5zLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDt0ZWFyaW5nIGRvd24gVExTIG9mZmxvYWQgd2l0aCAldSBjb25uZWN0aW9ucyBsZWZ0XG4mIzM0OywKJiM0MzsJCQkgICBsZWZ0KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZQpAQCAtMCwwICYjNDM7MSwyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7dGxzX29mZmxvYWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZQppbmRleCA5ODA4YzJmYmFlOWU4Li41YmViNGVkNjRlYjUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlCkBAIC0xLDUgJiM0MzsxLDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOyBPUiBNSVQKIAomIzQzO0NGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKQomIzQzOwogVEVTVF9QUk9HUyA6PSBcCiAJZGV2bGluay5zaCBcCiAJZGV2bGlua19pbl9uZXRucy5zaCBcCkBAIC0xNSw5ICYjNDM7MTcsMTQgQEAgVEVTVF9QUk9HUyA6PSBcCiAJcGVlci5zaCBcCiAJcHNhbXBsZS5zaCBcCiAJdGMtbXEtdmlzaWJpbGl0eS5zaCBcCiYjNDM7CXRscy5zaCBcCiAJdWRwX3R1bm5lbF9uaWMuc2ggXAogIyBlbmQgb2YgVEVTVF9QUk9HUwogCiYjNDM7VEVTVF9HRU5fRklMRVMgOj0gXAomIzQzOwl0bHNfb2ZmbG9hZAomIzQzOyMgZW5kIG9mIFRFU1RfR0VOX0ZJTEVTCiYjNDM7CiBURVNUX0ZJTEVTIDo9IFwKIAlldGh0b29sLWNvbW1vbi5zaAogIyBlbmQgb2YgVEVTVF9GSUxFUwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzk5ZTJjNGQzODJkZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2gKQEAgLTAsMCAmIzQzOzEsMjcxIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBFeGVyY2lzZSBuZXRkZXZzaW0mIzM5O3MgZW11bGF0ZWQga1RMUyBkZXZpY2Ugb2ZmbG9hZCBvdmVyIGEgbGlua2VkCiYjNDM7IyBuZXRkZXZzaW0gcGFpciwgb25lIHBvcnQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlLgomIzQzOyMKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNTQgIyBrc2Z0X3NraXAgY29tZXMgZnJvbSBsaWIuc2gKJiM0MzsKJiM0MztsaWJfZGlyPSQoZGlybmFtZSAmIzM0OyQwJiMzNDspCiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLy4uLy4uLy4uL25ldC9saWIuc2gKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTEKJiM0Mztzb3VyY2UgJiMzNDskbGliX2RpciYjMzQ7Ly4uLy4uLy4uL25ldC9saWIuc2gKJiM0MzsKJiM0MztOU0lNX0RFVl8xX0lEPSQoKDI1NiAmIzQzOyBSQU5ET00gJSAyNTYpKQomIzQzO05TSU1fREVWXzFfU1lTPS9zeXMvYnVzL25ldGRldnNpbS9kZXZpY2VzL25ldGRldnNpbSROU0lNX0RFVl8xX0lECiYjNDM7TlNJTV9ERVZfMl9JRD0kKCg1MTIgJiM0MzsgUkFORE9NICUgMjU2KSkKJiM0MztOU0lNX0RFVl8yX1NZUz0vc3lzL2J1cy9uZXRkZXZzaW0vZGV2aWNlcy9uZXRkZXZzaW0kTlNJTV9ERVZfMl9JRAomIzQzOwomIzQzO05TSU1fREVWX1NZU19ORVc9L3N5cy9idXMvbmV0ZGV2c2ltL25ld19kZXZpY2UKJiM0MztOU0lNX0RFVl9TWVNfREVMPS9zeXMvYnVzL25ldGRldnNpbS9kZWxfZGV2aWNlCiYjNDM7TlNJTV9ERVZfU1lTX0xJTks9L3N5cy9idXMvbmV0ZGV2c2ltL2xpbmtfZGV2aWNlCiYjNDM7CiYjNDM7REVCVUdGUz0vc3lzL2tlcm5lbC9kZWJ1Zy9uZXRkZXZzaW0KJiM0MztOU0lNX0RFVl8xX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMV9JRC9wb3J0cy8wL3RscwomIzQzO05TSU1fREVWXzJfVExTPSRERUJVR0ZTL25ldGRldnNpbSROU0lNX0RFVl8yX0lEL3BvcnRzLzAvdGxzCiYjNDM7CiYjNDM7U1JWX0lQPTE5Mi4xNjguMTMuMQomIzQzO0NMSV9JUD0xOTIuMTY4LjEzLjIKJiM0MztQT1JUPTQ0MzMKJiM0MzsKJiM0MztTWU5DRElSPQomIzQzO0JJTj0kbGliX2Rpci90bHNfb2ZmbG9hZAomIzQzOwomIzQzO251bV9wYXNzPTAKJiM0MztudW1fZmFpbD0wCiYjNDM7CiYjNDM7Y2hlY2soKQomIzQzO3sKJiM0MzsJbG9jYWwgbXNnPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCByZXQ9JiMzNDskMiYjMzQ7CiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskcmV0JiMzNDsgLWVxIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1BBU1M6ICRtc2cmIzM0OwomIzQzOwkJbnVtX3Bhc3M9JCgobnVtX3Bhc3MgJiM0MzsgMSkpCiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAkbXNnJiMzNDsKJiM0MzsJCW51bV9mYWlsPSQoKG51bV9mYWlsICYjNDM7IDEpKQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcsU0MyMzI5ICMgaW52b2tlZCBmcm9tIHRoZSBFWElUIHRyYXAKJiM0MztjbGVhbnVwKCkKJiM0Mzt7CiYjNDM7CWlwIG5ldG5zIGRlbCBuc2NsIDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIG5ldG5zIGRlbCBuc3N2IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gJiMzNDskTlNJTV9ERVZfMl9JRCYjMzQ7ICZndDsgJiMzNDskTlNJTV9ERVZfU1lTX0RFTCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gJiMzNDskTlNJTV9ERVZfMV9JRCYjMzQ7ICZndDsgJiMzNDskTlNJTV9ERVZfU1lTX0RFTCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CVsgLW4gJiMzNDskU1lOQ0RJUiYjMzQ7IF0gJmFtcDsmYW1wOyBybSAtcmYgJiMzNDskU1lOQ0RJUiYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3NldHVwKCkKJiM0Mzt7CiYjNDM7CXNldCAtZQomIzQzOwomIzQzOwllY2hvICYjMzQ7JE5TSU1fREVWXzFfSUQmIzM0OyAmZ3Q7ICYjMzQ7JE5TSU1fREVWX1NZU19ORVcmIzM0OwomIzQzOwllY2hvICYjMzQ7JE5TSU1fREVWXzJfSUQmIzM0OyAmZ3Q7ICYjMzQ7JE5TSU1fREVWX1NZU19ORVcmIzM0OwomIzQzOwl1ZGV2YWRtIHNldHRsZSAyJmd0Oy9kZXYvbnVsbCB8fCBzbGVlcCAxCiYjNDM7CiYjNDM7CU5TSU1fREVWXzFfTkFNRT0kKGZpbmQgJiMzNDskTlNJTV9ERVZfMV9TWVMmIzM0Oy9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFwKJiM0MzsJCS1wYXRoICYjMzQ7JE5TSU1fREVWXzFfU1lTJiMzNDsvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFw7KQomIzQzOwlOU0lNX0RFVl8yX05BTUU9JChmaW5kICYjMzQ7JE5TSU1fREVWXzJfU1lTJiMzNDsvbmV0IC1tYXhkZXB0aCAxIC10eXBlIGQgISBcCiYjNDM7CQktcGF0aCAmIzM0OyROU0lNX0RFVl8yX1NZUyYjMzQ7L25ldCAtZXhlYyBiYXNlbmFtZSB7fSBcOykKJiM0MzsKJiM0MzsJaXAgbmV0bnMgYWRkIG5zc3YKJiM0MzsJaXAgbmV0bnMgYWRkIG5zY2wKJiM0MzsKJiM0MzsJaXAgbGluayBzZXQgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgbmV0bnMgbnNzdgomIzQzOwlpcCBsaW5rIHNldCAmIzM0OyROU0lNX0RFVl8yX05BTUUmIzM0OyBuZXRucyBuc2NsCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBhZGRyIGFkZCAmIzM0OyRTUlZfSVAvMjQmIzM0OyBkZXYgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsKJiM0MzsJaXAgbmV0bnMgZXhlYyBuc2NsIGlwIGFkZHIgYWRkICYjMzQ7JENMSV9JUC8yNCYjMzQ7IGRldiAmIzM0OyROU0lNX0RFVl8yX05BTUUmIzM0OwomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICYjMzQ7JE5TSU1fREVWXzFfTkFNRSYjMzQ7IHVwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBsaW5rIHNldCBkZXYgJiMzNDskTlNJTV9ERVZfMl9OQU1FJiMzNDsgdXAKJiM0MzsKJiM0MzsJTlNJTV9ERVZfMV9GRD0kKCgyNTYgJiM0MzsgUkFORE9NICUgMjU2KSkKJiM0MzsJZXhlYyB7TlNJTV9ERVZfMV9GRH0mbHQ7L3Zhci9ydW4vbmV0bnMvbnNzdgomIzQzOwlOU0lNX0RFVl8xX0lGSURYPSQoaXAgbmV0bnMgZXhlYyBuc3N2IFwKJiM0MzsJCWNhdCAvc3lzL2NsYXNzL25ldC8mIzM0OyROU0lNX0RFVl8xX05BTUUmIzM0Oy9pZmluZGV4KQomIzQzOwomIzQzOwlOU0lNX0RFVl8yX0ZEPSQoKDI1NiAmIzQzOyBSQU5ET00gJSAyNTYpKQomIzQzOwlleGVjIHtOU0lNX0RFVl8yX0ZEfSZsdDsvdmFyL3J1bi9uZXRucy9uc2NsCiYjNDM7CU5TSU1fREVWXzJfSUZJRFg9JChpcCBuZXRucyBleGVjIG5zY2wgXAomIzQzOwkJY2F0IC9zeXMvY2xhc3MvbmV0LyYjMzQ7JE5TSU1fREVWXzJfTkFNRSYjMzQ7L2lmaW5kZXgpCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDskTlNJTV9ERVZfMV9GRDokTlNJTV9ERVZfMV9JRklEWCAkTlNJTV9ERVZfMl9GRDokTlNJTV9ERVZfMl9JRklEWCYjMzQ7IFwKJiM0MzsJCSZndDsgJiMzNDskTlNJTV9ERVZfU1lTX0xJTksmIzM0OwomIzQzOwomIzQzOwlTWU5DRElSPSQobWt0ZW1wIC1kKQomIzQzOwlzZXQgJiM0MztlCiYjNDM7fQomIzQzOwomIzQzO2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmV0bnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZmVhdD0mIzM0OyQzJiMzNDsKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuZXRucyYjMzQ7IGV0aHRvb2wgLWsgJiMzNDskZGV2JiMzNDsgMiZndDsvZGV2L251bGwgfCBcCiYjNDM7CQlzZWQgLW4gJiMzNDtzL14kZmVhdDogXChbYS16XSpcKS4qL1wxL3AmIzM0OwomIzQzO30KJiM0MzsKJiM0MztkYmdfZmllbGQoKQomIzQzO3sKJiM0MzsJc2VkIC1uICYjMzQ7cy8uKlwmbHQ7JDI9XChbMC05XSpcKS4qL1wxL3AmIzM0OyAmIzM0OyQxJiMzNDsgfCBoZWFkIC0xCiYjNDM7fQomIzQzOwomIzQzO3Rsc19zdGF0KCkKJiM0Mzt7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskMSYjMzQ7IGNhdCAvcHJvYy9uZXQvdGxzX3N0YXQgfCBcCiYjNDM7CQlzZWQgLW4gJiMzNDtzL14kMiBcKFswLTldKlwpL1wxL3AmIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIEJvdGggZW5kcyBwYXJrIG9uY2UgdGhlaXIgb2ZmbG9hZCBpcyBpbnN0YWxsZWQgYW5kIGJlZm9yZSBhbnkgZGF0YSBpcwomIzQzOyMgc2VudCwgc28gdGhlIGRyaXZlciYjMzk7cyBjb250ZXh0IGNvdW50IGNhbiBiZSBzYW1wbGVkIHdpdGhvdXQgcmFjaW5nIHRoZQomIzQzOyMgdHJhbnNmZXIuICBQYXNzICYjMzQ7bm9zYW1wbGUmIzM0OyB3aGVuIHRoZSBvZmZsb2FkIGlzIGV4cGVjdGVkIHRvIGJlIHJlZnVzZWQsCiYjNDM7IyBzaW5jZSB0aGVuIG5laXRoZXIgZW5kIGV2ZXIgcmVhY2hlcyB0aGUgYmFycmllci4KJiM0MztydW5fcGFpcigpCiYjNDM7ewomIzQzOwlsb2NhbCBzYW1wbGU9JiMzNDskezE6LXNhbXBsZX0mIzM0OwomIzQzOwlsb2NhbCBzcnZfcmMgY2xpX3JjIHdhaXRlZD0wCiYjNDM7CiYjNDM7CXJtIC1mICYjMzQ7JFNZTkNESVImIzM0Oy8qLnJlYWR5ICYjMzQ7JFNZTkNESVImIzM0Oy9nbwomIzQzOwlDT05OU18xPTAKJiM0MzsJQ09OTlNfMj0wCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNzdiAmIzM0OyRCSU4mIzM0OyBzZXJ2ZXIgJiMzNDskU1JWX0lQJiMzNDsgJiMzNDskUE9SVCYjMzQ7ICYjMzQ7JFNZTkNESVImIzM0OyAmYW1wOwomIzQzOwlsb2NhbCBzcnZfcGlkPSQhCiYjNDM7CWlwIG5ldG5zIGV4ZWMgbnNjbCAmIzM0OyRCSU4mIzM0OyBjbGllbnQgJiMzNDskU1JWX0lQJiMzNDsgJiMzNDskUE9SVCYjMzQ7ICYjMzQ7JFNZTkNESVImIzM0OyAmYW1wOwomIzQzOwlsb2NhbCBjbGlfcGlkPSQhCiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskc2FtcGxlJiMzNDsgPSAmIzM0O3NhbXBsZSYjMzQ7IF07IHRoZW4KJiM0MzsJCXdoaWxlIFsgISAtZSAmIzM0OyRTWU5DRElSL3NlcnZlci5yZWFkeSYjMzQ7IF0gfHwKJiM0MzsJCSAgICAgIFsgISAtZSAmIzM0OyRTWU5DRElSL2NsaWVudC5yZWFkeSYjMzQ7IF07IGRvCiYjNDM7CQkJWyAmIzM0OyR3YWl0ZWQmIzM0OyAtZ2UgMjAwIF0gJmFtcDsmYW1wOyBicmVhawomIzQzOwkJCXNsZWVwIDAuMDUKJiM0MzsJCQl3YWl0ZWQ9JCgod2FpdGVkICYjNDM7IDEpKQomIzQzOwkJZG9uZQomIzQzOwkJQ09OTlNfMT0kKGRiZ19maWVsZCAmIzM0OyROU0lNX0RFVl8xX1RMUyYjMzQ7IGNvdW50KQomIzQzOwkJQ09OTlNfMj0kKGRiZ19maWVsZCAmIzM0OyROU0lNX0RFVl8yX1RMUyYjMzQ7IGNvdW50KQomIzQzOwkJOiAmIzM0OyR7Q09OTlNfMTo9MH0mIzM0OwomIzQzOwkJOiAmIzM0OyR7Q09OTlNfMjo9MH0mIzM0OwomIzQzOwlmaQomIzQzOwl0b3VjaCAmIzM0OyRTWU5DRElSL2dvJiMzNDsKJiM0MzsKJiM0MzsJd2FpdCAmIzM0OyRzcnZfcGlkJiMzNDs7IHNydl9yYz0kPwomIzQzOwl3YWl0ICYjMzQ7JGNsaV9waWQmIzM0OzsgY2xpX3JjPSQ/CiYjNDM7CiYjNDM7CVsgJiMzNDskc3J2X3JjJiMzNDsgLWVxIDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskY2xpX3JjJiMzNDsgLWVxIDAgXQomIzQzO30KJiM0MzsKJiM0MzsjIyMKJiM0MzsjIyMgQ29kZSBzdGFydAomIzQzOyMjIwomIzQzOwomIzQzO2lmIFsgJiMzNDskKGlkIC11KSYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IG5lZWQgcm9vdCYjMzQ7CiYjNDM7CWV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmICEgY29tbWFuZCAtdiBldGh0b29sICZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IGV0aHRvb2wgbm90IGZvdW5kJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7aWYgWyAhIC14ICYjMzQ7JEJJTiYjMzQ7IF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6ICRCSU4gbm90IGJ1aWx0JiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7bW9kcHJvYmUgbmV0ZGV2c2ltIDImZ3Q7L2Rldi9udWxsCiYjNDM7aWYgWyAhIC1kIC9zeXMvYnVzL25ldGRldnNpbSBdOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBuZXRkZXZzaW0gbm90IGF2YWlsYWJsZSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO21vZHByb2JlIHRscyAyJmd0Oy9kZXYvbnVsbAomIzQzO2lmIFsgISAtZSAvcHJvYy9uZXQvdGxzX3N0YXQgXTsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDoga2VybmVsIFRMUyBub3QgYXZhaWxhYmxlJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7dHJhcCBjbGVhbnVwIEVYSVQKJiM0MztzZXR1cAomIzQzOwomIzQzOyMgVGhlIG9mZmxvYWQgaGFzIHRvIGJlIGFkdmVydGlzZWQsIGFuZCBvbiBieSBkZWZhdWx0IGxpa2UgdGhlIG90aGVyCiYjNDM7IyBuZXRkZXZzaW0gY3J5cHRvIG9mZmxvYWRzLgomIzQzO2ZvciBmIGluIHRscy1ody10eC1vZmZsb2FkIHRscy1ody1yeC1vZmZsb2FkOyBkbwomIzQzOwlbICYjMzQ7JChmZWF0dXJlIG5zc3YgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgJiMzNDskZiYjMzQ7KSYjMzQ7ID0gJiMzNDtvbiYjMzQ7IF0KJiM0MzsJY2hlY2sgJiMzNDskZiBhZHZlcnRpc2VkIGFuZCBvbiBieSBkZWZhdWx0JiMzNDsgJD8KJiM0Mztkb25lCiYjNDM7CiYjNDM7WyAtZSAmIzM0OyROU0lNX0RFVl8xX1RMUyYjMzQ7IF0KJiM0MztjaGVjayAmIzM0O3Blci1wb3J0IGRlYnVnZnMgdGxzIGZpbGUgZXhpc3RzJiMzNDsgJD8KJiM0MzsKJiM0MzsjIE1haW4gZGF0YSBwYXRoIHJ1bi4KJiM0MztydW5fcGFpcgomIzQzO2NoZWNrICYjMzQ7b2ZmbG9hZGVkIFRMUyBkYXRhIHRyYW5zZmVyJiMzNDsgJD8KJiM0MzsKJiM0MzsjIFNhbXBsZWQgYXQgdGhlIGJhcnJpZXIsIHNvIGVhY2ggcG9ydCBtdXN0IGJlIGhvbGRpbmcgZXhhY3RseSB0aGUgVFggYW5kCiYjNDM7IyB0aGUgUlggY29udGV4dCBvZiBpdHMgb3duIHNvY2tldC4KJiM0MztbICYjMzQ7JENPTk5TXzEmIzM0OyAtZXEgMiBdICZhbXA7JmFtcDsgWyAmIzM0OyRDT05OU18yJiMzNDsgLWVxIDIgXQomIzQzO2NoZWNrICYjMzQ7dHggYW5kIHJ4IGNvbnRleHRzIGluc3RhbGxlZCBvbiBib3RoIHBvcnRzJiMzNDsgJD8KJiM0MzsKJiM0MzsjIEJvdGggZW5kcyBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHRoZSBkZXZpY2UgcGF0aCwgbm90IHRoZSBTVyBmYWxsYmFjay4KJiM0MztbICYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKSYjMzQ7IC1nZSAxIF0gJmFtcDsmYW1wOyBcCiYjNDM7CVsgJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzUnhEZXZpY2UpJiMzNDsgLWdlIDEgXSAmYW1wOyZhbXA7IFwKJiM0MzsJWyAmIzM0OyQodGxzX3N0YXQgbnNjbCBUbHNUeERldmljZSkmIzM0OyAtZ2UgMSBdICZhbXA7JmFtcDsgXAomIzQzOwlbICYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKSYjMzQ7IC1nZSAxIF0KJiM0MztjaGVjayAmIzM0O2JvdGggZW5kcyB1c2VkIHRoZSBkZXZpY2UgcGF0aCYjMzQ7ICQ/CiYjNDM7CiYjNDM7WyAmIzM0OyQodGxzX3N0YXQgbnNzdiBUbHNUeFN3KSYjMzQ7IC1lcSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc1R4U3cpJiMzNDsgLWVxIDAgXQomIzQzO2NoZWNrICYjMzQ7bm8gc2lsZW50IGZhbGxiYWNrIHRvIHRoZSBzb2Z0d2FyZSBwYXRoJiMzNDsgJD8KJiM0MzsKJiM0MztbICYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc0RlY3J5cHRFcnJvcikmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgXAomIzQzOwlbICYjMzQ7JCh0bHNfc3RhdCBuc2NsIFRsc0RlY3J5cHRFcnJvcikmIzM0OyAtZXEgMCBdCiYjNDM7Y2hlY2sgJiMzNDtubyBkZWNyeXB0IGVycm9ycyYjMzQ7ICQ/CiYjNDM7CiYjNDM7IyBUaGUgZHJpdmVyIG11c3QgaGF2ZSBzZWVuIHRoZSByZWNvcmRzIGdvIGJ5IGluIGJvdGggZGlyZWN0aW9ucy4KJiM0MztbICYjMzQ7JChkYmdfZmllbGQgJiMzNDskTlNJTV9ERVZfMV9UTFMmIzM0OyB0eF9wYWNrZXRzKSYjMzQ7IC1nZSAxIF0gJmFtcDsmYW1wOyBcCiYjNDM7CVsgJiMzNDskKGRiZ19maWVsZCAmIzM0OyROU0lNX0RFVl8xX1RMUyYjMzQ7IHJ4X3BhY2tldHMpJiMzNDsgLWdlIDEgXSAmYW1wOyZhbXA7IFwKJiM0MzsJWyAmIzM0OyQoZGJnX2ZpZWxkICYjMzQ7JE5TSU1fREVWXzJfVExTJiMzNDsgdHhfcGFja2V0cykmIzM0OyAtZ2UgMSBdICZhbXA7JmFtcDsgXAomIzQzOwlbICYjMzQ7JChkYmdfZmllbGQgJiMzNDskTlNJTV9ERVZfMl9UTFMmIzM0OyByeF9wYWNrZXRzKSYjMzQ7IC1nZSAxIF0KJiM0MztjaGVjayAmIzM0O2RyaXZlciBjb3VudGVkIG9mZmxvYWRlZCBwYWNrZXRzIGJvdGggd2F5cyYjMzQ7ICQ/CiYjNDM7CiYjNDM7IyBTb2NrZXRzIGFyZSBjbG9zZWQgYnkgbm93LCBzbyBldmVyeSBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGdpdmVuIGJhY2suCiYjNDM7WyAmIzM0OyQoZGJnX2ZpZWxkICYjMzQ7JE5TSU1fREVWXzFfVExTJiMzNDsgY291bnQpJiMzNDsgLWVxIDAgXSAmYW1wOyZhbXA7IFwKJiM0MzsJWyAmIzM0OyQoZGJnX2ZpZWxkICYjMzQ7JE5TSU1fREVWXzJfVExTJiMzNDsgY291bnQpJiMzNDsgLWVxIDAgXQomIzQzO2NoZWNrICYjMzQ7YWxsIG9mZmxvYWQgY29udGV4dHMgcmVsZWFzZWQgb24gY2xvc2UmIzM0OyAkPwomIzQzOwomIzQzO1sgJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzQ3VyclR4RGV2aWNlKSYjMzQ7IC1lcSAwIF0gJmFtcDsmYW1wOyBcCiYjNDM7CVsgJiMzNDskKHRsc19zdGF0IG5zc3YgVGxzQ3VyclJ4RGV2aWNlKSYjMzQ7IC1lcSAwIF0KJiM0MztjaGVjayAmIzM0O25vIGRldmljZSBjb250ZXh0cyBsZWZ0IGJlaGluZCYjMzQ7ICQ/CiYjNDM7CiYjNDM7IyBUdXJuaW5nIHRoZSBmZWF0dXJlIG9mZiBoYXMgdG8gbWFrZSB0aGUgb2ZmbG9hZCByZWZ1c2UgdGhlIGNvbm5lY3Rpb247CiYjNDM7IyB0aGUgdGVzdCBiaW5hcnkgaW5zaXN0cyBvbiB0aGUgZGV2aWNlIHBhdGgsIHNvIGl0IG11c3Qgbm93IGZhaWwuCiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmCiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmCiYjNDM7aXAgbmV0bnMgZXhlYyBuc2NsIGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMl9OQU1FJiMzNDsgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmCiYjNDM7aXAgbmV0bnMgZXhlYyBuc2NsIGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMl9OQU1FJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb2ZmCiYjNDM7CiYjNDM7cnVuX3BhaXIgbm9zYW1wbGUKJiM0MztyYz0kPwomIzQzO1sgJiMzNDskcmMmIzM0OyAtbmUgMCBdCiYjNDM7Y2hlY2sgJiMzNDtvZmZsb2FkIGRlY2xpbmVkIG9uY2UgdGhlIGZlYXR1cmUgaXMgb2ZmJiMzNDsgJD8KJiM0MzsKJiM0MztbICYjMzQ7JCh0bHNfc3RhdCBuc3N2IFRsc1R4U3cpJiMzNDsgLWdlIDEgXQomIzQzO2NoZWNrICYjMzQ7c29mdHdhcmUgcGF0aCB1c2VkIHdoZW4gb2ZmbG9hZCBpcyBvZmYmIzM0OyAkPwomIzQzOwomIzQzO2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LICYjMzQ7JE5TSU1fREVWXzFfTkFNRSYjMzQ7IHRscy1ody10eC1vZmZsb2FkIG9uCiYjNDM7aXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgJiMzNDskTlNJTV9ERVZfMV9OQU1FJiMzNDsgdGxzLWh3LXJ4LW9mZmxvYWQgb24KJiM0MztpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyAmIzM0OyROU0lNX0RFVl8yX05BTUUmIzM0OyB0bHMtaHctdHgtb2ZmbG9hZCBvbgomIzQzO2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LICYjMzQ7JE5TSU1fREVWXzJfTkFNRSYjMzQ7IHRscy1ody1yeC1vZmZsb2FkIG9uCiYjNDM7CiYjNDM7cnVuX3BhaXIKJiM0MztjaGVjayAmIzM0O29mZmxvYWQgd29ya3MgYWdhaW4gYWZ0ZXIgcmUtZW5hYmxpbmcmIzM0OyAkPwomIzQzOwomIzQzO2VjaG8KJiM0MztlY2hvICYjMzQ7cGFzc2VkOiAkbnVtX3Bhc3MgZmFpbGVkOiAkbnVtX2ZhaWwmIzM0OwomIzQzO1sgJiMzNDskbnVtX2ZhaWwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgZXhpdCAwCiYjNDM7ZXhpdCAxCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHNfb2ZmbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmI0YmZjZDRmNDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuYwpAQCAtMCwwICYjNDM7MSw0OTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICoga1RMUyBkZXZpY2Ugb2ZmbG9hZCBkYXRhIHBhdGggZXhlcmNpc2UsIGRyaXZlbiBieSB0bHMuc2guCiYjNDM7ICoKJiM0MzsgKiBPbmUgaW5zdGFuY2UgcnVucyBhcyB0aGUgc2VydmVyIGFuZCBvbmUgYXMgdGhlIGNsaWVudCwgZWFjaCBpbiBpdHMgb3duCiYjNDM7ICogbmV0d29yayBuYW1lc3BhY2UsIGNvbm5lY3RlZCBiYWNrIHRvIGJhY2sgYnkgYSBsaW5rZWQgbmV0ZGV2c2ltIHBhaXIuCiYjNDM7ICogQm90aCBlbmRzIGVuYWJsZSBrVExTIGFuZCByZWx5IG9uIG5ldGRldnNpbSYjMzk7cyBlbXVsYXRlZCBUTFMgb2ZmbG9hZCwgc28KJiM0MzsgKiBldmVyeSByZWNvcmQgdHJhdmVscyB0aHJvdWdoIG5ldC90bHMvdGxzX2RldmljZS5jIHJhdGhlciB0aGFuIHRoZQomIzQzOyAqIHNvZnR3YXJlIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBUaGUgdHdvIHByb2Nlc3NlcyByZW5kZXp2b3VzIHRocm91Z2ggYSBzaGFyZWQgZGlyZWN0b3J5IHNvIHRoYXQgbmVpdGhlcgomIzQzOyAqIHNpZGUgc2VuZHMgYmVmb3JlIHRoZSBvdGhlciBoYXMgaW5zdGFsbGVkIGl0cyBSWCBvZmZsb2FkLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXRpbmV0L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Rscy5oJmd0OwomIzQzOwomIzQzOyNpZm5kZWYgU09MX1RMUwomIzQzOyNkZWZpbmUgU09MX1RMUwkJCTI4MgomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgVENQX1VMUAomIzQzOyNkZWZpbmUgVENQX1VMUAkJCTMxCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBCVUxLX0xFTgkJKDIwMCAqIDEwMjQpCiYjNDM7I2RlZmluZSBNT1JFX0ZSQUdTCQk2NAomIzQzOyNkZWZpbmUgU1BMSUNFX0ZSQUdfTEVOCQk0MDk2CiYjNDM7I2RlZmluZSBTUExJQ0VfRlJBR1MJCTgKJiM0MzsKJiM0MzsvKiBUTFNfTUlOX1JFQ09SRF9TSVpFX0xJTSBhbmQgVExTX01BWF9QQVlMT0FEX1NJWkUsIHdoaWNoIGFyZSBub3QgdWFwaS4gKi8KJiM0MzsjZGVmaW5lIFJFQ19MSU1fTUlOCQk2NAomIzQzOyNkZWZpbmUgUkVDX0xJTV9NQVgJCTE2Mzg0CiYjNDM7CiYjNDM7I2RlZmluZSBTTUFMTF9SRUNTCQkxMDAKJiM0MzsjZGVmaW5lIFNNQUxMX0xFTgkJKFJFQ19MSU1fTUlOICogU01BTExfUkVDUykKJiM0MzsKJiM0MzsjZGVmaW5lIFNZTkNfVElNRU9VVF9NUwkJMjAwMDAKJiM0MzsjZGVmaW5lIENPTk5FQ1RfVElNRU9VVF9NUwkyMDAwMAomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpyb2xlOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICp3aGF0KQomIzQzO3sKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6ICVzOiAlc1xuJiMzNDssIHJvbGUsIHdoYXQsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWV4aXQoMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZhaWwoY29uc3QgY2hhciAqZm10LCAuLi4pCiYjNDM7ewomIzQzOwl2YV9saXN0IGFwOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDslczogJiMzNDssIHJvbGUpOwomIzQzOwl2YV9zdGFydChhcCwgZm10KTsKJiM0MzsJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKJiM0MzsJdmFfZW5kKGFwKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CWV4aXQoMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1zbGVlcCh1bnNpZ25lZCBpbnQgbXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7CiYjNDM7CQkudHZfc2VjID0gbXMgLyAxMDAwLAomIzQzOwkJLnR2X25zZWMgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDBMLAomIzQzOwl9OwomIzQzOwomIzQzOwluYW5vc2xlZXAoJmFtcDt0cywgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIC9wcm9jL25ldC90bHNfc3RhdCBpcyBwZXIgbmV0bnMsIHNvIGJvdGggZW5kcyBjYW4gY2hlY2sgdGhhdCB0aGVpciBvd24KJiM0MzsgKiBjb25uZWN0aW9uIHJlYWxseSBsYW5kZWQgb24gdGhlIGRldmljZSBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfdGxzX3N0YXQoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgbGluZVsyNTZdOwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKCYjMzQ7L3Byb2MvbmV0L3Rsc19zdGF0JiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJZGllKCYjMzQ7b3BlbiAvcHJvYy9uZXQvdGxzX3N0YXQmIzM0Oyk7CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CiYjNDM7CQljaGFyIGtleVs2NF07CiYjNDM7CiYjNDM7CQlpZiAoc3NjYW5mKGxpbmUsICYjMzQ7JTYzcyAlbHUmIzM0Oywga2V5LCAmYW1wO3ZhbCkgIT0gMikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghc3RyY21wKGtleSwgbmFtZSkpIHsKJiM0MzsJCQlmY2xvc2UoZik7CiYjNDM7CQkJcmV0dXJuIHZhbDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmY2xvc2UoZik7CiYjNDM7CWZhaWwoJiMzNDslcyBub3QgZm91bmQgaW4gL3Byb2MvbmV0L3Rsc19zdGF0JiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZmlsbF9wYXR0ZXJuKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IHNlZWQpCiYjNDM7ewomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbjsgaSYjNDM7JiM0MzspCiYjNDM7CQlidWZbaV0gPSAoY2hhcikoc2VlZCAmIzQzOyBpICogMzEgJiM0MzsgKGkgJmd0OyZndDsgOCkgKiA3KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcGF0dGVybihjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBzZWVkLAomIzQzOwkJCSAgY29uc3QgY2hhciAqd2hhdCkKJiM0Mzt7CiYjNDM7CWNoYXIgKndhbnQgPSBtYWxsb2MobGVuKTsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghd2FudCkKJiM0MzsJCWRpZSgmIzM0O21hbGxvYyYjMzQ7KTsKJiM0MzsKJiM0MzsJZmlsbF9wYXR0ZXJuKHdhbnQsIGxlbiwgc2VlZCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoYnVmW2ldICE9IHdhbnRbaV0pCiYjNDM7CQkJZmFpbCgmIzM0OyVzOiBwYXlsb2FkIG1pc21hdGNoIGF0IGJ5dGUgJXp1OiBnb3QgMHglMDJ4IHdhbnQgMHglMDJ4JiMzNDssCiYjNDM7CQkJICAgICB3aGF0LCBpLCAodW5zaWduZWQgY2hhcilidWZbaV0sCiYjNDM7CQkJICAgICAodW5zaWduZWQgY2hhcil3YW50W2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmcmVlKHdhbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlzaXplX3QgZG9uZSA9IDA7CiYjNDM7CiYjNDM7CXdoaWxlIChkb25lICZsdDsgbGVuKSB7CiYjNDM7CQlzc2l6ZV90IG4gPSBzZW5kKGZkLCBidWYgJiM0MzsgZG9uZSwgbGVuIC0gZG9uZSwgMCk7CiYjNDM7CiYjNDM7CQlpZiAobiAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWRpZSgmIzM0O3NlbmQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlkb25lICYjNDM7PSBuOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlYWRfYWxsKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IGRvbmUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IGxlbikgewomIzQzOwkJc3NpemVfdCBuID0gcmVjdihmZCwgYnVmICYjNDM7IGRvbmUsIGxlbiAtIGRvbmUsIDApOwomIzQzOwomIzQzOwkJaWYgKG4gJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlkaWUoJiMzNDtyZWN2JiMzNDspOwomIzQzOwkJfQomIzQzOwkJaWYgKG4gPT0gMCkKJiM0MzsJCQlmYWlsKCYjMzQ7cGVlciBjbG9zZWQgYWZ0ZXIgJXp1IG9mICV6dSBieXRlcyYjMzQ7LCBkb25lLCBsZW4pOwomIzQzOwkJZG9uZSAmIzQzOz0gbjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbmFibGVfa3RscyhpbnQgZmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggY2kgPSB7fTsKJiM0MzsJdW5zaWduZWQgbG9uZyB0eF9iZWZvcmUsIHJ4X2JlZm9yZTsKJiM0MzsKJiM0MzsJdHhfYmVmb3JlID0gcmVhZF90bHNfc3RhdCgmIzM0O1Rsc1R4RGV2aWNlJiMzNDspOwomIzQzOwlyeF9iZWZvcmUgPSByZWFkX3Rsc19zdGF0KCYjMzQ7VGxzUnhEZXZpY2UmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgJiMzNDt0bHMmIzM0Oywgc2l6ZW9mKCYjMzQ7dGxzJiMzNDspKSkKJiM0MzsJCWRpZSgmIzM0O3NldHNvY2tvcHQoVENQX1VMUCwgdGxzKSYjMzQ7KTsKJiM0MzsKJiM0MzsJY2kuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OOwomIzQzOwljaS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyODsKJiM0MzsJbWVtc2V0KGNpLml2LCAmIzM5O2kmIzM5Oywgc2l6ZW9mKGNpLml2KSk7CiYjNDM7CW1lbXNldChjaS5rZXksICYjMzk7ayYjMzk7LCBzaXplb2YoY2kua2V5KSk7CiYjNDM7CW1lbXNldChjaS5zYWx0LCAmIzM5O3MmIzM5Oywgc2l6ZW9mKGNpLnNhbHQpKTsKJiM0MzsJbWVtc2V0KGNpLnJlY19zZXEsIDAsIHNpemVvZihjaS5yZWNfc2VxKSk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFgsICZhbXA7Y2ksIHNpemVvZihjaSkpKQomIzQzOwkJZGllKCYjMzQ7c2V0c29ja29wdChUTFNfVFgpJiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1JYLCAmYW1wO2NpLCBzaXplb2YoY2kpKSkKJiM0MzsJCWRpZSgmIzM0O3NldHNvY2tvcHQoVExTX1JYKSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIHdob2xlIHBvaW50IG9mIHRoZSBleGVyY2lzZTogcmVmdXNlIHRvIHNpbGVudGx5IGZhbGwgYmFjayB0bwomIzQzOwkgKiB0aGUgc29mdHdhcmUgcGF0aCwgb3RoZXJ3aXNlIHRoZSB0ZXN0IHdvdWxkIHBhc3Mgd2l0aG91dCBldmVyCiYjNDM7CSAqIHRvdWNoaW5nIHRsc19kZXZpY2UuYy4KJiM0MzsJICovCiYjNDM7CWlmIChyZWFkX3Rsc19zdGF0KCYjMzQ7VGxzVHhEZXZpY2UmIzM0OykgIT0gdHhfYmVmb3JlICYjNDM7IDEpCiYjNDM7CQlmYWlsKCYjMzQ7VFggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzVHhEZXZpY2UgJWx1IC0mZ3Q7ICVsdSkmIzM0OywKJiM0MzsJCSAgICAgdHhfYmVmb3JlLCByZWFkX3Rsc19zdGF0KCYjMzQ7VGxzVHhEZXZpY2UmIzM0OykpOwomIzQzOwlpZiAocmVhZF90bHNfc3RhdCgmIzM0O1Rsc1J4RGV2aWNlJiMzNDspICE9IHJ4X2JlZm9yZSAmIzQzOyAxKQomIzQzOwkJZmFpbCgmIzM0O1JYIGRpZCBub3QgbGFuZCBvbiB0aGUgZGV2aWNlIHBhdGggKFRsc1J4RGV2aWNlICVsdSAtJmd0OyAlbHUpJiMzNDssCiYjNDM7CQkgICAgIHJ4X2JlZm9yZSwgcmVhZF90bHNfc3RhdCgmIzM0O1Rsc1J4RGV2aWNlJiMzNDspKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3luY19wYXRoKGNoYXIgKm91dCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICp3aG8pCiYjNDM7ewomIzQzOwlpZiAoKHNpemVfdClzbnByaW50ZihvdXQsIGxlbiwgJiMzNDslcy8lcy5yZWFkeSYjMzQ7LCBkaXIsIHdobykgJmd0Oz0gbGVuKQomIzQzOwkJZmFpbCgmIzM0O3N5bmMgZGlyIHBhdGggdG9vIGxvbmcmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcikKJiM0Mzt7CiYjNDM7CWNoYXIgbWluZVtQQVRIX01BWF0sIHRoZWlyc1tQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGludCB3YWl0ZWQgPSAwOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CXN5bmNfcGF0aChtaW5lLCBzaXplb2YobWluZSksIGRpciwgbWUpOwomIzQzOwlzeW5jX3BhdGgodGhlaXJzLCBzaXplb2YodGhlaXJzKSwgZGlyLCBwZWVyKTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlkaWUoJiMzNDtjcmVhdGUgc3luYyBmaWxlJiMzNDspOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CXdoaWxlIChhY2Nlc3ModGhlaXJzLCBGX09LKSkgewomIzQzOwkJaWYgKHdhaXRlZCAmZ3Q7PSBTWU5DX1RJTUVPVVRfTVMpCiYjNDM7CQkJZmFpbCgmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciAlcyYjMzQ7LCBwZWVyKTsKJiM0MzsJCW1zbGVlcCgyMCk7CiYjNDM7CQl3YWl0ZWQgJiM0Mzs9IDIwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIEJvdGggZW5kcyBzdG9wIGhlcmUgd2l0aCB0aGVpciBvZmZsb2FkIGluc3RhbGxlZCBhbmQgbm8gZGF0YSBzZW50IHlldCwKJiM0MzsgKiBzbyB0aGF0IHRoZSBkcml2ZXIgc3RhdGUgY2FuIGJlIGluc3BlY3RlZCBmcm9tIHRoZSBvdXRzaWRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX2dvKGNvbnN0IGNoYXIgKmRpcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB3YWl0ZWQgPSAwOwomIzQzOwljaGFyIGdvW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJaWYgKChzaXplX3Qpc25wcmludGYoZ28sIHNpemVvZihnbyksICYjMzQ7JXMvZ28mIzM0OywgZGlyKSAmZ3Q7PSBzaXplb2YoZ28pKQomIzQzOwkJZmFpbCgmIzM0O3N5bmMgZGlyIHBhdGggdG9vIGxvbmcmIzM0Oyk7CiYjNDM7CiYjNDM7CXdoaWxlIChhY2Nlc3MoZ28sIEZfT0spKSB7CiYjNDM7CQlpZiAod2FpdGVkICZndDs9IFNZTkNfVElNRU9VVF9NUykKJiM0MzsJCQlmYWlsKCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIGdvJiMzNDspOwomIzQzOwkJbXNsZWVwKDIwKTsKJiM0MzsJCXdhaXRlZCAmIzQzOz0gMjA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogU21hbGwgd3JpdGVzIHdpdGggTVNHX01PUkUgYWNjdW11bGF0ZSBpbnRvIG9uZSBvcGVuIHJlY29yZCBiZWZvcmUgaXQgaXMKJiM0MzsgKiBwdXNoZWQsIHdoaWNoIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRsc19wdXNoX2RhdGEoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX21zZ19tb3JlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZltNT1JFX0ZSQUdTICYjNDM7IDFdOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTU9SRV9GUkFHUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZW5kKGZkLCBidWYgJiM0MzsgaSwgMSwgTVNHX01PUkUpICE9IDEpCiYjNDM7CQkJZGllKCYjMzQ7c2VuZChNU0dfTU9SRSkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsJaWYgKHNlbmQoZmQsIGJ1ZiAmIzQzOyBNT1JFX0ZSQUdTLCAxLCAwKSAhPSAxKQomIzQzOwkJZGllKCYjMzQ7c2VuZChsYXN0KSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyogc3BsaWNlKCkgcmVhY2hlcyB0bHNfcHVzaF9kYXRhKCkgd2l0aCBNU0dfU1BMSUNFX1BBR0VTIG9uY2UKJiM0MzsgKiBUTFNfVFhfWkVST0NPUFlfUk8gaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBkaXN0aW5jdCBmcmFnbWVudCBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNlbmRfc3BsaWNlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZltTUExJQ0VfRlJBR19MRU5dOwomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sICZhbXA7dmFsLCBzaXplb2YodmFsKSkpCiYjNDM7CQlkaWUoJiMzNDtzZXRzb2Nrb3B0KFRMU19UWF9aRVJPQ09QWV9STykmIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBTUExJQ0VfRlJBR1M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcFsyXTsKJiM0MzsKJiM0MzsJCWZpbGxfcGF0dGVybihidWYsIHNpemVvZihidWYpLCBzZWVkICYjNDM7IGkgKiBTUExJQ0VfRlJBR19MRU4pOwomIzQzOwomIzQzOwkJaWYgKHBpcGUocCkpCiYjNDM7CQkJZGllKCYjMzQ7cGlwZSYjMzQ7KTsKJiM0MzsJCWlmICh3cml0ZShwWzFdLCBidWYsIHNpemVvZihidWYpKSAhPSBzaXplb2YoYnVmKSkKJiM0MzsJCQlkaWUoJiMzNDt3cml0ZSB0byBwaXBlJiMzNDspOwomIzQzOwkJaWYgKHNwbGljZShwWzBdLCBOVUxMLCBmZCwgTlVMTCwgc2l6ZW9mKGJ1ZiksCiYjNDM7CQkJICAgaSA9PSBTUExJQ0VfRlJBR1MgLSAxID8gMCA6IFNQTElDRV9GX01PUkUpICE9CiYjNDM7CQkgICAgc2l6ZW9mKGJ1ZikpCiYjNDM7CQkJZGllKCYjMzQ7c3BsaWNlJiMzNDspOwomIzQzOwkJY2xvc2UocFswXSk7CiYjNDM7CQljbG9zZShwWzFdKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2YWwgPSAwOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLCAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCkpKQomIzQzOwkJZGllKCYjMzQ7c2V0c29ja29wdChUTFNfVFhfWkVST0NPUFlfUk8gb2ZmKSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSByZWNvcmQgY2FuIGJlIHVwIHRvIDE2Sywgc28gbm9ybWFsbHkgb25lIHNlZ21lbnQgY2FycmllcyBhIHBpZWNlIG9mIGEKJiM0MzsgKiBzaW5nbGUgcmVjb3JkLiAgU2hyaW5raW5nIHRoZSBsaW1pdCBwdXRzIGEgZG96ZW4gb3Igc28gd2hvbGUgcmVjb3JkcyBpbgomIzQzOyAqIGV2ZXJ5IHNlZ21lbnQgaW5zdGVhZCwgd2hpY2ggaXMgdGhlIG11bHRpLXJlY29yZCBwYXRoIHRocm91Z2ggdGhlIGRyaXZlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX3NtYWxsX3JlY29yZHMoaW50IGZkLCB1bnNpZ25lZCBpbnQgc2VlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmW1NNQUxMX0xFTl07CiYjNDM7CXVpbnQxNl90IGxpbWl0OwomIzQzOwomIzQzOwlsaW1pdCA9IFJFQ19MSU1fTUlOOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgJmFtcDtsaW1pdCwKJiM0MzsJCSAgICAgICBzaXplb2YobGltaXQpKSkKJiM0MzsJCWRpZSgmIzM0O3NldHNvY2tvcHQoVExTX1RYX01BWF9QQVlMT0FEX0xFTikmIzM0Oyk7CiYjNDM7CiYjNDM7CWZpbGxfcGF0dGVybihidWYsIHNpemVvZihidWYpLCBzZWVkKTsKJiM0MzsJd3JpdGVfYWxsKGZkLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsKJiM0MzsJbGltaXQgPSBSRUNfTElNX01BWDsKJiM0MzsJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9NQVhfUEFZTE9BRF9MRU4sICZhbXA7bGltaXQsCiYjNDM7CQkgICAgICAgc2l6ZW9mKGxpbWl0KSkpCiYjNDM7CQlkaWUoJiMzNDtzZXRzb2Nrb3B0KFRMU19UWF9NQVhfUEFZTE9BRF9MRU4gcmVzdG9yZSkmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgU0VFRF9DMlNfQlVMSwkweDExCiYjNDM7I2RlZmluZSBTRUVEX1MyQ19CVUxLCTB4MjIKJiM0MzsjZGVmaW5lIFNFRURfQzJTX01PUkUJMHgzMwomIzQzOyNkZWZpbmUgU0VFRF9DMlNfU1BMSUNFCTB4NDQKJiM0MzsjZGVmaW5lIFNFRURfQzJTX1NNQUxMCTB4NTUKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fY2xpZW50KGludCBmZCkKJiM0Mzt7CiYjNDM7CWNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7CiYjNDM7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJZGllKCYjMzQ7bWFsbG9jJiMzNDspOwomIzQzOwomIzQzOwlmaWxsX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSyk7CiYjNDM7CXdyaXRlX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7CiYjNDM7CiYjNDM7CXJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTsKJiM0MzsJY2hlY2tfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX1MyQ19CVUxLLCAmIzM0O3NlcnZlciAtJmd0OyBjbGllbnQgYnVsayYjMzQ7KTsKJiM0MzsKJiM0MzsJc2VuZF9tc2dfbW9yZShmZCwgU0VFRF9DMlNfTU9SRSk7CiYjNDM7CXNlbmRfc3BsaWNlKGZkLCBTRUVEX0MyU19TUExJQ0UpOwomIzQzOwlzZW5kX3NtYWxsX3JlY29yZHMoZmQsIFNFRURfQzJTX1NNQUxMKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgdGhlIHNlcnZlciYjMzk7cyB2ZXJkaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nIGRvd24uICovCiYjNDM7CXJlYWRfYWxsKGZkLCBidWYsIDEpOwomIzQzOwlpZiAoYnVmWzBdICE9ICYjMzk7ayYjMzk7KQomIzQzOwkJZmFpbCgmIzM0O3NlcnZlciByZXBvcnRlZCBhIGZhaWx1cmUmIzM0Oyk7CiYjNDM7CiYjNDM7CWZyZWUoYnVmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3NlcnZlcihpbnQgZmQpCiYjNDM7ewomIzQzOwlzaXplX3Qgc3BsaWNlX2xlbiA9IChzaXplX3QpU1BMSUNFX0ZSQUdfTEVOICogU1BMSUNFX0ZSQUdTOwomIzQzOwljaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pOwomIzQzOwljaGFyIG1vcmVbTU9SRV9GUkFHUyAmIzQzOyAxXTsKJiM0MzsJY2hhciAqc2J1ZjsKJiM0MzsJY2hhciBvayA9ICYjMzk7ayYjMzk7OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJc2J1ZiA9IG1hbGxvYyhzcGxpY2VfbGVuKTsKJiM0MzsJaWYgKCFidWYgfHwgIXNidWYpCiYjNDM7CQlkaWUoJiMzNDttYWxsb2MmIzM0Oyk7CiYjNDM7CiYjNDM7CXJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTsKJiM0MzsJY2hlY2tfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX0MyU19CVUxLLCAmIzM0O2NsaWVudCAtJmd0OyBzZXJ2ZXIgYnVsayYjMzQ7KTsKJiM0MzsKJiM0MzsJZmlsbF9wYXR0ZXJuKGJ1ZiwgQlVMS19MRU4sIFNFRURfUzJDX0JVTEspOwomIzQzOwl3cml0ZV9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pOwomIzQzOwomIzQzOwlyZWFkX2FsbChmZCwgbW9yZSwgc2l6ZW9mKG1vcmUpKTsKJiM0MzsJY2hlY2tfcGF0dGVybihtb3JlLCBzaXplb2YobW9yZSksIFNFRURfQzJTX01PUkUsICYjMzQ7Y2xpZW50IC0mZ3Q7IHNlcnZlciBNU0dfTU9SRSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmVhZF9hbGwoZmQsIHNidWYsIHNwbGljZV9sZW4pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgU1BMSUNFX0ZSQUdTOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNoZWNrX3BhdHRlcm4oc2J1ZiAmIzQzOyAoc2l6ZV90KWkgKiBTUExJQ0VfRlJBR19MRU4sCiYjNDM7CQkJICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgJiM0MzsKJiM0MzsJCQkgICAgICBpICogU1BMSUNFX0ZSQUdfTEVOLCAmIzM0O2NsaWVudCAtJmd0OyBzZXJ2ZXIgc3BsaWNlJiMzNDspOwomIzQzOwomIzQzOwlyZWFkX2FsbChmZCwgYnVmLCBTTUFMTF9MRU4pOwomIzQzOwljaGVja19wYXR0ZXJuKGJ1ZiwgU01BTExfTEVOLCBTRUVEX0MyU19TTUFMTCwKJiM0MzsJCSAgICAgICYjMzQ7Y2xpZW50IC0mZ3Q7IHNlcnZlciBzbWFsbCByZWNvcmRzJiMzNDspOwomIzQzOwomIzQzOwl3cml0ZV9hbGwoZmQsICZhbXA7b2ssIDEpOwomIzQzOwomIzQzOwlmcmVlKHNidWYpOwomIzQzOwlmcmVlKGJ1Zik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG9fc2VydmVyKGNvbnN0IGNoYXIgKmlwLCBpbnQgcG9ydCwgY29uc3QgY2hhciAqc3luY2RpcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9OwomIzQzOwlpbnQgbGZkLCBmZCwgb25lID0gMTsKJiM0MzsKJiM0MzsJbGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGxmZCAmbHQ7IDApCiYjNDM7CQlkaWUoJiMzNDtzb2NrZXQmIzM0Oyk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGxmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmYW1wO29uZSwgc2l6ZW9mKG9uZSkpKQomIzQzOwkJZGllKCYjMzQ7U09fUkVVU0VBRERSJiMzNDspOwomIzQzOwomIzQzOwlzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJc2Euc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKJiM0MzsJaWYgKGluZXRfcHRvbihBRl9JTkVULCBpcCwgJmFtcDtzYS5zaW5fYWRkcikgIT0gMSkKJiM0MzsJCWZhaWwoJiMzNDtiYWQgYmluZCBhZGRyZXNzICVzJiMzNDssIGlwKTsKJiM0MzsKJiM0MzsJaWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzYSwgc2l6ZW9mKHNhKSkpCiYjNDM7CQlkaWUoJiMzNDtiaW5kJiMzNDspOwomIzQzOwlpZiAobGlzdGVuKGxmZCwgMSkpCiYjNDM7CQlkaWUoJiMzNDtsaXN0ZW4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlkaWUoJiMzNDthY2NlcHQmIzM0Oyk7CiYjNDM7CWNsb3NlKGxmZCk7CiYjNDM7CiYjNDM7CWVuYWJsZV9rdGxzKGZkKTsKJiM0MzsJcmVuZGV6dm91cyhzeW5jZGlyLCAmIzM0O3NlcnZlciYjMzQ7LCAmIzM0O2NsaWVudCYjMzQ7KTsKJiM0MzsJd2FpdF9mb3JfZ28oc3luY2Rpcik7CiYjNDM7CiYjNDM7CXJ1bl9zZXJ2ZXIoZmQpOwomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRvX2NsaWVudChjb25zdCBjaGFyICppcCwgaW50IHBvcnQsIGNvbnN0IGNoYXIgKnN5bmNkaXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2EgPSB7fTsKJiM0MzsJdW5zaWduZWQgaW50IHdhaXRlZCA9IDA7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJc2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CXNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CiYjNDM7CWlmIChpbmV0X3B0b24oQUZfSU5FVCwgaXAsICZhbXA7c2Euc2luX2FkZHIpICE9IDEpCiYjNDM7CQlmYWlsKCYjMzQ7YmFkIHNlcnZlciBhZGRyZXNzICVzJiMzNDssIGlwKTsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwomIzQzOwkJaWYgKGZkICZsdDsgMCkKJiM0MzsJCQlkaWUoJiMzNDtzb2NrZXQmIzM0Oyk7CiYjNDM7CQlpZiAoIWNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3NhLCBzaXplb2Yoc2EpKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCWlmICh3YWl0ZWQgJmd0Oz0gQ09OTkVDVF9USU1FT1VUX01TKQomIzQzOwkJCWRpZSgmIzM0O2Nvbm5lY3QmIzM0Oyk7CiYjNDM7CQltc2xlZXAoMjApOwomIzQzOwkJd2FpdGVkICYjNDM7PSAyMDsKJiM0MzsJfQomIzQzOwomIzQzOwllbmFibGVfa3RscyhmZCk7CiYjNDM7CXJlbmRlenZvdXMoc3luY2RpciwgJiMzNDtjbGllbnQmIzM0OywgJiMzNDtzZXJ2ZXImIzM0Oyk7CiYjNDM7CXdhaXRfZm9yX2dvKHN5bmNkaXIpOwomIzQzOwomIzQzOwlydW5fY2xpZW50KGZkKTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO3sKJiM0MzsJaW50IHBvcnQ7CiYjNDM7CiYjNDM7CWlmIChhcmdjICE9IDUpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCSYjMzQ7dXNhZ2U6ICVzIHNlcnZlcnxjbGllbnQgJmx0O2lwJmd0OyAmbHQ7cG9ydCZndDsgJmx0O3N5bmNkaXImZ3Q7XG4mIzM0OywKJiM0MzsJCQlhcmd2WzBdKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJvbGUgPSBhcmd2WzFdOwomIzQzOwlwb3J0ID0gYXRvaShhcmd2WzNdKTsKJiM0MzsKJiM0MzsJaWYgKCFzdHJjbXAocm9sZSwgJiMzNDtzZXJ2ZXImIzM0OykpCiYjNDM7CQlyZXR1cm4gZG9fc2VydmVyKGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pOwomIzQzOwlpZiAoIXN0cmNtcChyb2xlLCAmIzM0O2NsaWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybiBkb19jbGllbnQoYXJndlsyXSwgcG9ydCwgYXJndls0XSk7CiYjNDM7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O3Vua25vd24gcm9sZSAlc1xuJiMzNDssIHJvbGUpOwomIzQzOwlyZXR1cm4gMjsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga1RMUyBPZmZsb2FkIFBhdGNoIGZvciBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB0byBgbmV0ZGV2c2ltYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB6ZXJvaW5nIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgYSB3b3JraG9yc2UgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcgaW4gdGhlIG5ldHdvcmtpbmcgd29ybGQuIEdldHRpbmcgdGhpcyByaWdodCBpcyBjcnVjaWFsIGZvciB0aGUgc3RhYmlsaXR5IG9mIHRoZSBrZXJuZWwgYW5kIHRoZSByZWxpYWJpbGl0eSBvZiBvdXIgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4KCkkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgaGFuZGZ1bCBvZiBmaWxlczogYEtjb25maWdgLCB0aGUgYE1ha2VmaWxlYCwgYG5ldGRldi5jYCwgYG5ldGRldnNpbS5oYCwgYHRscy5jYCwgYW5kIGEgbmV3IHNlbGZ0ZXN0LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzY29wZSBmb3IgdGhpcyBraW5kIG9mIGZlYXR1cmUgYWRkaXRpb24uIEdpdmVuIHRoYXQgYG5ldGRldnNpbWAgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLCB0aGUgYWNjZXNzaWJpbGl0eSBpcyBjbGVhcmx5IHRoZXJlLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX05FVERFVlNJTWAsIGBDT05GSUdfVExTYCwgYW5kIGBDT05GSUdfVExTX0RFVklDRWAuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IHN0YXJ0IGNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZW5mb3JjZWQgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFyZSBhdm9pZGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCBhbmQgYG5ldC90bHMvS2NvbmZpZ2AuCgpPa2F5LCBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIGBORVRERVZTSU1gIGRlcGVuZHMgb24gYElORVRgLCBgUFNBTVBMRSB8fCBQU0FNUExFPW5gLCBgUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5gLCBhbmQgaW1wb3J0YW50bHksIGBUTFMgfHwgVExTPW5gLiBUaGlzIHNlZW1zIGxvZ2ljYWwsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHdpdGhpbiB0aGUgZGVwZW5kZW5jaWVzLiBOb3cgbGV0JiMzOTtzIGNoZWNrIGBuZXQvdGxzL0tjb25maWdgIGZvciB0aGUgYFRMU19ERVZJQ0VgIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBkcmlsbCBkb3duIHRvIGVuc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVExTX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFRMUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFRMUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIGV4cG9zZWQuIEkgcmVtZW1iZXIgdGhhdCBgbmV0L3Rscy9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLCBzbyBsZXQmIzM5O3MgbmF2aWdhdGUgdG8gdGhhdCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDE5OyB0aGF0JiMzOTtzIGdlbmVyYWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTkgd2lsbCBiZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIGxvb2tzIGxpa2UgZm9yIFRMUyBmZWF0dXJlIGNvbmZpZ3VyYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGZlZWwgZm9yIGhvdyBJIGNhbiBpbmZsdWVuY2Ugb3IgaW50ZWdyYXRlIHRoaXMgaW50byBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVExTIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFRMU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG4gIDEyOlx0XHRkZWZhdWx0IG5cbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcbiAgMTU6XHRcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cbiAgMTY6XHRcbiAgMTc6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIFRMU19ERVZJQ0VcbiAgMjA6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVExTXG4gIDIyOlx0XHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxuICAyMzpcdFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxuICAyNDpcdFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xuICAyNTpcdFx0ZGVmYXVsdCBuXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cbiAgMjg6XHRcbiAgMjk6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjgKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMsIGV4cHJlc3NlZCBhcyBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRlcGVuZGVuY3kgRGVkdWN0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBsb29rcyBsaWtlIGBUTFNfREVWSUNFYCBpcyBpbmhlcmVudGx5IGxpbmtlZCB0byBgVExTYCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIGBUTFNgIGl0c2VsZiBpcyBidWlsZGluZyBvbiB0b3Agb2YgdGhlIGBJTkVUYCBzdGFjaywgYXMgSSYjMzk7ZCBleHBlY3QuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgYE5FVERFVlNJTWAsIHdoaWNoIGFwcGFyZW50bHkgZGVwZW5kcyBvbiBgVExTYCAqb3IqIGV4cGxpY2l0bHkgZGlzYWJsaW5nIGBUTFNgIChgVExTPW5gKS4gQnV0IHNpbmNlIHRoZSBnb2FsIGlzIHRvICplbmFibGUqIGBORVRERVZTSU1gLCB0aGUgcmVxdWlyZW1lbnQgYmVjb21lcyBjbGVhcjogd2UgZGVmaW5pdGVseSBuZWVkIGBUTFNgLgoKVGhlcmVmb3JlLCB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbiBib2lscyBkb3duIHRvIGVuc3VyaW5nIHRoYXQgYE5FVERFVlNJTWAsIGBUTFNgLCBhbmQgYFRMU19ERVZJQ0VgIGFyZSBhbGwgZW5hYmxlZCBhbmQgcHJvcGVybHkgc2V0IHVwIHRvIHdvcmsgdG9nZXRoZXIuIEVzc2VudGlhbGx5LCBnZXR0aW5nIHRoZSB3aG9sZSBzdGFjayBpbiBvcmRlci4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWRkZWQgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYW5kIHRoZSByZWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCB0ZWxsIHRoZSBmdWxsIHN0b3J5LiBJIHdhbnQgdG8gc2VlICpob3cqIHRoZXNlIG1vZHVsZXMgaGF2ZSBpbnRlZ3JhdGVkIGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpcyBzcGVjaWZpYyBhc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16XzAtOV0mIzQzOyApJiM0Mztuc2ltX3Rsc19bYS16XzAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM9NDU9c3RydWN0IG5zaW1fdGxzX3R1cGxlIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtNTEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6NTI6c3RhdGljIGJvb2wgbnNpbV90bHNfcGFyc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy01My1cdFx0XHQgICBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTkwLSAqL1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjkxOnN0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy05Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5zaW1fdGxzX3R1cGxlICp0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0xMTUtICovXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MTE2OnN0YXRpYyB2b2lkIG5zaW1fdGxzX3R4X3plcm9fdGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTExNy17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTE1Ny0gKi9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxNTg6c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTU5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTcyLSAqL1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjE3MzpzdGF0aWMgdm9pZCBuc2ltX3Rsc19yeChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0xNzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0xOTY9dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjA5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjIxMDpzdGF0aWMgaW50IG5zaW1fdGxzX2Rldl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTIxMS1cdFx0XHQgICAgZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcmVjdGlvbixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjY2LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjI2NzpzdGF0aWMgdm9pZCBuc2ltX3Rsc19kZXZfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjY4LVx0XHRcdCAgICAgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0yOTktICovXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MzAwOnN0YXRpYyBpbnQgbnNpbV90bHNfZGV2X3Jlc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzAxLVx0XHRcdCAgICAgICB1MzIgc2VxLCB1OCAqcmNkX3NuLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0zMTE9c3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzE2LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjMxNzpzdGF0aWMgc3NpemVfdCBuc2ltX3Rsc19kYmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0zMTgtXHRcdFx0XHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jPTM3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3Rsc19kYmdfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzgxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjM4Mjp2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzgzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzk1LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjM5Njp2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTM5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJpb3JpdGl6aW5nIFRMUyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgVExTIGZ1bmN0aW9ucyBoZXJlLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBsZWFuaW5nIG1lIHRvd2FyZHMgZm9jdXNpbmcgb24gYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2Rldl9hZGRgLCBgbnNpbV90bHNfZGV2X2RlbGAsIGBuc2ltX3Rsc19kZXZfcmVzeW5jYCwgYG5zaW1fdGxzX2RiZ19yZWFkYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC4KCkhvbGQgb24gYSBzZWNvbmQsIGEgZmV3IG9mIHRob3NlIOKAkyBgbnNpbV90bHNfZGV2X2FkZGAsIGBuc2ltX3Rsc19kZXZfZGVsYCwgYG5zaW1fdGxzX2Rldl9yZXN5bmNgLCBhbmQgYG5zaW1fdGxzX2RiZ19yZWFkYCDigJMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhlIGd1aWRhbmNlIHN1Z2dlc3RzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRvIGF2b2lkIGlubGluZWQgaGVscGVycyB3aXRob3V0IGRpc3RpbmN0IHN5bWJvbHMuIEhvd2V2ZXIsIEkgc2VlIHRoYXQgYG5zaW1fdGxzX2Rldl9hZGRgIGlzIGFzc2lnbmVkIHRvIGBuc2ltX3Rsc2Rldl9vcHNgLCBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycy4gVGhhdCYjMzk7cyBnb29kLCBtZWFuaW5nIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIGlzIHBvdGVudGlhbGx5IGEgc29saWQgY2hvaWNlLiBCdXQgYG5zaW1fZG9fdGxzYCBpcyBub24tc3RhdGljLgoKTGV0JiMzOTtzIHNpbXBsaWZ5IHRoaW5ncyBmb3Igbm93IGFuZCB1c2UgYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC4KCldhaXQsIHRoaW5raW5nIG1vcmUgYWJvdXQgaXQsIGBuc2ltX3Rsc19kZXZfYWRkYCBpcyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgYWRkaW5nIGEgbmV3IFRMUyBjb250ZXh0LiBFdmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gSXQmIzM5O3MgYSB2YWxpZCwgcGVyaGFwcyB0aGUgYmVzdCB0YXJnZXQuIEFsdGhvdWdoLCBpdCBpcyBhIHZhbGlkIHRhcmdldCBiZWNhdXNlIGl0IGlzIHJlZmVyZW5jZWQgaW4gYSBmdW5jdGlvbiBwb2ludGVyLCBhbmQgd2UgY291bGQgYWxzbyBjaG9vc2UgYG5zaW1fZG9fdGxzYC4KCkFjdHVhbGx5LCBub3cgSSByZW1lbWJlciwgYG5zaW1fZG9fdGxzYCBpcyBjYWxsZWQgZnJvbSBgbnNpbV9zdGFydF94bWl0YC4KClRpbWUgdG8gZG91YmxlLWNoZWNrIGBuc2ltX2RvX3Rsc2AgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyB0aGUgcmlnaHQgZml0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XG4gMTkxOlx0LyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxuIDE5MjpcdCAqIHBlZXImIzM5O3MgcmVjZWl2ZSBwYXRoLCBzbyB0aGlzIG9uZSBjYWxsIHNpdGUgc3RhbmRzIGluIGZvciB0aGUgaGFyZHdhcmUgb2ZcbiAxOTM6XHQgKiBib3RoIHBvcnRzLiAgSXQgaGFzIHRvIHJ1biBiZWZvcmUgbnNpbV9mb3J3YXJkX3NrYigpIG1vdmVzIHRoZSBza2Igb3ZlcixcbiAxOTQ6XHQgKiB3aGljaCByZXNldHMgdGhlIGhlYWRlcnMuXG4gMTk1Olx0ICovXG4gMTk2Olx0dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbiAxOTc6XHRcdFx0IHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpXG4gMTk4Olx0e1xuIDE5OTpcdFx0LyogbnNpbV9kb19wc3AoKSByYW4gZmlyc3QgYW5kIG1heSBoYXZlIHdyYXBwZWQgdGhlIHJlY29yZCBzdHJlYW0sIHNvXG4gMjAwOlx0XHQgKiB0aGlzIGlzIG5vIGxvbmdlciBhIHBsYWluIFRMUyBvdmVyIFRDUCBwYWNrZXQuICBObyBOSUMgY2hhaW5zIHRoZVxuIDIwMTpcdFx0ICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLlxuIDIwMjpcdFx0ICovXG4gMjAzOlx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4gMjA0Olx0XHRcdHJldHVybjtcbiAyMDU6XHRcbiAyMDY6XHRcdG5zaW1fdGxzX3R4KG5zLCBza2IpO1xuIDIwNzpcdFx0bnNpbV90bHNfcngocGVlcl9ucywgc2tiKTtcbiAyMDg6XHR9XG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gVExTIEluaXRpYWxpemF0aW9uIGFuZCBUZWFyZG93bioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZXNlIHR3byBzcGVjaWZpYyBmdW5jdGlvbnM6IGBuc2ltX3Rsc19pbml0YCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC4gVGhlc2UgbmFtZXMgaW1tZWRpYXRlbHkgc3VnZ2VzdCB0aGV5IGFyZSByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uIG9mIFRMUyAoVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5KSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBuc2ltYCBmcmFtZXdvcmsuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHRoaW5ncyBsaWtlIGVzdGFibGlzaGluZyBzZWN1cmUgY29ubmVjdGlvbnMsIHNldHRpbmcgdXAgVExTIGNvbnRleHRzLCBoYW5kbGluZyBjZXJ0aWZpY2F0ZXMsIGtleSBtYW5hZ2VtZW50LCBhbmQgdWx0aW1hdGVseSwgZ3JhY2VmdWxseSBzaHV0dGluZyBkb3duIHRob3NlIHNlY3VyZWQgc2Vzc2lvbnMuIEEgc3VjY2Vzc2Z1bCBpbnZlc3RpZ2F0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyB3b3VsZCBpbnZvbHZlIGxvb2tpbmcgZm9yIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGxpa2UgYSBzdWNjZXNzZnVsIFRMUyBpbml0aWFsaXphdGlvbiwgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIHdoZW4gdGVhcmluZyBkb3duIHRoZSBUTFMgY29ubmVjdGlvbiwgYW5kIHRoZSBpbmNsdXNpb24gb2Ygd2VsbC1zdHJ1Y3R1cmVkIGZ1bmN0aW9ucyBzdWNoIGFzIGBTU0xfQ1RYX25ld2AsIGBTU0xfbmV3YCwgYFNTTF9jb25uZWN0YCwgYW5kIGBTU0xfc2h1dGRvd25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG5zaW1gIG1hbmFnZXMgdGhlIGludHJpY2FjaWVzIG9mIFRMUyB3aXRoaW4gaXRzIGFyY2hpdGVjdHVyZS4gTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0fTtcbiAzODE6XHRcbiAzODI6XHR2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gMzgzOlx0e1xuIDM4NDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zKTtcbiAzODU6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbiAzODY6XHRcbiAzODc6XHRcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2V0bHNkZXZfb3BzID0gXHUwMDI2bnNpbV90bHNkZXZfb3BzO1xuIDM4ODpcdFx0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xuIDM4OTpcdFx0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xuIDM5MDpcdFxuIDM5MTpcdFx0bnMtXHUwMDNldGxzLmRmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0bHNcJiMzNDssIDA0MDAsXG4gMzkyOlx0XHRcdFx0XHRcdCAgICBucy1cdTAwM2Vuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuIDM5MzpcdFx0XHRcdFx0XHQgICAgXHUwMDI2bnNpbV90bHNfZGJnX2ZvcHMpO1xuIDM5NDpcdH1cbiAzOTU6XHRcbiAzOTY6XHR2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIDM5NzpcdHtcbiAzOTg6XHRcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uLCAqdG1wO1xuIDM5OTpcdFx0dTMyIGxlZnQ7XG4gNDAwOlx0XG4gNDAxOlx0XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnMtXHUwMDNldGxzLmRmaWxlKTtcbiA0MDI6XHRcbiA0MDM6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4gNDA0Olx0XHRsZWZ0ID0gbnMtXHUwMDNldGxzLmNvdW50O1xuIDQwNTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHRtcCwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XG4gNDA2Olx0XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZjb25uLVx1MDAzZWxpc3QpO1xuIDQwNzpcdFx0XHRrZnJlZV9yY3UoY29ubiwgcmN1KTtcbiA0MDg6XHRcdH1cbiA0MDk6XHRcdG5zLVx1MDAzZXRscy5jb3VudCA9IDA7XG4gNDEwOlx0XHRucy1cdTAwM2V0bHMudHhfY29ubiA9IDA7XG4gNDExOlx0XHRucy1cdTAwM2V0bHMucnhfY29ubiA9IDA7XG4gNDEyOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4gNDEzOlx0XG4gNDE0Olx0XHRpZiAobGVmdClcbiA0MTU6XHRcdFx0bmV0ZGV2X2Vycihucy1cdTAwM2VuZXRkZXYsXG4gNDE2Olx0XHRcdFx0ICAgXCYjMzQ7dGVhcmluZyBkb3duIFRMUyBvZmZsb2FkIHdpdGggJXUgY29ubmVjdGlvbnMgbGVmdFxcblwmIzM0OyxcbiA0MTc6XHRcdFx0XHQgICBsZWZ0KTtcbiA0MTg6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkyCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUga1RMUyBPZmZsb2FkIFBhdGNoIGZvciBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBqdXN0IGdyYWIgYG5zaW1fZG9fdGxzYCBzaW5jZSBpdCYjMzk7cyBub3Qgc3RhdGljIGFuZCBub3QgaW5saW5lZCwgYWxvbmcgd2l0aCBgbnNpbV90bHNfaW5pdGAgYW5kIGBuc2ltX3Rsc190ZWFyZG93bmAuICBgbnNpbV90bHNfZGV2X2FkZGAgY2F1Z2h0IG15IGV5ZSBpbml0aWFsbHksIHNpbmNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIC0gaW5kaWNhdGluZyBpdCYjMzk7cyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBCdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG5zaW1fdGxzX2Rldl9hZGRgIGFuZCBgbnNpbV90bHNfZGV2X2RlbGAgYXJlIHJlYWxseSB0aGUgaGVhcnQgb2YgdGhlIFRMUyBjb250ZXh0IG1hbmFnZW1lbnQgZm9yIHRoaXMgbmV0ZGV2c2ltIGtUTFMgb2ZmbG9hZC4gVGhleSAqYXJlKiBhc3NpZ25lZCB0byB0aGUgYG5zaW1fdGxzZGV2X29wc2Agc3RydWN0dXJlIHdoaWNoIGlzIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHRoZSBrVExTIGNvbnRleHQgYWRkaXRpb24gYW5kIGRlbGV0aW9uLCBzbyBJIHNob3VsZCBpbmNsdWRlIHRoZW0uIFRoZW4sIHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzaG91bGQgc3RpY2sgd2l0aCBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiBJJiMzOTttIGdvaW5nIHRvIHN0aWNrIHdpdGggdGhlIGBuc2ltX2RvX3Rsc2AsIGBuc2ltX3Rsc19pbml0YCwgYW5kIGBuc2ltX3Rsc190ZWFyZG93bmAuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBORVRERVZTSU1gLCBgVExTYCwgYW5kIGBUTFNfREVWSUNFYC4gQ2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4uLiBgVExTYCBuZWVkcyBgSU5FVGAuIGBORVRERVZTSU1gIG5lZWRzIGBJTkVUYCwgIGBQU0FNUExFIHx8IFBTQU1QTEU9bmAsIGBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9bmAsIGFuZCBgVExTIHx8IFRMUz1uYC4gU28sIHRob3NlIHRocmVlIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKVGhlIGJpZyBwaWN0dXJlIGlzIHRoaXM6IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcsIGVtdWxhdGVkIGtUTFMgb2ZmbG9hZCBjYXBhYmlsaXR5IHRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFkZGl0aW9uIHRoYXQgcHJvdmlkZXMgbmV3LCByZWFjaGFibGUgY29kZSBwYXRocy4gVGhpcyBtZWFucyBpdCYjMzk7cyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkLCBzaW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZSBuZXcgY29kZSBzaG91bGQgYmUgaW52b2tlZCB2aWEgdGhlIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCB0eXBpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGBuZXRkZXZzaW1gLgoKVG8gcmVjYXAsIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9kb190bHMmIzM0OywKICAgICYjMzQ7bnNpbV90bHNfaW5pdCYjMzQ7LAogICAgJiMzNDtuc2ltX3Rsc190ZWFyZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGVtdWxhdGVkIGtUTFMgb2ZmbG9hZCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgZm9yIHRlc3RpbmcgVExTIGhhcmR3YXJlIG9mZmxvYWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucyBhbmQgbmV0d29yayBvcGVyYXRpb25zIHdoZW4gbmV0ZGV2c2ltIGlzIHVzZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZG9fdGxzJiMzNDssCiAgICAmIzM0O25zaW1fdGxzX2luaXQmIzM0OywKICAgICYjMzQ7bnNpbV90bHNfdGVhcmRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGZvciB0ZXN0aW5nIFRMUyBoYXJkd2FyZSBvZmZsb2FkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIG5ldGRldnNpbSBpcyB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MTkuMjAwMTgxMDgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNjMxNjcwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2RvX3Rsc1wiLFxuICAgIFwibnNpbV90bHNfaW5pdFwiLFxuICAgIFwibnNpbV90bHNfdGVhcmRvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVtdWxhdGVkIGtUTFMgb2ZmbG9hZCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgZm9yIHRlc3RpbmcgVExTIGhhcmR3YXJlIG9mZmxvYWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucyBhbmQgbmV0d29yayBvcGVyYXRpb25zIHdoZW4gbmV0ZGV2c2ltIGlzIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjE5LjIwMDE4Njg2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MDcwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWY2ZDAzN2I4MjlhZTZkNzQxMTkxOTBhMjE4NmI4NGU1NGU1YTg2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNTowNjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZ1xcbmluZGV4IGZmNzljNDY2NzEyZGYuLmNiNGQ0YmI4N2FmYzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWdcXG5AQCAtNjA3LDYgKzYwNyw3IEBAIGNvbmZpZyBORVRERVZTSU1cXG4gXFx0ZGVwZW5kcyBvbiBJTkVUXFxuIFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbitcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFM9blxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFBBR0VfUE9PTFxcbiBcXHRzZWxlY3QgTkVUX1NIQVBFUlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcXG5pbmRleCA4NzcxODIwNGZiNGRlLi5jN2Y3NjIxMzIzYjJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxcbkBAIC0yNSwzICsyNSw3IEBAIGVuZGlmXFxuIGlmbmVxICgkKENPTkZJR19NQUNTRUMpLClcXG4gbmV0ZGV2c2ltLW9ianMgKz0gbWFjc2VjLm9cXG4gZW5kaWZcXG4rXFxuK2lmbmVxICgkKENPTkZJR19UTFNfREVWSUNFKSwpXFxuK25ldGRldnNpbS1vYmpzICs9IHRscy5vXFxuK2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjhkYzBiMGE3ZDFhMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuQEAgLTE1MSw2ICsxNTEsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGlmIChkcilcXG4gXFx0XFx0Z290byBvdXRfZHJvcF9mcmVlO1xcbiBcXG4rXFx0bnNpbV9kb190bHMoc2tiLCBucywgcGVlcl9ucyk7XFxuK1xcbiBcXHRyeHEgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0aWYgKHJ4cSBcXHUwMDNlPSBwZWVyX2Rldi1cXHUwMDNlbnVtX3J4X3F1ZXVlcylcXG4gXFx0XFx0cnhxID0gcnhxICUgcGVlcl9kZXYtXFx1MDAzZW51bV9yeF9xdWV1ZXM7XFxuQEAgLTEwNjYsNiArMTA2OCw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4gXFxuIFxcdG5zaW1fbWFjc2VjX2luaXQobnMpO1xcbiBcXHRuc2ltX2lwc2VjX2luaXQobnMpO1xcbitcXHRuc2ltX3Rsc19pbml0KG5zKTtcXG4gXFxuIFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShucy1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0aWYgKGVycilcXG5AQCAtMTA5Myw2ICsxMDk2LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiBcXHRSQ1VfSU5JVF9QT0lOVEVSKG5zLVxcdTAwM2VwZWVyLCBOVUxMKTtcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobnMtXFx1MDAzZW5ldGRldik7XFxuIGVycl9pcHNlY190ZWFyZG93bjpcXG4rXFx0bnNpbV90bHNfdGVhcmRvd24obnMpO1xcbiBcXHRuc2ltX2lwc2VjX3RlYXJkb3duKG5zKTtcXG4gXFx0bnNpbV9tYWNzZWNfdGVhcmRvd24obnMpO1xcbiBcXHRuc2ltX2JwZl91bmluaXQobnMpO1xcbkBAIC0xMTk1LDYgKzExOTksNyBAQCB2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4gXFx0UkNVX0lOSVRfUE9JTlRFUihucy1cXHUwMDNlcGVlciwgTlVMTCk7XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XFxuIFxcdGlmIChuc2ltX2Rldl9wb3J0X2lzX3BmKG5zLVxcdTAwM2Vuc2ltX2Rldl9wb3J0KSkge1xcbitcXHRcXHRuc2ltX3Rsc190ZWFyZG93bihucyk7XFxuIFxcdFxcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcXG4gXFx0XFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XFxuIFxcdFxcdG5zaW1fYnBmX3VuaW5pdChucyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjU4MmE3NmFjZTlkMzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuQEAgLTU2LDYgKzU2LDIwIEBAIHN0cnVjdCBuc2ltX2lwc2VjIHtcXG4gXFx0dTMyIHR4O1xcbiB9O1xcbiBcXG4rc3RydWN0IG5zaW1fdGxzIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBjb25ucztcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcdC8qIHByb3RlY3RzIGNvbm5zIGFuZCB0aGUgY291bnRlcnMgYmVsb3cgKi9cXG4rXFx0c3RydWN0IGRlbnRyeSAqZGZpbGU7XFxuK1xcdHUzMiBjb3VudDtcXG4rXFx0dTMyIHR4X2Nvbm47XFxuK1xcdHUzMiByeF9jb25uO1xcbitcXHRhdG9taWM2NF90IHR4X3BhY2tldHM7XFxuK1xcdGF0b21pYzY0X3QgdHhfYnl0ZXM7XFxuK1xcdGF0b21pYzY0X3QgcnhfcGFja2V0cztcXG4rXFx0YXRvbWljNjRfdCByeF9ieXRlcztcXG4rXFx0YXRvbWljNjRfdCByZXN5bmNzO1xcbit9O1xcbitcXG4gI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfU0VDWV9DT1VOVCAzXFxuICNkZWZpbmUgTlNJTV9NQUNTRUNfTUFYX1JYU0NfQ09VTlQgMVxcbiBzdHJ1Y3QgbnNpbV9yeHNjIHtcXG5AQCAtMTQxLDYgKzE1NSw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xcbiBcXHRib29sIGJwZl9tYXBfYWNjZXB0O1xcbiBcXHRzdHJ1Y3QgbnNpbV9pcHNlYyBpcHNlYztcXG4gXFx0c3RydWN0IG5zaW1fbWFjc2VjIG1hY3NlYztcXG4rXFx0c3RydWN0IG5zaW1fdGxzIHRscztcXG4gXFx0c3RydWN0IG5zaW1fdmxhbiB2bGFuO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHR1MzIgaW5qZWN0X2Vycm9yO1xcbkBAIC00MzUsNiArNDUwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXFxuK3ZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuK3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbit2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbitcXHRcXHQgc3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucyk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX3Rsc190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKVxcbit7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxcbiB2b2lkIG5zaW1fbWFjc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbiB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNjk1ZjJlMmJlYjgwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY1xcbkBAIC0wLDAgKzEsNDE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90Y3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC90bHMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJuZXRkZXZzaW0uaFxcXCJcXG4rXFxuKy8qIEVtdWxhdGVkIGtUTFMgb2ZmbG9hZC4gIE5vIGNyeXB0byBpcyBwZXJmb3JtZWQsIHNvIHRoaXMgaXMgb25seSBzZWxmXFxuKyAqIGNvbnNpc3RlbnQgYmV0d2VlbiB0d28gbmV0ZGV2c2ltIHBvcnRzLlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgTlNJTV9UTFNfTUFYX0NPTk5cXHQzMlxcbitcXG4rLyogbmV0ZGV2X2ZpeF9mZWF0dXJlcygpIGRyb3BzIE5FVElGX0ZfSFdfVExTX1JYIHVubGVzcyB0aGUgZGV2aWNlIGFsc28gZG9lc1xcbisgKiBSWCBjaGVja3N1bXMsIHdoaWNoIGV2ZXJ5IG9mZmxvYWQgY2FwYWJsZSBOSUMgZG9lcy5cXG4rICovXFxuKyNkZWZpbmUgTlNJTV9UTFNfRkVBVFVSRVNcXHQoTkVUSUZfRl9IV19UTFNfVFggfCBORVRJRl9GX0hXX1RMU19SWCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0IE5FVElGX0ZfUlhDU1VNKVxcbitcXG4rc3RydWN0IG5zaW1fdGxzX2Nvbm4ge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcbitcXHQvKiBJZGVudGl0eSBhcyBzZWVuIG9uIHRoZSB3aXJlLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBwb3J0XFxuK1xcdCAqIHRoZSBvZmZsb2FkIHdhcyBpbnN0YWxsZWQgb246IGwqIGlzIHRoaXMgc2lkZSwgciogaXMgdGhlIHBlZXIuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgaW42X2FkZHIgbGFkZHI7XFxuK1xcdHN0cnVjdCBpbjZfYWRkciByYWRkcjtcXG4rXFx0X19iZTE2IGxwb3J0O1xcbitcXHRfX2JlMTYgcnBvcnQ7XFxuK1xcdHUxNiBmYW1pbHk7XFxuK1xcbitcXHRlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyO1xcbitcXHR1MzIgc3RhcnRfc247XFxuK1xcdHUxNiBjaXBoZXJfdHlwZTtcXG4rXFx0Y29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4O1xcbit9O1xcbitcXG4rc3RydWN0IG5zaW1fdGxzX3R1cGxlIHtcXG4rXFx0c3RydWN0IGluNl9hZGRyIHNhZGRyO1xcbitcXHRzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7XFxuK1xcdF9fYmUxNiBzcG9ydDtcXG4rXFx0X19iZTE2IGRwb3J0O1xcbit9O1xcbitcXG4rc3RhdGljIGJvb2wgbnNpbV90bHNfcGFyc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG5zaW1fdGxzX3R1cGxlICp0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xcbitcXG4rXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XFxuK1xcbitcXHRcXHRpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKGlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZ0LVxcdTAwM2VzYWRkcik7XFxuK1xcdFxcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBoLVxcdTAwM2VkYWRkciwgXFx1MDAyNnQtXFx1MDAzZWRhZGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuK1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR0LVxcdTAwM2VzYWRkciA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbitcXHRcXHR0LVxcdTAwM2VkYWRkciA9IGlwNmgtXFx1MDAzZWRhZGRyO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHRoID0gdGNwX2hkcihza2IpO1xcbitcXHR0LVxcdTAwM2VzcG9ydCA9IHRoLVxcdTAwM2Vzb3VyY2U7XFxuK1xcdHQtXFx1MDAzZWRwb3J0ID0gdGgtXFx1MDAzZWRlc3Q7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogT24gUlggdGhlcmUgaXMgbm8gc29ja2V0IHRvIGxvb2sgYXQgeWV0LCBzbyBtYXRjaCB0aGUgdHVwbGUgaW5zdGFsbGVkIGF0XFxuKyAqIC1cXHUwMDNldGxzX2Rldl9hZGQoKSB0aW1lLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzLiAgVGhlIHBhY2tldCBpc1xcbisgKiBhcnJpdmluZywgc28gdGhlIHBlZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXMgaXRzIHNvdXJjZS5cXG4rICovXFxuK3N0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXFxuK3tcXG4rXFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjb25uLCBcXHUwMDI2bnMtXFx1MDAzZXRscy5jb25ucywgbGlzdClcXG4rXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWRpciA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1JYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjb25uLVxcdTAwM2VscG9ydCA9PSB0LVxcdTAwM2VkcG9ydCBcXHUwMDI2XFx1MDAyNiBjb25uLVxcdTAwM2VycG9ydCA9PSB0LVxcdTAwM2VzcG9ydCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZjb25uLVxcdTAwM2VsYWRkciwgXFx1MDAyNnQtXFx1MDAzZWRhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZjb25uLVxcdTAwM2VyYWRkciwgXFx1MDAyNnQtXFx1MDAzZXNhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qIFRoZSBzdGFjayBsZWF2ZXMgYSB0YWcgc2l6ZWQgcGxhY2Vob2xkZXIgYXQgdGhlIGVuZCBvZiBldmVyeSByZWNvcmQgZm9yXFxuKyAqIHRoZSBkZXZpY2UgdG8gd3JpdGUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpbnRvLiAgV2UgZG8gbm90IGVuY3J5cHQsIHNvXFxuKyAqIG5vdGhpbmcgZXZlciBmaWxscyBpdCBpbiwgYW5kIGl0IGNvbWVzIGZyb20gYSBwYWdlIGZyYWcgdGhhdCB3YXMgbmV2ZXJcXG4rICogemVyb2VkIC0gY2xlYXIgaXQgcmF0aGVyIHRoYW4gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvbnRvIHRoZSB3aXJlLlxcbisgKlxcbisgKiB0bHNfYXBwZW5kX2ZyYWcoKSBlaXRoZXIgZ3Jvd3MgdGhlIGxhc3QgZnJhZyBvciBhZGRzIG9uZSwgc28gdGhlIHRhZyBpc1xcbisgKiBhbHdheXMgdGhlIHRhaWwgb2YgdGhlIHJlY29yZCdzIGxhc3QgZnJhZy4gIENsZWFyaW5nIGl0IHRoZXJlIHJhdGhlciB0aGFuXFxuKyAqIGluIHRoZSBza2IgY292ZXJzIGV2ZXJ5IHNlZ21lbnQgdGhlIHJlY29yZCB3YXMgc3BsaXQgaW50bywgYW5kIGFueVxcbisgKiByZXRyYW5zbWl0IG9mIHRoZW0sIHNpbmNlIHRoZXkgYWxsIHNoYXJlIHRoZXNlIHBhZ2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbnNpbV90bHNfdHhfemVyb190YWdzKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChza2ItXFx1MDAzZXNrKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XFxuK1xcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICp0eF9jdHg7XFxuK1xcdHUzMiBzZXEsIGVuZCwgdGFnX3NpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHVuc2lnbmVkIGludCBvZmY7XFxuK1xcbitcXHRvZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgX190Y3BfaGRybGVuKHRoKTtcXG4rXFx0aWYgKG9mZiBcXHUwMDNlPSBza2ItXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGFnX3NpemUgPSBjdHgtXFx1MDAzZXByb3RfaW5mby50YWdfc2l6ZTtcXG4rXFx0c2VxID0gbnRvaGwodGgtXFx1MDAzZXNlcSk7XFxuK1xcdGVuZCA9IHNlcSArIHNrYi1cXHUwMDNlbGVuIC0gb2ZmO1xcbitcXHR0eF9jdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eF9jdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0d2hpbGUgKGJlZm9yZShzZXEsIGVuZCkpIHtcXG4rXFx0XFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkO1xcbitcXHRcXHRza2JfZnJhZ190ICpmcmFnO1xcbitcXHRcXHR1NjQgcmNkX3NuO1xcbitcXG4rXFx0XFx0cmVjb3JkID0gdGxzX2dldF9yZWNvcmQodHhfY3R4LCBzZXEsIFxcdTAwMjZyY2Rfc24pO1xcbitcXHRcXHRpZiAoIXJlY29yZCB8fCB0bHNfcmVjb3JkX2lzX3N0YXJ0X21hcmtlcihyZWNvcmQpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGZyYWcgPSBcXHUwMDI2cmVjb3JkLVxcdTAwM2VmcmFnc1tyZWNvcmQtXFx1MDAzZW51bV9mcmFncyAtIDFdO1xcbitcXHRcXHRtZW1zZXQoc2tiX2ZyYWdfYWRkcmVzcyhmcmFnKSArIHNrYl9mcmFnX3NpemUoZnJhZykgLSB0YWdfc2l6ZSxcXG4rXFx0XFx0ICAgICAgIDAsIHRhZ19zaXplKTtcXG4rXFxuK1xcdFxcdHNlcSA9IHJlY29yZC1cXHUwMDNlZW5kX3NlcTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eF9jdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rLyogU3RhbmQgaW4gZm9yIHRoZSBpbmxpbmUgZW5jcnlwdGlvbiB0aGUgaGFyZHdhcmUgd291bGQgZG8gb24gdGhlIHdheSBvdXQuXFxuKyAqIFRoZSBzdGFjayBoYXMgYWxyZWFkeSBmcmFtZWQgdGhlIHJlY29yZCBhbmQgd2UgZG8gbm90IGVuY3J5cHQsIHNvIHRoZSB0YWdcXG4rICogaXMgYWxsIHRoYXQgaXMgbGVmdCB0byBkZWFsIHdpdGguICBUaGUgc29ja2V0IGlzIHJpZ2h0IGhlcmUsIHNvIGlkZW50aWZ5XFxuKyAqIHRoZSBjb25uZWN0aW9uIHRoZSB3YXkgdGhlIHJlYWwgZHJpdmVycyBkby5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG5zaW1fdGxzX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGlmICghdGxzX2lzX3NrYl90eF9kZXZpY2Vfb2ZmbG9hZGVkKHNrYikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5zaW1fdGxzX3R4X3plcm9fdGFncyhza2IpO1xcbitcXHRhdG9taWM2NF9pbmMoXFx1MDAyNm5zLVxcdTAwM2V0bHMudHhfcGFja2V0cyk7XFxuK1xcdGF0b21pYzY0X2FkZChza2ItXFx1MDAzZWxlbiwgXFx1MDAyNm5zLVxcdTAwM2V0bHMudHhfYnl0ZXMpO1xcbit9XFxuK1xcbisvKiBTdGFuZCBpbiBmb3IgdGhlIGlubGluZSBkZWNyeXB0aW9uIHRoZSBwZWVyJ3MgaGFyZHdhcmUgd291bGQgZG8sIHNpbmNlIHdlXFxuKyAqIGFyZSBhYm91dCB0byBoYW5kIHRoZSBza2IgdG8gaXRzIHN0YWNrLiAgV2UgZG8gbm90IGRlY3J5cHQgZWl0aGVyLCBzbyBhbGxcXG4rICogdGhhdCBpcyBuZWVkZWQgaXMgdGhlIGZsYWcgdGhhdCB0ZWxscyB0aGUga1RMUyBjb3JlIHRoZSBwYXlsb2FkIGlzXFxuKyAqIGFscmVhZHkgcGxhaW50ZXh0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbnNpbV90bHNfcngoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IG5zaW1fdGxzX3R1cGxlIHQ7XFxuK1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bnMtXFx1MDAzZXRscy5jb25ucykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghbnNpbV90bHNfcGFyc2Uoc2tiLCBcXHUwMDI2dCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghbnNpbV90bHNfcnhfb2ZmbG9hZGVkKG5zLCBcXHUwMDI2dCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNrYi1cXHUwMDNlZGVjcnlwdGVkID0gMTtcXG4rXFx0YXRvbWljNjRfaW5jKFxcdTAwMjZucy1cXHUwMDNldGxzLnJ4X3BhY2tldHMpO1xcbitcXHRhdG9taWM2NF9hZGQoc2tiLVxcdTAwM2VsZW4sIFxcdTAwMjZucy1cXHUwMDNldGxzLnJ4X2J5dGVzKTtcXG4rfVxcbitcXG4rLyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxcbisgKiBwZWVyJ3MgcmVjZWl2ZSBwYXRoLCBzbyB0aGlzIG9uZSBjYWxsIHNpdGUgc3RhbmRzIGluIGZvciB0aGUgaGFyZHdhcmUgb2ZcXG4rICogYm90aCBwb3J0cy4gIEl0IGhhcyB0byBydW4gYmVmb3JlIG5zaW1fZm9yd2FyZF9za2IoKSBtb3ZlcyB0aGUgc2tiIG92ZXIsXFxuKyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cXG4rICovXFxuK3ZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXFxuK1xcdFxcdCBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKVxcbit7XFxuK1xcdC8qIG5zaW1fZG9fcHNwKCkgcmFuIGZpcnN0IGFuZCBtYXkgaGF2ZSB3cmFwcGVkIHRoZSByZWNvcmQgc3RyZWFtLCBzb1xcbitcXHQgKiB0aGlzIGlzIG5vIGxvbmdlciBhIHBsYWluIFRMUyBvdmVyIFRDUCBwYWNrZXQuICBObyBOSUMgY2hhaW5zIHRoZVxcbitcXHQgKiB0d28gaW5saW5lIG9mZmxvYWRzIGVpdGhlciwgc28gbGVhdmUgaXQgYWxvbmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRuc2ltX3Rsc190eChucywgc2tiKTtcXG4rXFx0bnNpbV90bHNfcngocGVlcl9ucywgc2tiKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuc2ltX3Rsc19kZXZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0ICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24sXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG4rXFx0XFx0XFx0ICAgIHUzMiBzdGFydF9vZmZsb2FkX3RjcF9zbilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdC8qIE1pcnJvciB0aGUgY2lwaGVyIHN1cHBvcnQgb2YgYSB0eXBpY2FsIG9mZmxvYWQgY2FwYWJsZSBOSUMuICovXFxuK1xcdHN3aXRjaCAoY3J5cHRvX2luZm8tXFx1MDAzZWNpcGhlcl90eXBlKSB7XFxuK1xcdGNhc2UgVExTX0NJUEhFUl9BRVNfR0NNXzEyODpcXG4rXFx0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMjU2OlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRjb25uID0ga3phbGxvY19vYmooKmNvbm4pO1xcbitcXHRpZiAoIWNvbm4pXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0Y29ubi1cXHUwMDNlbGFkZHIgPSBzay1cXHUwMDNlc2tfdjZfcmN2X3NhZGRyO1xcbitcXHRcXHRjb25uLVxcdTAwM2VyYWRkciA9IHNrLVxcdTAwM2Vza192Nl9kYWRkcjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aXB2Nl9hZGRyX3NldF92NG1hcHBlZChzay1cXHUwMDNlc2tfcmN2X3NhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlbGFkZHIpO1xcbitcXHRcXHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVxcdTAwM2Vza19kYWRkciwgXFx1MDAyNmNvbm4tXFx1MDAzZXJhZGRyKTtcXG4rXFx0fVxcbitcXHRjb25uLVxcdTAwM2VmYW1pbHkgPSBzay1cXHUwMDNlc2tfZmFtaWx5O1xcbitcXHRjb25uLVxcdTAwM2VscG9ydCA9IGh0b25zKGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bSk7XFxuK1xcdGNvbm4tXFx1MDAzZXJwb3J0ID0gc2stXFx1MDAzZXNrX2Rwb3J0O1xcbitcXHRjb25uLVxcdTAwM2VkaXIgPSBkaXJlY3Rpb247XFxuK1xcdGNvbm4tXFx1MDAzZXN0YXJ0X3NuID0gc3RhcnRfb2ZmbG9hZF90Y3Bfc247XFxuK1xcdGNvbm4tXFx1MDAzZWNpcGhlcl90eXBlID0gY3J5cHRvX2luZm8tXFx1MDAzZWNpcGhlcl90eXBlO1xcbitcXHRjb25uLVxcdTAwM2V0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXHRpZiAobnMtXFx1MDAzZXRscy5jb3VudCBcXHUwMDNlPSBOU0lNX1RMU19NQVhfQ09OTikge1xcbitcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWxpc3QsIFxcdTAwMjZucy1cXHUwMDNldGxzLmNvbm5zKTtcXG4rXFx0bnMtXFx1MDAzZXRscy5jb3VudCsrO1xcbitcXHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXFxuK1xcdFxcdG5zLVxcdTAwM2V0bHMudHhfY29ubisrO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5zLVxcdTAwM2V0bHMucnhfY29ubisrO1xcbitvdXRfdW5sb2NrOlxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnMtXFx1MDAzZXRscy5sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtmcmVlKGNvbm4pO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnNpbV90bHNfZGV2X2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKGNvbm4tXFx1MDAzZXRsc19jdHggIT0gdGxzX2N0eCB8fCBjb25uLVxcdTAwM2VkaXIgIT0gZGlyZWN0aW9uKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Y29ubi1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdG5zLVxcdTAwM2V0bHMuY291bnQtLTtcXG4rXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKVxcbitcXHRcXHRcXHRucy1cXHUwMDNldGxzLnR4X2Nvbm4tLTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRucy1cXHUwMDNldGxzLnJ4X2Nvbm4tLTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuK1xcbitcXHRcXHRrZnJlZV9yY3UoY29ubiwgcmN1KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXG4rXFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJUTFMgJXMgY29udGV4dCBub3QgZm91bmQgb24gZGVsXFxcXG5cXFwiLFxcbitcXHRcXHQgICBkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/IFxcXCJ0eFxcXCIgOiBcXFwicnhcXFwiKTtcXG4rfVxcbitcXG4rLyogTm90aGluZyBpcyBldmVyIG91dCBvZiBzeW5jIGhlcmU6IHRoZSBlbXVsYXRpb24gZG9lcyBub3QgZGVjcnlwdCwgc28gaXRcXG4rICogbmV2ZXIgbG9zZXMgdGhlIHJlY29yZCBib3VuZGFyaWVzIGFuZCBuZXZlciBhc2tzIGZvciBhIHJlc3luYy4gIFRoZSBjb3JlXFxuKyAqIGNhbiBzdGlsbCBjYWxsIGluIG9uIHRoZSBSWCBwYXRoLCBzbyBhY2NvdW50IGZvciBpdCBhbmQgbW92ZSBvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgbnNpbV90bHNfZGV2X3Jlc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXFxuK1xcdFxcdFxcdCAgICAgICB1MzIgc2VxLCB1OCAqcmNkX3NuLFxcbitcXHRcXHRcXHQgICAgICAgZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcmVjdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRhdG9taWM2NF9pbmMoXFx1MDAyNm5zLVxcdTAwM2V0bHMucmVzeW5jcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcXG4rXFx0LnRsc19kZXZfYWRkXFx0PSBuc2ltX3Rsc19kZXZfYWRkLFxcbitcXHQudGxzX2Rldl9kZWxcXHQ9IG5zaW1fdGxzX2Rldl9kZWwsXFxuK1xcdC50bHNfZGV2X3Jlc3luY1xcdD0gbnNpbV90bHNfZGV2X3Jlc3luYyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzc2l6ZV90IG5zaW1fdGxzX2RiZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbitcXHRcXHRcXHRcXHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xcbitcXHRzaXplX3QgYnVmc2l6ZTtcXG4rXFx0Y2hhciAqYnVmLCAqcDtcXG4rXFx0aW50IGxlbjtcXG4rXFxuK1xcdC8qIFR3byBmdWxsIElQdjYgYWRkcmVzc2VzIGFuZCBwb3J0cyBmaXQgaW4gMTYwIGJ5dGVzIGEgbGluZS4gKi9cXG4rXFx0YnVmc2l6ZSA9IChOU0lNX1RMU19NQVhfQ09OTiAqIDE2MCkgKyAyMDA7XFxuK1xcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghYnVmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHAgPSBidWY7XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuK1xcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuK1xcdFxcdCAgICAgICBcXFwiY29ubiBjb3VudD0ldSB0eD0ldSByeD0ldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5zLVxcdTAwM2V0bHMuY291bnQsIG5zLVxcdTAwM2V0bHMudHhfY29ubiwgbnMtXFx1MDAzZXRscy5yeF9jb25uKTtcXG4rXFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJ0eF9wYWNrZXRzPSVsbHUgdHhfYnl0ZXM9JWxsdSByeF9wYWNrZXRzPSVsbHUgcnhfYnl0ZXM9JWxsdSByZXN5bmNzPSVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBhdG9taWM2NF9yZWFkKFxcdTAwMjZucy1cXHUwMDNldGxzLnR4X3BhY2tldHMpLFxcbitcXHRcXHQgICAgICAgYXRvbWljNjRfcmVhZChcXHUwMDI2bnMtXFx1MDAzZXRscy50eF9ieXRlcyksXFxuK1xcdFxcdCAgICAgICBhdG9taWM2NF9yZWFkKFxcdTAwMjZucy1cXHUwMDNldGxzLnJ4X3BhY2tldHMpLFxcbitcXHRcXHQgICAgICAgYXRvbWljNjRfcmVhZChcXHUwMDI2bnMtXFx1MDAzZXRscy5yeF9ieXRlcyksXFxuK1xcdFxcdCAgICAgICBhdG9taWM2NF9yZWFkKFxcdTAwMjZucy1cXHUwMDNldGxzLnJlc3luY3MpKTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcXG4rXFx0XFx0XFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlcyBbJXBJNmNdOiV1IC1cXHUwMDNlIFslcEk2Y106JXUgY2lwaGVyPSV1IHNuPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29ubi1cXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggP1xcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcInR4XFxcIiA6IFxcXCJyeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y29ubi1cXHUwMDNlbGFkZHIsIG50b2hzKGNvbm4tXFx1MDAzZWxwb3J0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb25uLVxcdTAwM2VyYWRkciwgbnRvaHMoY29ubi1cXHUwMDNlcnBvcnQpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29ubi1cXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXFx1MDAzZXN0YXJ0X3NuKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzICVwSTQ6JXUgLVxcdTAwM2UgJXBJNDoldSBjaXBoZXI9JXUgc249JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb25uLVxcdTAwM2VkaXIgPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/XFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwidHhcXFwiIDogXFxcInJ4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb25uLVxcdTAwM2VsYWRkci5zNl9hZGRyMzJbM10sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudG9ocyhjb25uLVxcdTAwM2VscG9ydCksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y29ubi1cXHUwMDNlcmFkZHIuczZfYWRkcjMyWzNdLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbnRvaHMoY29ubi1cXHUwMDNlcnBvcnQpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29ubi1cXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXFx1MDAzZXN0YXJ0X3NuKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnMtXFx1MDAzZXRscy5sb2NrKTtcXG4rXFxuK1xcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuK1xcbitcXHRrZnJlZShidWYpO1xcbitcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV90bHNfZGJnX2ZvcHMgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxcbitcXHQucmVhZCA9IG5zaW1fdGxzX2RiZ19yZWFkLFxcbitcXHQubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssXFxuK307XFxuK1xcbit2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuK3tcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bnMtXFx1MDAzZXRscy5sb2NrKTtcXG4rXFxuK1xcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXRsc2Rldl9vcHMgPSBcXHUwMDI2bnNpbV90bHNkZXZfb3BzO1xcbitcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcXG4rXFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTlNJTV9UTFNfRkVBVFVSRVM7XFxuK1xcbitcXHRucy1cXHUwMDNldGxzLmRmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwidGxzXFxcIiwgMDQwMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG5zLVxcdTAwM2Vuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuc2ltX3Rsc19kYmdfZm9wcyk7XFxuK31cXG4rXFxuK3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuK3tcXG4rXFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7XFxuK1xcdHUzMiBsZWZ0O1xcbitcXG4rXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVxcdTAwM2V0bHMuZGZpbGUpO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXHRsZWZ0ID0gbnMtXFx1MDAzZXRscy5jb3VudDtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHRtcCwgXFx1MDAyNm5zLVxcdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcXG4rXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZjb25uLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XFxuK1xcdH1cXG4rXFx0bnMtXFx1MDAzZXRscy5jb3VudCA9IDA7XFxuK1xcdG5zLVxcdTAwM2V0bHMudHhfY29ubiA9IDA7XFxuK1xcdG5zLVxcdTAwM2V0bHMucnhfY29ubiA9IDA7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbitcXG4rXFx0aWYgKGxlZnQpXFxuK1xcdFxcdG5ldGRldl9lcnIobnMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcInRlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGxlZnQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmVcXG5AQCAtMCwwICsxLDIgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuK3Rsc19vZmZsb2FkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxcbmluZGV4IDk4MDhjMmZiYWU5ZTguLjViZWI0ZWQ2NGViNTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXFxuQEAgLTEsNSArMSw3IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArIE9SIE1JVFxcbiBcXG4rQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcXG4rXFxuIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRkZXZsaW5rLnNoIFxcXFxcXG4gXFx0ZGV2bGlua19pbl9uZXRucy5zaCBcXFxcXFxuQEAgLTE1LDkgKzE3LDE0IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRwZWVyLnNoIFxcXFxcXG4gXFx0cHNhbXBsZS5zaCBcXFxcXFxuIFxcdHRjLW1xLXZpc2liaWxpdHkuc2ggXFxcXFxcbitcXHR0bHMuc2ggXFxcXFxcbiBcXHR1ZHBfdHVubmVsX25pYy5zaCBcXFxcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcXG4gXFxuK1RFU1RfR0VOX0ZJTEVTIDo9IFxcXFxcXG4rXFx0dGxzX29mZmxvYWRcXG4rIyBlbmQgb2YgVEVTVF9HRU5fRklMRVNcXG4rXFxuIFRFU1RfRklMRVMgOj0gXFxcXFxcbiBcXHRldGh0b29sLWNvbW1vbi5zaFxcbiAjIGVuZCBvZiBURVNUX0ZJTEVTXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zOTllMmM0ZDM4MmRmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2hcXG5AQCAtMCwwICsxLDI3MSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIEV4ZXJjaXNlIG5ldGRldnNpbSdzIGVtdWxhdGVkIGtUTFMgZGV2aWNlIG9mZmxvYWQgb3ZlciBhIGxpbmtlZFxcbisjIG5ldGRldnNpbSBwYWlyLCBvbmUgcG9ydCBwZXIgbmV0d29yayBuYW1lc3BhY2UuXFxuKyNcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTU0ICMga3NmdF9za2lwIGNvbWVzIGZyb20gbGliLnNoXFxuK1xcbitsaWJfZGlyPSQoZGlybmFtZSBcXFwiJDBcXFwiKVxcbisjIHNoZWxsY2hlY2sgc291cmNlPS4vLi4vLi4vLi4vbmV0L2xpYi5zaFxcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTFcXG4rc291cmNlIFxcXCIkbGliX2RpclxcXCIvLi4vLi4vLi4vbmV0L2xpYi5zaFxcbitcXG4rTlNJTV9ERVZfMV9JRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxcbitOU0lNX0RFVl8xX1NZUz0vc3lzL2J1cy9uZXRkZXZzaW0vZGV2aWNlcy9uZXRkZXZzaW0kTlNJTV9ERVZfMV9JRFxcbitOU0lNX0RFVl8yX0lEPSQoKDUxMiArIFJBTkRPTSAlIDI1NikpXFxuK05TSU1fREVWXzJfU1lTPS9zeXMvYnVzL25ldGRldnNpbS9kZXZpY2VzL25ldGRldnNpbSROU0lNX0RFVl8yX0lEXFxuK1xcbitOU0lNX0RFVl9TWVNfTkVXPS9zeXMvYnVzL25ldGRldnNpbS9uZXdfZGV2aWNlXFxuK05TSU1fREVWX1NZU19ERUw9L3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2VcXG4rTlNJTV9ERVZfU1lTX0xJTks9L3N5cy9idXMvbmV0ZGV2c2ltL2xpbmtfZGV2aWNlXFxuK1xcbitERUJVR0ZTPS9zeXMva2VybmVsL2RlYnVnL25ldGRldnNpbVxcbitOU0lNX0RFVl8xX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMV9JRC9wb3J0cy8wL3Rsc1xcbitOU0lNX0RFVl8yX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMl9JRC9wb3J0cy8wL3Rsc1xcbitcXG4rU1JWX0lQPTE5Mi4xNjguMTMuMVxcbitDTElfSVA9MTkyLjE2OC4xMy4yXFxuK1BPUlQ9NDQzM1xcbitcXG4rU1lOQ0RJUj1cXG4rQklOPSRsaWJfZGlyL3Rsc19vZmZsb2FkXFxuK1xcbitudW1fcGFzcz0wXFxuK251bV9mYWlsPTBcXG4rXFxuK2NoZWNrKClcXG4re1xcbitcXHRsb2NhbCBtc2c9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCByZXQ9XFxcIiQyXFxcIlxcbitcXG4rXFx0aWYgWyBcXFwiJHJldFxcXCIgLWVxIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJQQVNTOiAkbXNnXFxcIlxcbitcXHRcXHRudW1fcGFzcz0kKChudW1fcGFzcyArIDEpKVxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6ICRtc2dcXFwiXFxuK1xcdFxcdG51bV9mYWlsPSQoKG51bV9mYWlsICsgMSkpXFxuK1xcdGZpXFxuK31cXG4rXFxuKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyxTQzIzMjkgIyBpbnZva2VkIGZyb20gdGhlIEVYSVQgdHJhcFxcbitjbGVhbnVwKClcXG4re1xcbitcXHRpcCBuZXRucyBkZWwgbnNjbCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpcCBuZXRucyBkZWwgbnNzdiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIFxcXCIkTlNJTV9ERVZfMl9JRFxcXCIgXFx1MDAzZSBcXFwiJE5TSU1fREVWX1NZU19ERUxcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gXFxcIiROU0lNX0RFVl8xX0lEXFxcIiBcXHUwMDNlIFxcXCIkTlNJTV9ERVZfU1lTX0RFTFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0WyAtbiBcXFwiJFNZTkNESVJcXFwiIF0gXFx1MDAyNlxcdTAwMjYgcm0gLXJmIFxcXCIkU1lOQ0RJUlxcXCJcXG4rfVxcbitcXG4rc2V0dXAoKVxcbit7XFxuK1xcdHNldCAtZVxcbitcXG4rXFx0ZWNobyBcXFwiJE5TSU1fREVWXzFfSURcXFwiIFxcdTAwM2UgXFxcIiROU0lNX0RFVl9TWVNfTkVXXFxcIlxcbitcXHRlY2hvIFxcXCIkTlNJTV9ERVZfMl9JRFxcXCIgXFx1MDAzZSBcXFwiJE5TSU1fREVWX1NZU19ORVdcXFwiXFxuK1xcdHVkZXZhZG0gc2V0dGxlIDJcXHUwMDNlL2Rldi9udWxsIHx8IHNsZWVwIDFcXG4rXFxuK1xcdE5TSU1fREVWXzFfTkFNRT0kKGZpbmQgXFxcIiROU0lNX0RFVl8xX1NZU1xcXCIvbmV0IC1tYXhkZXB0aCAxIC10eXBlIGQgISBcXFxcXFxuK1xcdFxcdC1wYXRoIFxcXCIkTlNJTV9ERVZfMV9TWVNcXFwiL25ldCAtZXhlYyBiYXNlbmFtZSB7fSBcXFxcOylcXG4rXFx0TlNJTV9ERVZfMl9OQU1FPSQoZmluZCBcXFwiJE5TSU1fREVWXzJfU1lTXFxcIi9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFxcXFxcXG4rXFx0XFx0LXBhdGggXFxcIiROU0lNX0RFVl8yX1NZU1xcXCIvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFxcXFw7KVxcbitcXG4rXFx0aXAgbmV0bnMgYWRkIG5zc3ZcXG4rXFx0aXAgbmV0bnMgYWRkIG5zY2xcXG4rXFxuK1xcdGlwIGxpbmsgc2V0IFxcXCIkTlNJTV9ERVZfMV9OQU1FXFxcIiBuZXRucyBuc3N2XFxuK1xcdGlwIGxpbmsgc2V0IFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiBuZXRucyBuc2NsXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIG5zc3YgaXAgYWRkciBhZGQgXFxcIiRTUlZfSVAvMjRcXFwiIGRldiBcXFwiJE5TSU1fREVWXzFfTkFNRVxcXCJcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGFkZHIgYWRkIFxcXCIkQ0xJX0lQLzI0XFxcIiBkZXYgXFxcIiROU0lNX0RFVl8yX05BTUVcXFwiXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2IFxcXCIkTlNJTV9ERVZfMV9OQU1FXFxcIiB1cFxcbitcXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2IFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiB1cFxcbitcXG4rXFx0TlNJTV9ERVZfMV9GRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxcbitcXHRleGVjIHtOU0lNX0RFVl8xX0ZEfVxcdTAwM2MvdmFyL3J1bi9uZXRucy9uc3N2XFxuK1xcdE5TSU1fREVWXzFfSUZJRFg9JChpcCBuZXRucyBleGVjIG5zc3YgXFxcXFxcbitcXHRcXHRjYXQgL3N5cy9jbGFzcy9uZXQvXFxcIiROU0lNX0RFVl8xX05BTUVcXFwiL2lmaW5kZXgpXFxuK1xcbitcXHROU0lNX0RFVl8yX0ZEPSQoKDI1NiArIFJBTkRPTSAlIDI1NikpXFxuK1xcdGV4ZWMge05TSU1fREVWXzJfRkR9XFx1MDAzYy92YXIvcnVuL25ldG5zL25zY2xcXG4rXFx0TlNJTV9ERVZfMl9JRklEWD0kKGlwIG5ldG5zIGV4ZWMgbnNjbCBcXFxcXFxuK1xcdFxcdGNhdCAvc3lzL2NsYXNzL25ldC9cXFwiJE5TSU1fREVWXzJfTkFNRVxcXCIvaWZpbmRleClcXG4rXFxuK1xcdGVjaG8gXFxcIiROU0lNX0RFVl8xX0ZEOiROU0lNX0RFVl8xX0lGSURYICROU0lNX0RFVl8yX0ZEOiROU0lNX0RFVl8yX0lGSURYXFxcIiBcXFxcXFxuK1xcdFxcdFxcdTAwM2UgXFxcIiROU0lNX0RFVl9TWVNfTElOS1xcXCJcXG4rXFxuK1xcdFNZTkNESVI9JChta3RlbXAgLWQpXFxuK1xcdHNldCArZVxcbit9XFxuK1xcbitmZWF0dXJlKClcXG4re1xcbitcXHRsb2NhbCBuZXRucz1cXFwiJDFcXFwiXFxuK1xcdGxvY2FsIGRldj1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXQ9XFxcIiQzXFxcIlxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5ldG5zXFxcIiBldGh0b29sIC1rIFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IFxcXFxcXG4rXFx0XFx0c2VkIC1uIFxcXCJzL14kZmVhdDogXFxcXChbYS16XSpcXFxcKS4qL1xcXFwxL3BcXFwiXFxuK31cXG4rXFxuK2RiZ19maWVsZCgpXFxuK3tcXG4rXFx0c2VkIC1uIFxcXCJzLy4qXFxcXFxcdTAwM2MkMj1cXFxcKFswLTldKlxcXFwpLiovXFxcXDEvcFxcXCIgXFxcIiQxXFxcIiB8IGhlYWQgLTFcXG4rfVxcbitcXG4rdGxzX3N0YXQoKVxcbit7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBjYXQgL3Byb2MvbmV0L3Rsc19zdGF0IHwgXFxcXFxcbitcXHRcXHRzZWQgLW4gXFxcInMvXiQyIFxcXFwoWzAtOV0qXFxcXCkvXFxcXDEvcFxcXCJcXG4rfVxcbitcXG4rIyBCb3RoIGVuZHMgcGFyayBvbmNlIHRoZWlyIG9mZmxvYWQgaXMgaW5zdGFsbGVkIGFuZCBiZWZvcmUgYW55IGRhdGEgaXNcXG4rIyBzZW50LCBzbyB0aGUgZHJpdmVyJ3MgY29udGV4dCBjb3VudCBjYW4gYmUgc2FtcGxlZCB3aXRob3V0IHJhY2luZyB0aGVcXG4rIyB0cmFuc2Zlci4gIFBhc3MgXFxcIm5vc2FtcGxlXFxcIiB3aGVuIHRoZSBvZmZsb2FkIGlzIGV4cGVjdGVkIHRvIGJlIHJlZnVzZWQsXFxuKyMgc2luY2UgdGhlbiBuZWl0aGVyIGVuZCBldmVyIHJlYWNoZXMgdGhlIGJhcnJpZXIuXFxuK3J1bl9wYWlyKClcXG4re1xcbitcXHRsb2NhbCBzYW1wbGU9XFxcIiR7MTotc2FtcGxlfVxcXCJcXG4rXFx0bG9jYWwgc3J2X3JjIGNsaV9yYyB3YWl0ZWQ9MFxcbitcXG4rXFx0cm0gLWYgXFxcIiRTWU5DRElSXFxcIi8qLnJlYWR5IFxcXCIkU1lOQ0RJUlxcXCIvZ29cXG4rXFx0Q09OTlNfMT0wXFxuK1xcdENPTk5TXzI9MFxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc3N2IFxcXCIkQklOXFxcIiBzZXJ2ZXIgXFxcIiRTUlZfSVBcXFwiIFxcXCIkUE9SVFxcXCIgXFxcIiRTWU5DRElSXFxcIiBcXHUwMDI2XFxuK1xcdGxvY2FsIHNydl9waWQ9JCFcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc2NsIFxcXCIkQklOXFxcIiBjbGllbnQgXFxcIiRTUlZfSVBcXFwiIFxcXCIkUE9SVFxcXCIgXFxcIiRTWU5DRElSXFxcIiBcXHUwMDI2XFxuK1xcdGxvY2FsIGNsaV9waWQ9JCFcXG4rXFxuK1xcdGlmIFsgXFxcIiRzYW1wbGVcXFwiID0gXFxcInNhbXBsZVxcXCIgXTsgdGhlblxcbitcXHRcXHR3aGlsZSBbICEgLWUgXFxcIiRTWU5DRElSL3NlcnZlci5yZWFkeVxcXCIgXSB8fFxcbitcXHRcXHQgICAgICBbICEgLWUgXFxcIiRTWU5DRElSL2NsaWVudC5yZWFkeVxcXCIgXTsgZG9cXG4rXFx0XFx0XFx0WyBcXFwiJHdhaXRlZFxcXCIgLWdlIDIwMCBdIFxcdTAwMjZcXHUwMDI2IGJyZWFrXFxuK1xcdFxcdFxcdHNsZWVwIDAuMDVcXG4rXFx0XFx0XFx0d2FpdGVkPSQoKHdhaXRlZCArIDEpKVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdENPTk5TXzE9JChkYmdfZmllbGQgXFxcIiROU0lNX0RFVl8xX1RMU1xcXCIgY291bnQpXFxuK1xcdFxcdENPTk5TXzI9JChkYmdfZmllbGQgXFxcIiROU0lNX0RFVl8yX1RMU1xcXCIgY291bnQpXFxuK1xcdFxcdDogXFxcIiR7Q09OTlNfMTo9MH1cXFwiXFxuK1xcdFxcdDogXFxcIiR7Q09OTlNfMjo9MH1cXFwiXFxuK1xcdGZpXFxuK1xcdHRvdWNoIFxcXCIkU1lOQ0RJUi9nb1xcXCJcXG4rXFxuK1xcdHdhaXQgXFxcIiRzcnZfcGlkXFxcIjsgc3J2X3JjPSQ/XFxuK1xcdHdhaXQgXFxcIiRjbGlfcGlkXFxcIjsgY2xpX3JjPSQ/XFxuK1xcbitcXHRbIFxcXCIkc3J2X3JjXFxcIiAtZXEgMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRjbGlfcmNcXFwiIC1lcSAwIF1cXG4rfVxcbitcXG4rIyMjXFxuKyMjIyBDb2RlIHN0YXJ0XFxuKyMjI1xcbitcXG4raWYgWyBcXFwiJChpZCAtdSlcXFwiIC1uZSAwIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogbmVlZCByb290XFxcIlxcbitcXHRleGl0IFxcXCIka3NmdF9za2lwXFxcIlxcbitmaVxcbitcXG4raWYgISBjb21tYW5kIC12IGV0aHRvb2wgXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiBldGh0b29sIG5vdCBmb3VuZFxcXCJcXG4rXFx0ZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rZmlcXG4rXFxuK2lmIFsgISAteCBcXFwiJEJJTlxcXCIgXTsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiAkQklOIG5vdCBidWlsdFxcXCJcXG4rXFx0ZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rZmlcXG4rXFxuK21vZHByb2JlIG5ldGRldnNpbSAyXFx1MDAzZS9kZXYvbnVsbFxcbitpZiBbICEgLWQgL3N5cy9idXMvbmV0ZGV2c2ltIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogbmV0ZGV2c2ltIG5vdCBhdmFpbGFibGVcXFwiXFxuK1xcdGV4aXQgXFxcIiRrc2Z0X3NraXBcXFwiXFxuK2ZpXFxuK1xcbittb2Rwcm9iZSB0bHMgMlxcdTAwM2UvZGV2L251bGxcXG4raWYgWyAhIC1lIC9wcm9jL25ldC90bHNfc3RhdCBdOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGtlcm5lbCBUTFMgbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rZmlcXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK3NldHVwXFxuK1xcbisjIFRoZSBvZmZsb2FkIGhhcyB0byBiZSBhZHZlcnRpc2VkLCBhbmQgb24gYnkgZGVmYXVsdCBsaWtlIHRoZSBvdGhlclxcbisjIG5ldGRldnNpbSBjcnlwdG8gb2ZmbG9hZHMuXFxuK2ZvciBmIGluIHRscy1ody10eC1vZmZsb2FkIHRscy1ody1yeC1vZmZsb2FkOyBkb1xcbitcXHRbIFxcXCIkKGZlYXR1cmUgbnNzdiBcXFwiJE5TSU1fREVWXzFfTkFNRVxcXCIgXFxcIiRmXFxcIilcXFwiID0gXFxcIm9uXFxcIiBdXFxuK1xcdGNoZWNrIFxcXCIkZiBhZHZlcnRpc2VkIGFuZCBvbiBieSBkZWZhdWx0XFxcIiAkP1xcbitkb25lXFxuK1xcbitbIC1lIFxcXCIkTlNJTV9ERVZfMV9UTFNcXFwiIF1cXG4rY2hlY2sgXFxcInBlci1wb3J0IGRlYnVnZnMgdGxzIGZpbGUgZXhpc3RzXFxcIiAkP1xcbitcXG4rIyBNYWluIGRhdGEgcGF0aCBydW4uXFxuK3J1bl9wYWlyXFxuK2NoZWNrIFxcXCJvZmZsb2FkZWQgVExTIGRhdGEgdHJhbnNmZXJcXFwiICQ/XFxuK1xcbisjIFNhbXBsZWQgYXQgdGhlIGJhcnJpZXIsIHNvIGVhY2ggcG9ydCBtdXN0IGJlIGhvbGRpbmcgZXhhY3RseSB0aGUgVFggYW5kXFxuKyMgdGhlIFJYIGNvbnRleHQgb2YgaXRzIG93biBzb2NrZXQuXFxuK1sgXFxcIiRDT05OU18xXFxcIiAtZXEgMiBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRDT05OU18yXFxcIiAtZXEgMiBdXFxuK2NoZWNrIFxcXCJ0eCBhbmQgcnggY29udGV4dHMgaW5zdGFsbGVkIG9uIGJvdGggcG9ydHNcXFwiICQ/XFxuK1xcbisjIEJvdGggZW5kcyBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHRoZSBkZXZpY2UgcGF0aCwgbm90IHRoZSBTVyBmYWxsYmFjay5cXG4rWyBcXFwiJCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKVxcXCIgLWdlIDEgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQodGxzX3N0YXQgbnNzdiBUbHNSeERldmljZSlcXFwiIC1nZSAxIF0gXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRbIFxcXCIkKHRsc19zdGF0IG5zY2wgVGxzVHhEZXZpY2UpXFxcIiAtZ2UgMSBdIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0WyBcXFwiJCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKVxcXCIgLWdlIDEgXVxcbitjaGVjayBcXFwiYm90aCBlbmRzIHVzZWQgdGhlIGRldmljZSBwYXRoXFxcIiAkP1xcbitcXG4rWyBcXFwiJCh0bHNfc3RhdCBuc3N2IFRsc1R4U3cpXFxcIiAtZXEgMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQodGxzX3N0YXQgbnNjbCBUbHNUeFN3KVxcXCIgLWVxIDAgXVxcbitjaGVjayBcXFwibm8gc2lsZW50IGZhbGxiYWNrIHRvIHRoZSBzb2Z0d2FyZSBwYXRoXFxcIiAkP1xcbitcXG4rWyBcXFwiJCh0bHNfc3RhdCBuc3N2IFRsc0RlY3J5cHRFcnJvcilcXFwiIC1lcSAwIF0gXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRbIFxcXCIkKHRsc19zdGF0IG5zY2wgVGxzRGVjcnlwdEVycm9yKVxcXCIgLWVxIDAgXVxcbitjaGVjayBcXFwibm8gZGVjcnlwdCBlcnJvcnNcXFwiICQ/XFxuK1xcbisjIFRoZSBkcml2ZXIgbXVzdCBoYXZlIHNlZW4gdGhlIHJlY29yZHMgZ28gYnkgaW4gYm90aCBkaXJlY3Rpb25zLlxcbitbIFxcXCIkKGRiZ19maWVsZCBcXFwiJE5TSU1fREVWXzFfVExTXFxcIiB0eF9wYWNrZXRzKVxcXCIgLWdlIDEgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQoZGJnX2ZpZWxkIFxcXCIkTlNJTV9ERVZfMV9UTFNcXFwiIHJ4X3BhY2tldHMpXFxcIiAtZ2UgMSBdIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0WyBcXFwiJChkYmdfZmllbGQgXFxcIiROU0lNX0RFVl8yX1RMU1xcXCIgdHhfcGFja2V0cylcXFwiIC1nZSAxIF0gXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRbIFxcXCIkKGRiZ19maWVsZCBcXFwiJE5TSU1fREVWXzJfVExTXFxcIiByeF9wYWNrZXRzKVxcXCIgLWdlIDEgXVxcbitjaGVjayBcXFwiZHJpdmVyIGNvdW50ZWQgb2ZmbG9hZGVkIHBhY2tldHMgYm90aCB3YXlzXFxcIiAkP1xcbitcXG4rIyBTb2NrZXRzIGFyZSBjbG9zZWQgYnkgbm93LCBzbyBldmVyeSBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGdpdmVuIGJhY2suXFxuK1sgXFxcIiQoZGJnX2ZpZWxkIFxcXCIkTlNJTV9ERVZfMV9UTFNcXFwiIGNvdW50KVxcXCIgLWVxIDAgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQoZGJnX2ZpZWxkIFxcXCIkTlNJTV9ERVZfMl9UTFNcXFwiIGNvdW50KVxcXCIgLWVxIDAgXVxcbitjaGVjayBcXFwiYWxsIG9mZmxvYWQgY29udGV4dHMgcmVsZWFzZWQgb24gY2xvc2VcXFwiICQ/XFxuK1xcbitbIFxcXCIkKHRsc19zdGF0IG5zc3YgVGxzQ3VyclR4RGV2aWNlKVxcXCIgLWVxIDAgXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFsgXFxcIiQodGxzX3N0YXQgbnNzdiBUbHNDdXJyUnhEZXZpY2UpXFxcIiAtZXEgMCBdXFxuK2NoZWNrIFxcXCJubyBkZXZpY2UgY29udGV4dHMgbGVmdCBiZWhpbmRcXFwiICQ/XFxuK1xcbisjIFR1cm5pbmcgdGhlIGZlYXR1cmUgb2ZmIGhhcyB0byBtYWtlIHRoZSBvZmZsb2FkIHJlZnVzZSB0aGUgY29ubmVjdGlvbjtcXG4rIyB0aGUgdGVzdCBiaW5hcnkgaW5zaXN0cyBvbiB0aGUgZGV2aWNlIHBhdGgsIHNvIGl0IG11c3Qgbm93IGZhaWwuXFxuK2lwIG5ldG5zIGV4ZWMgbnNzdiBldGh0b29sIC1LIFxcXCIkTlNJTV9ERVZfMV9OQU1FXFxcIiB0bHMtaHctdHgtb2ZmbG9hZCBvZmZcXG4raXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXFxcIiROU0lNX0RFVl8xX05BTUVcXFwiIHRscy1ody1yeC1vZmZsb2FkIG9mZlxcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcXFwiJE5TSU1fREVWXzJfTkFNRVxcXCIgdGxzLWh3LXR4LW9mZmxvYWQgb2ZmXFxuK2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiB0bHMtaHctcngtb2ZmbG9hZCBvZmZcXG4rXFxuK3J1bl9wYWlyIG5vc2FtcGxlXFxuK3JjPSQ/XFxuK1sgXFxcIiRyY1xcXCIgLW5lIDAgXVxcbitjaGVjayBcXFwib2ZmbG9hZCBkZWNsaW5lZCBvbmNlIHRoZSBmZWF0dXJlIGlzIG9mZlxcXCIgJD9cXG4rXFxuK1sgXFxcIiQodGxzX3N0YXQgbnNzdiBUbHNUeFN3KVxcXCIgLWdlIDEgXVxcbitjaGVjayBcXFwic29mdHdhcmUgcGF0aCB1c2VkIHdoZW4gb2ZmbG9hZCBpcyBvZmZcXFwiICQ/XFxuK1xcbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcXFwiJE5TSU1fREVWXzFfTkFNRVxcXCIgdGxzLWh3LXR4LW9mZmxvYWQgb25cXG4raXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXFxcIiROU0lNX0RFVl8xX05BTUVcXFwiIHRscy1ody1yeC1vZmZsb2FkIG9uXFxuK2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFxcXCIkTlNJTV9ERVZfMl9OQU1FXFxcIiB0bHMtaHctdHgtb2ZmbG9hZCBvblxcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcXFwiJE5TSU1fREVWXzJfTkFNRVxcXCIgdGxzLWh3LXJ4LW9mZmxvYWQgb25cXG4rXFxuK3J1bl9wYWlyXFxuK2NoZWNrIFxcXCJvZmZsb2FkIHdvcmtzIGFnYWluIGFmdGVyIHJlLWVuYWJsaW5nXFxcIiAkP1xcbitcXG4rZWNob1xcbitlY2hvIFxcXCJwYXNzZWQ6ICRudW1fcGFzcyBmYWlsZWQ6ICRudW1fZmFpbFxcXCJcXG4rWyBcXFwiJG51bV9mYWlsXFxcIiAtZXEgMCBdIFxcdTAwMjZcXHUwMDI2IGV4aXQgMFxcbitleGl0IDFcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rsc19vZmZsb2FkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWJmYjRiZmNkNGY0NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xcbkBAIC0wLDAgKzEsNDk4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIGtUTFMgZGV2aWNlIG9mZmxvYWQgZGF0YSBwYXRoIGV4ZXJjaXNlLCBkcml2ZW4gYnkgdGxzLnNoLlxcbisgKlxcbisgKiBPbmUgaW5zdGFuY2UgcnVucyBhcyB0aGUgc2VydmVyIGFuZCBvbmUgYXMgdGhlIGNsaWVudCwgZWFjaCBpbiBpdHMgb3duXFxuKyAqIG5ldHdvcmsgbmFtZXNwYWNlLCBjb25uZWN0ZWQgYmFjayB0byBiYWNrIGJ5IGEgbGlua2VkIG5ldGRldnNpbSBwYWlyLlxcbisgKiBCb3RoIGVuZHMgZW5hYmxlIGtUTFMgYW5kIHJlbHkgb24gbmV0ZGV2c2ltJ3MgZW11bGF0ZWQgVExTIG9mZmxvYWQsIHNvXFxuKyAqIGV2ZXJ5IHJlY29yZCB0cmF2ZWxzIHRocm91Z2ggbmV0L3Rscy90bHNfZGV2aWNlLmMgcmF0aGVyIHRoYW4gdGhlXFxuKyAqIHNvZnR3YXJlIHBhdGguXFxuKyAqXFxuKyAqIFRoZSB0d28gcHJvY2Vzc2VzIHJlbmRlenZvdXMgdGhyb3VnaCBhIHNoYXJlZCBkaXJlY3Rvcnkgc28gdGhhdCBuZWl0aGVyXFxuKyAqIHNpZGUgc2VuZHMgYmVmb3JlIHRoZSBvdGhlciBoYXMgaW5zdGFsbGVkIGl0cyBSWCBvZmZsb2FkLlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L2luLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L3RjcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXJnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGxzLmhcXHUwMDNlXFxuK1xcbisjaWZuZGVmIFNPTF9UTFNcXG4rI2RlZmluZSBTT0xfVExTXFx0XFx0XFx0MjgyXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBUQ1BfVUxQXFxuKyNkZWZpbmUgVENQX1VMUFxcdFxcdFxcdDMxXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSBCVUxLX0xFTlxcdFxcdCgyMDAgKiAxMDI0KVxcbisjZGVmaW5lIE1PUkVfRlJBR1NcXHRcXHQ2NFxcbisjZGVmaW5lIFNQTElDRV9GUkFHX0xFTlxcdFxcdDQwOTZcXG4rI2RlZmluZSBTUExJQ0VfRlJBR1NcXHRcXHQ4XFxuK1xcbisvKiBUTFNfTUlOX1JFQ09SRF9TSVpFX0xJTSBhbmQgVExTX01BWF9QQVlMT0FEX1NJWkUsIHdoaWNoIGFyZSBub3QgdWFwaS4gKi9cXG4rI2RlZmluZSBSRUNfTElNX01JTlxcdFxcdDY0XFxuKyNkZWZpbmUgUkVDX0xJTV9NQVhcXHRcXHQxNjM4NFxcbitcXG4rI2RlZmluZSBTTUFMTF9SRUNTXFx0XFx0MTAwXFxuKyNkZWZpbmUgU01BTExfTEVOXFx0XFx0KFJFQ19MSU1fTUlOICogU01BTExfUkVDUylcXG4rXFxuKyNkZWZpbmUgU1lOQ19USU1FT1VUX01TXFx0XFx0MjAwMDBcXG4rI2RlZmluZSBDT05ORUNUX1RJTUVPVVRfTVNcXHQyMDAwMFxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJvbGU7XFxuK1xcbitzdGF0aWMgdm9pZCBkaWUoY29uc3QgY2hhciAqd2hhdClcXG4re1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiVzOiAlczogJXNcXFxcblxcXCIsIHJvbGUsIHdoYXQsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGV4aXQoMSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZhaWwoY29uc3QgY2hhciAqZm10LCAuLi4pXFxuK3tcXG4rXFx0dmFfbGlzdCBhcDtcXG4rXFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiJXM6IFxcXCIsIHJvbGUpO1xcbitcXHR2YV9zdGFydChhcCwgZm10KTtcXG4rXFx0dmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTtcXG4rXFx0dmFfZW5kKGFwKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXCIpO1xcbitcXHRleGl0KDEpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtc2xlZXAodW5zaWduZWQgaW50IG1zKVxcbit7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYyB0cyA9IHtcXG4rXFx0XFx0LnR2X3NlYyA9IG1zIC8gMTAwMCxcXG4rXFx0XFx0LnR2X25zZWMgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDBMLFxcbitcXHR9O1xcbitcXG4rXFx0bmFub3NsZWVwKFxcdTAwMjZ0cywgTlVMTCk7XFxuK31cXG4rXFxuKy8qIC9wcm9jL25ldC90bHNfc3RhdCBpcyBwZXIgbmV0bnMsIHNvIGJvdGggZW5kcyBjYW4gY2hlY2sgdGhhdCB0aGVpciBvd25cXG4rICogY29ubmVjdGlvbiByZWFsbHkgbGFuZGVkIG9uIHRoZSBkZXZpY2UgcGF0aC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfdGxzX3N0YXQoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRjaGFyIGxpbmVbMjU2XTtcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRmID0gZm9wZW4oXFxcIi9wcm9jL25ldC90bHNfc3RhdFxcXCIsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZilcXG4rXFx0XFx0ZGllKFxcXCJvcGVuIC9wcm9jL25ldC90bHNfc3RhdFxcXCIpO1xcbitcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcXG4rXFx0XFx0Y2hhciBrZXlbNjRdO1xcbitcXG4rXFx0XFx0aWYgKHNzY2FuZihsaW5lLCBcXFwiJTYzcyAlbHVcXFwiLCBrZXksIFxcdTAwMjZ2YWwpICE9IDIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIXN0cmNtcChrZXksIG5hbWUpKSB7XFxuK1xcdFxcdFxcdGZjbG9zZShmKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRmY2xvc2UoZik7XFxuK1xcdGZhaWwoXFxcIiVzIG5vdCBmb3VuZCBpbiAvcHJvYy9uZXQvdGxzX3N0YXRcXFwiLCBuYW1lKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZpbGxfcGF0dGVybihjaGFyICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBzZWVkKVxcbit7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbitcXHRcXHRidWZbaV0gPSAoY2hhcikoc2VlZCArIGkgKiAzMSArIChpIFxcdTAwM2VcXHUwMDNlIDgpICogNyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNoZWNrX3BhdHRlcm4oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgc2VlZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICp3aGF0KVxcbit7XFxuK1xcdGNoYXIgKndhbnQgPSBtYWxsb2MobGVuKTtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIXdhbnQpXFxuK1xcdFxcdGRpZShcXFwibWFsbG9jXFxcIik7XFxuK1xcbitcXHRmaWxsX3BhdHRlcm4od2FudCwgbGVuLCBzZWVkKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKSB7XFxuK1xcdFxcdGlmIChidWZbaV0gIT0gd2FudFtpXSlcXG4rXFx0XFx0XFx0ZmFpbChcXFwiJXM6IHBheWxvYWQgbWlzbWF0Y2ggYXQgYnl0ZSAlenU6IGdvdCAweCUwMnggd2FudCAweCUwMnhcXFwiLFxcbitcXHRcXHRcXHQgICAgIHdoYXQsIGksICh1bnNpZ25lZCBjaGFyKWJ1ZltpXSxcXG4rXFx0XFx0XFx0ICAgICAodW5zaWduZWQgY2hhcil3YW50W2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0ZnJlZSh3YW50KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3JpdGVfYWxsKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHNpemVfdCBkb25lID0gMDtcXG4rXFxuK1xcdHdoaWxlIChkb25lIFxcdTAwM2MgbGVuKSB7XFxuK1xcdFxcdHNzaXplX3QgbiA9IHNlbmQoZmQsIGJ1ZiArIGRvbmUsIGxlbiAtIGRvbmUsIDApO1xcbitcXG4rXFx0XFx0aWYgKG4gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGRpZShcXFwic2VuZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGRvbmUgKz0gbjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZWFkX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzaXplX3QgZG9uZSA9IDA7XFxuK1xcbitcXHR3aGlsZSAoZG9uZSBcXHUwMDNjIGxlbikge1xcbitcXHRcXHRzc2l6ZV90IG4gPSByZWN2KGZkLCBidWYgKyBkb25lLCBsZW4gLSBkb25lLCAwKTtcXG4rXFxuK1xcdFxcdGlmIChuIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gPT0gRUlOVFIpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRkaWUoXFxcInJlY3ZcXFwiKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobiA9PSAwKVxcbitcXHRcXHRcXHRmYWlsKFxcXCJwZWVyIGNsb3NlZCBhZnRlciAlenUgb2YgJXp1IGJ5dGVzXFxcIiwgZG9uZSwgbGVuKTtcXG4rXFx0XFx0ZG9uZSArPSBuO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuYWJsZV9rdGxzKGludCBmZClcXG4re1xcbitcXHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggY2kgPSB7fTtcXG4rXFx0dW5zaWduZWQgbG9uZyB0eF9iZWZvcmUsIHJ4X2JlZm9yZTtcXG4rXFxuK1xcdHR4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXFxcIlRsc1R4RGV2aWNlXFxcIik7XFxuK1xcdHJ4X2JlZm9yZSA9IHJlYWRfdGxzX3N0YXQoXFxcIlRsc1J4RGV2aWNlXFxcIik7XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKSlcXG4rXFx0XFx0ZGllKFxcXCJzZXRzb2Nrb3B0KFRDUF9VTFAsIHRscylcXFwiKTtcXG4rXFxuK1xcdGNpLmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTjtcXG4rXFx0Y2kuaW5mby5jaXBoZXJfdHlwZSA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjg7XFxuK1xcdG1lbXNldChjaS5pdiwgJ2knLCBzaXplb2YoY2kuaXYpKTtcXG4rXFx0bWVtc2V0KGNpLmtleSwgJ2snLCBzaXplb2YoY2kua2V5KSk7XFxuK1xcdG1lbXNldChjaS5zYWx0LCAncycsIHNpemVvZihjaS5zYWx0KSk7XFxuK1xcdG1lbXNldChjaS5yZWNfc2VxLCAwLCBzaXplb2YoY2kucmVjX3NlcSkpO1xcbitcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWCwgXFx1MDAyNmNpLCBzaXplb2YoY2kpKSlcXG4rXFx0XFx0ZGllKFxcXCJzZXRzb2Nrb3B0KFRMU19UWClcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19SWCwgXFx1MDAyNmNpLCBzaXplb2YoY2kpKSlcXG4rXFx0XFx0ZGllKFxcXCJzZXRzb2Nrb3B0KFRMU19SWClcXFwiKTtcXG4rXFxuK1xcdC8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZXhlcmNpc2U6IHJlZnVzZSB0byBzaWxlbnRseSBmYWxsIGJhY2sgdG9cXG4rXFx0ICogdGhlIHNvZnR3YXJlIHBhdGgsIG90aGVyd2lzZSB0aGUgdGVzdCB3b3VsZCBwYXNzIHdpdGhvdXQgZXZlclxcbitcXHQgKiB0b3VjaGluZyB0bHNfZGV2aWNlLmMuXFxuK1xcdCAqL1xcbitcXHRpZiAocmVhZF90bHNfc3RhdChcXFwiVGxzVHhEZXZpY2VcXFwiKSAhPSB0eF9iZWZvcmUgKyAxKVxcbitcXHRcXHRmYWlsKFxcXCJUWCBkaWQgbm90IGxhbmQgb24gdGhlIGRldmljZSBwYXRoIChUbHNUeERldmljZSAlbHUgLVxcdTAwM2UgJWx1KVxcXCIsXFxuK1xcdFxcdCAgICAgdHhfYmVmb3JlLCByZWFkX3Rsc19zdGF0KFxcXCJUbHNUeERldmljZVxcXCIpKTtcXG4rXFx0aWYgKHJlYWRfdGxzX3N0YXQoXFxcIlRsc1J4RGV2aWNlXFxcIikgIT0gcnhfYmVmb3JlICsgMSlcXG4rXFx0XFx0ZmFpbChcXFwiUlggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzUnhEZXZpY2UgJWx1IC1cXHUwMDNlICVsdSlcXFwiLFxcbitcXHRcXHQgICAgIHJ4X2JlZm9yZSwgcmVhZF90bHNfc3RhdChcXFwiVGxzUnhEZXZpY2VcXFwiKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHN5bmNfcGF0aChjaGFyICpvdXQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqd2hvKVxcbit7XFxuK1xcdGlmICgoc2l6ZV90KXNucHJpbnRmKG91dCwgbGVuLCBcXFwiJXMvJXMucmVhZHlcXFwiLCBkaXIsIHdobykgXFx1MDAzZT0gbGVuKVxcbitcXHRcXHRmYWlsKFxcXCJzeW5jIGRpciBwYXRoIHRvbyBsb25nXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcilcXG4re1xcbitcXHRjaGFyIG1pbmVbUEFUSF9NQVhdLCB0aGVpcnNbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBpbnQgd2FpdGVkID0gMDtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0c3luY19wYXRoKG1pbmUsIHNpemVvZihtaW5lKSwgZGlyLCBtZSk7XFxuK1xcdHN5bmNfcGF0aCh0aGVpcnMsIHNpemVvZih0aGVpcnMpLCBkaXIsIHBlZXIpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGRpZShcXFwiY3JlYXRlIHN5bmMgZmlsZVxcXCIpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHR3aGlsZSAoYWNjZXNzKHRoZWlycywgRl9PSykpIHtcXG4rXFx0XFx0aWYgKHdhaXRlZCBcXHUwMDNlPSBTWU5DX1RJTUVPVVRfTVMpXFxuK1xcdFxcdFxcdGZhaWwoXFxcInRpbWVkIG91dCB3YWl0aW5nIGZvciAlc1xcXCIsIHBlZXIpO1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHRcXHR3YWl0ZWQgKz0gMjA7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogQm90aCBlbmRzIHN0b3AgaGVyZSB3aXRoIHRoZWlyIG9mZmxvYWQgaW5zdGFsbGVkIGFuZCBubyBkYXRhIHNlbnQgeWV0LFxcbisgKiBzbyB0aGF0IHRoZSBkcml2ZXIgc3RhdGUgY2FuIGJlIGluc3BlY3RlZCBmcm9tIHRoZSBvdXRzaWRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd2FpdF9mb3JfZ28oY29uc3QgY2hhciAqZGlyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB3YWl0ZWQgPSAwO1xcbitcXHRjaGFyIGdvW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGlmICgoc2l6ZV90KXNucHJpbnRmKGdvLCBzaXplb2YoZ28pLCBcXFwiJXMvZ29cXFwiLCBkaXIpIFxcdTAwM2U9IHNpemVvZihnbykpXFxuK1xcdFxcdGZhaWwoXFxcInN5bmMgZGlyIHBhdGggdG9vIGxvbmdcXFwiKTtcXG4rXFxuK1xcdHdoaWxlIChhY2Nlc3MoZ28sIEZfT0spKSB7XFxuK1xcdFxcdGlmICh3YWl0ZWQgXFx1MDAzZT0gU1lOQ19USU1FT1VUX01TKVxcbitcXHRcXHRcXHRmYWlsKFxcXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ29cXFwiKTtcXG4rXFx0XFx0bXNsZWVwKDIwKTtcXG4rXFx0XFx0d2FpdGVkICs9IDIwO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIFNtYWxsIHdyaXRlcyB3aXRoIE1TR19NT1JFIGFjY3VtdWxhdGUgaW50byBvbmUgb3BlbiByZWNvcmQgYmVmb3JlIGl0IGlzXFxuKyAqIHB1c2hlZCwgd2hpY2ggaXMgdGhlIGludGVyZXN0aW5nIHBhcnQgb2YgdGxzX3B1c2hfZGF0YSgpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9tc2dfbW9yZShpbnQgZmQsIHVuc2lnbmVkIGludCBzZWVkKVxcbit7XFxuK1xcdGNoYXIgYnVmW01PUkVfRlJBR1MgKyAxXTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmaWxsX3BhdHRlcm4oYnVmLCBzaXplb2YoYnVmKSwgc2VlZCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTU9SRV9GUkFHUzsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZW5kKGZkLCBidWYgKyBpLCAxLCBNU0dfTU9SRSkgIT0gMSlcXG4rXFx0XFx0XFx0ZGllKFxcXCJzZW5kKE1TR19NT1JFKVxcXCIpO1xcbitcXHR9XFxuK1xcdGlmIChzZW5kKGZkLCBidWYgKyBNT1JFX0ZSQUdTLCAxLCAwKSAhPSAxKVxcbitcXHRcXHRkaWUoXFxcInNlbmQobGFzdClcXFwiKTtcXG4rfVxcbitcXG4rLyogc3BsaWNlKCkgcmVhY2hlcyB0bHNfcHVzaF9kYXRhKCkgd2l0aCBNU0dfU1BMSUNFX1BBR0VTIG9uY2VcXG4rICogVExTX1RYX1pFUk9DT1BZX1JPIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgZGlzdGluY3QgZnJhZ21lbnQgcGF0aC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNlbmRfc3BsaWNlKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbU1BMSUNFX0ZSQUdfTEVOXTtcXG4rXFx0aW50IHZhbCA9IDE7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxcbitcXHRcXHRkaWUoXFxcInNldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPKVxcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNQTElDRV9GUkFHUzsgaSsrKSB7XFxuK1xcdFxcdGludCBwWzJdO1xcbitcXG4rXFx0XFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQgKyBpICogU1BMSUNFX0ZSQUdfTEVOKTtcXG4rXFxuK1xcdFxcdGlmIChwaXBlKHApKVxcbitcXHRcXHRcXHRkaWUoXFxcInBpcGVcXFwiKTtcXG4rXFx0XFx0aWYgKHdyaXRlKHBbMV0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IHNpemVvZihidWYpKVxcbitcXHRcXHRcXHRkaWUoXFxcIndyaXRlIHRvIHBpcGVcXFwiKTtcXG4rXFx0XFx0aWYgKHNwbGljZShwWzBdLCBOVUxMLCBmZCwgTlVMTCwgc2l6ZW9mKGJ1ZiksXFxuK1xcdFxcdFxcdCAgIGkgPT0gU1BMSUNFX0ZSQUdTIC0gMSA/IDAgOiBTUExJQ0VfRl9NT1JFKSAhPVxcbitcXHRcXHQgICAgc2l6ZW9mKGJ1ZikpXFxuK1xcdFxcdFxcdGRpZShcXFwic3BsaWNlXFxcIik7XFxuK1xcdFxcdGNsb3NlKHBbMF0pO1xcbitcXHRcXHRjbG9zZShwWzFdKTtcXG4rXFx0fVxcbitcXG4rXFx0dmFsID0gMDtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxcbitcXHRcXHRkaWUoXFxcInNldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPIG9mZilcXFwiKTtcXG4rfVxcbitcXG4rLyogQSByZWNvcmQgY2FuIGJlIHVwIHRvIDE2Sywgc28gbm9ybWFsbHkgb25lIHNlZ21lbnQgY2FycmllcyBhIHBpZWNlIG9mIGFcXG4rICogc2luZ2xlIHJlY29yZC4gIFNocmlua2luZyB0aGUgbGltaXQgcHV0cyBhIGRvemVuIG9yIHNvIHdob2xlIHJlY29yZHMgaW5cXG4rICogZXZlcnkgc2VnbWVudCBpbnN0ZWFkLCB3aGljaCBpcyB0aGUgbXVsdGktcmVjb3JkIHBhdGggdGhyb3VnaCB0aGUgZHJpdmVyLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9zbWFsbF9yZWNvcmRzKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbU01BTExfTEVOXTtcXG4rXFx0dWludDE2X3QgbGltaXQ7XFxuK1xcbitcXHRsaW1pdCA9IFJFQ19MSU1fTUlOO1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgXFx1MDAyNmxpbWl0LFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKGxpbWl0KSkpXFxuK1xcdFxcdGRpZShcXFwic2V0c29ja29wdChUTFNfVFhfTUFYX1BBWUxPQURfTEVOKVxcXCIpO1xcbitcXG4rXFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpO1xcbitcXHR3cml0ZV9hbGwoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXG4rXFx0bGltaXQgPSBSRUNfTElNX01BWDtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9NQVhfUEFZTE9BRF9MRU4sIFxcdTAwMjZsaW1pdCxcXG4rXFx0XFx0ICAgICAgIHNpemVvZihsaW1pdCkpKVxcbitcXHRcXHRkaWUoXFxcInNldHNvY2tvcHQoVExTX1RYX01BWF9QQVlMT0FEX0xFTiByZXN0b3JlKVxcXCIpO1xcbit9XFxuK1xcbisjZGVmaW5lIFNFRURfQzJTX0JVTEtcXHQweDExXFxuKyNkZWZpbmUgU0VFRF9TMkNfQlVMS1xcdDB4MjJcXG4rI2RlZmluZSBTRUVEX0MyU19NT1JFXFx0MHgzM1xcbisjZGVmaW5lIFNFRURfQzJTX1NQTElDRVxcdDB4NDRcXG4rI2RlZmluZSBTRUVEX0MyU19TTUFMTFxcdDB4NTVcXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9jbGllbnQoaW50IGZkKVxcbit7XFxuK1xcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7XFxuK1xcbitcXHRpZiAoIWJ1ZilcXG4rXFx0XFx0ZGllKFxcXCJtYWxsb2NcXFwiKTtcXG4rXFxuK1xcdGZpbGxfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX0MyU19CVUxLKTtcXG4rXFx0d3JpdGVfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcXG4rXFxuK1xcdHJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcXG4rXFx0Y2hlY2tfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX1MyQ19CVUxLLCBcXFwic2VydmVyIC1cXHUwMDNlIGNsaWVudCBidWxrXFxcIik7XFxuK1xcbitcXHRzZW5kX21zZ19tb3JlKGZkLCBTRUVEX0MyU19NT1JFKTtcXG4rXFx0c2VuZF9zcGxpY2UoZmQsIFNFRURfQzJTX1NQTElDRSk7XFxuK1xcdHNlbmRfc21hbGxfcmVjb3JkcyhmZCwgU0VFRF9DMlNfU01BTEwpO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgdGhlIHNlcnZlcidzIHZlcmRpY3QgYmVmb3JlIHRlYXJpbmcgYW55dGhpbmcgZG93bi4gKi9cXG4rXFx0cmVhZF9hbGwoZmQsIGJ1ZiwgMSk7XFxuK1xcdGlmIChidWZbMF0gIT0gJ2snKVxcbitcXHRcXHRmYWlsKFxcXCJzZXJ2ZXIgcmVwb3J0ZWQgYSBmYWlsdXJlXFxcIik7XFxuK1xcbitcXHRmcmVlKGJ1Zik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkKVxcbit7XFxuK1xcdHNpemVfdCBzcGxpY2VfbGVuID0gKHNpemVfdClTUExJQ0VfRlJBR19MRU4gKiBTUExJQ0VfRlJBR1M7XFxuK1xcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhCVUxLX0xFTik7XFxuK1xcdGNoYXIgbW9yZVtNT1JFX0ZSQUdTICsgMV07XFxuK1xcdGNoYXIgKnNidWY7XFxuK1xcdGNoYXIgb2sgPSAnayc7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0c2J1ZiA9IG1hbGxvYyhzcGxpY2VfbGVuKTtcXG4rXFx0aWYgKCFidWYgfHwgIXNidWYpXFxuK1xcdFxcdGRpZShcXFwibWFsbG9jXFxcIik7XFxuK1xcbitcXHRyZWFkX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XFxuK1xcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSywgXFxcImNsaWVudCAtXFx1MDAzZSBzZXJ2ZXIgYnVsa1xcXCIpO1xcbitcXG4rXFx0ZmlsbF9wYXR0ZXJuKGJ1ZiwgQlVMS19MRU4sIFNFRURfUzJDX0JVTEspO1xcbitcXHR3cml0ZV9hbGwoZmQsIGJ1ZiwgQlVMS19MRU4pO1xcbitcXG4rXFx0cmVhZF9hbGwoZmQsIG1vcmUsIHNpemVvZihtb3JlKSk7XFxuK1xcdGNoZWNrX3BhdHRlcm4obW9yZSwgc2l6ZW9mKG1vcmUpLCBTRUVEX0MyU19NT1JFLCBcXFwiY2xpZW50IC1cXHUwMDNlIHNlcnZlciBNU0dfTU9SRVxcXCIpO1xcbitcXG4rXFx0cmVhZF9hbGwoZmQsIHNidWYsIHNwbGljZV9sZW4pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgU1BMSUNFX0ZSQUdTOyBpKyspXFxuK1xcdFxcdGNoZWNrX3BhdHRlcm4oc2J1ZiArIChzaXplX3QpaSAqIFNQTElDRV9GUkFHX0xFTixcXG4rXFx0XFx0XFx0ICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgK1xcbitcXHRcXHRcXHQgICAgICBpICogU1BMSUNFX0ZSQUdfTEVOLCBcXFwiY2xpZW50IC1cXHUwMDNlIHNlcnZlciBzcGxpY2VcXFwiKTtcXG4rXFxuK1xcdHJlYWRfYWxsKGZkLCBidWYsIFNNQUxMX0xFTik7XFxuK1xcdGNoZWNrX3BhdHRlcm4oYnVmLCBTTUFMTF9MRU4sIFNFRURfQzJTX1NNQUxMLFxcbitcXHRcXHQgICAgICBcXFwiY2xpZW50IC1cXHUwMDNlIHNlcnZlciBzbWFsbCByZWNvcmRzXFxcIik7XFxuK1xcbitcXHR3cml0ZV9hbGwoZmQsIFxcdTAwMjZvaywgMSk7XFxuK1xcbitcXHRmcmVlKHNidWYpO1xcbitcXHRmcmVlKGJ1Zik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZG9fc2VydmVyKGNvbnN0IGNoYXIgKmlwLCBpbnQgcG9ydCwgY29uc3QgY2hhciAqc3luY2RpcilcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2EgPSB7fTtcXG4rXFx0aW50IGxmZCwgZmQsIG9uZSA9IDE7XFxuK1xcbitcXHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xcbitcXHRpZiAobGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0ZGllKFxcXCJzb2NrZXRcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQobGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFxcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcXG4rXFx0XFx0ZGllKFxcXCJTT19SRVVTRUFERFJcXFwiKTtcXG4rXFxuK1xcdHNhLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRzYS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpO1xcbitcXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcXHUwMDI2c2Euc2luX2FkZHIpICE9IDEpXFxuK1xcdFxcdGZhaWwoXFxcImJhZCBiaW5kIGFkZHJlc3MgJXNcXFwiLCBpcCk7XFxuK1xcbitcXHRpZiAoYmluZChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c2EsIHNpemVvZihzYSkpKVxcbitcXHRcXHRkaWUoXFxcImJpbmRcXFwiKTtcXG4rXFx0aWYgKGxpc3RlbihsZmQsIDEpKVxcbitcXHRcXHRkaWUoXFxcImxpc3RlblxcXCIpO1xcbitcXG4rXFx0ZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0ZGllKFxcXCJhY2NlcHRcXFwiKTtcXG4rXFx0Y2xvc2UobGZkKTtcXG4rXFxuK1xcdGVuYWJsZV9rdGxzKGZkKTtcXG4rXFx0cmVuZGV6dm91cyhzeW5jZGlyLCBcXFwic2VydmVyXFxcIiwgXFxcImNsaWVudFxcXCIpO1xcbitcXHR3YWl0X2Zvcl9nbyhzeW5jZGlyKTtcXG4rXFxuK1xcdHJ1bl9zZXJ2ZXIoZmQpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkb19jbGllbnQoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xcbitcXHR1bnNpZ25lZCBpbnQgd2FpdGVkID0gMDtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0c2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdHNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7XFxuK1xcdGlmIChpbmV0X3B0b24oQUZfSU5FVCwgaXAsIFxcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcXG4rXFx0XFx0ZmFpbChcXFwiYmFkIHNlcnZlciBhZGRyZXNzICVzXFxcIiwgaXApO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdFxcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGRpZShcXFwic29ja2V0XFxcIik7XFxuK1xcdFxcdGlmICghY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzYSwgc2l6ZW9mKHNhKSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdGlmICh3YWl0ZWQgXFx1MDAzZT0gQ09OTkVDVF9USU1FT1VUX01TKVxcbitcXHRcXHRcXHRkaWUoXFxcImNvbm5lY3RcXFwiKTtcXG4rXFx0XFx0bXNsZWVwKDIwKTtcXG4rXFx0XFx0d2FpdGVkICs9IDIwO1xcbitcXHR9XFxuK1xcbitcXHRlbmFibGVfa3RscyhmZCk7XFxuK1xcdHJlbmRlenZvdXMoc3luY2RpciwgXFxcImNsaWVudFxcXCIsIFxcXCJzZXJ2ZXJcXFwiKTtcXG4rXFx0d2FpdF9mb3JfZ28oc3luY2Rpcik7XFxuK1xcbitcXHRydW5fY2xpZW50KGZkKTtcXG4rXFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4re1xcbitcXHRpbnQgcG9ydDtcXG4rXFxuK1xcdGlmIChhcmdjICE9IDUpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcXCJ1c2FnZTogJXMgc2VydmVyfGNsaWVudCBcXHUwMDNjaXBcXHUwMDNlIFxcdTAwM2Nwb3J0XFx1MDAzZSBcXHUwMDNjc3luY2RpclxcdTAwM2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGFyZ3ZbMF0pO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXG4rXFx0cm9sZSA9IGFyZ3ZbMV07XFxuK1xcdHBvcnQgPSBhdG9pKGFyZ3ZbM10pO1xcbitcXG4rXFx0aWYgKCFzdHJjbXAocm9sZSwgXFxcInNlcnZlclxcXCIpKVxcbitcXHRcXHRyZXR1cm4gZG9fc2VydmVyKGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xcbitcXHRpZiAoIXN0cmNtcChyb2xlLCBcXFwiY2xpZW50XFxcIikpXFxuK1xcdFxcdHJldHVybiBkb19jbGllbnQoYXJndlsyXSwgcG9ydCwgYXJndls0XSk7XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInVua25vd24gcm9sZSAlc1xcXFxuXFxcIiwgcm9sZSk7XFxuK1xcdHJldHVybiAyO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjE5Ljc1Njc1MjUxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3NTA2NTg1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9kb190bHNcIixcbiAgICBcIm5zaW1fdGxzX2luaXRcIixcbiAgICBcIm5zaW1fdGxzX3RlYXJkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlbXVsYXRlZCBrVExTIG9mZmxvYWQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGZvciB0ZXN0aW5nIFRMUyBoYXJkd2FyZSBvZmZsb2FkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucyB3aGVuIG5ldGRldnNpbSBpcyB1c2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZjZkMDM3YjgyOWFlNmQ3NDExOTE5MGEyMTg2Yjg0ZTU0ZTVhODYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTU6MDY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZ1xuaW5kZXggZmY3OWM0NjY3MTJkZi4uY2I0ZDRiYjg3YWZjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWdcbkBAIC02MDcsNiArNjA3LDcgQEAgY29uZmlnIE5FVERFVlNJTVxuIFx0ZGVwZW5kcyBvbiBJTkVUXG4gXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4rXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFM9blxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUEFHRV9QT09MXG4gXHRzZWxlY3QgTkVUX1NIQVBFUlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuaW5kZXggODc3MTgyMDRmYjRkZS4uYzdmNzYyMTMyM2IyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXG5AQCAtMjUsMyArMjUsNyBAQCBlbmRpZlxuIGlmbmVxICgkKENPTkZJR19NQUNTRUMpLClcbiBuZXRkZXZzaW0tb2JqcyArPSBtYWNzZWMub1xuIGVuZGlmXG4rXG4raWZuZXEgKCQoQ09ORklHX1RMU19ERVZJQ0UpLClcbituZXRkZXZzaW0tb2JqcyArPSB0bHMub1xuK2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCA0ZTlkN2UxMGI1MjdlLi44ZGMwYjBhN2QxYTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0xNTEsNiArMTUxLDggQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKGRyKVxuIFx0XHRnb3RvIG91dF9kcm9wX2ZyZWU7XG4gXG4rXHRuc2ltX2RvX3Rscyhza2IsIG5zLCBwZWVyX25zKTtcbitcbiBcdHJ4cSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuIFx0aWYgKHJ4cSBcdTAwM2U9IHBlZXJfZGV2LVx1MDAzZW51bV9yeF9xdWV1ZXMpXG4gXHRcdHJ4cSA9IHJ4cSAlIHBlZXJfZGV2LVx1MDAzZW51bV9yeF9xdWV1ZXM7XG5AQCAtMTA2Niw2ICsxMDY4LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFxuIFx0bnNpbV9tYWNzZWNfaW5pdChucyk7XG4gXHRuc2ltX2lwc2VjX2luaXQobnMpO1xuK1x0bnNpbV90bHNfaW5pdChucyk7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbiBcdGlmIChlcnIpXG5AQCAtMTA5Myw2ICsxMDk2LDcgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFx0UkNVX0lOSVRfUE9JTlRFUihucy1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVx1MDAzZW5ldGRldik7XG4gZXJyX2lwc2VjX3RlYXJkb3duOlxuK1x0bnNpbV90bHNfdGVhcmRvd24obnMpO1xuIFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX21hY3NlY190ZWFyZG93bihucyk7XG4gXHRuc2ltX2JwZl91bmluaXQobnMpO1xuQEAgLTExOTUsNiArMTE5OSw3IEBAIHZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFx0UkNVX0lOSVRfUE9JTlRFUihucy1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4gXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihucy1cdTAwM2Vuc2ltX2Rldl9wb3J0KSkge1xuK1x0XHRuc2ltX3Rsc190ZWFyZG93bihucyk7XG4gXHRcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcbiBcdFx0bnNpbV9pcHNlY190ZWFyZG93bihucyk7XG4gXHRcdG5zaW1fYnBmX3VuaW5pdChucyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41ODJhNzZhY2U5ZDM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC01Niw2ICs1NiwyMCBAQCBzdHJ1Y3QgbnNpbV9pcHNlYyB7XG4gXHR1MzIgdHg7XG4gfTtcbiBcbitzdHJ1Y3QgbnNpbV90bHMge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBjb25ucztcbitcdHNwaW5sb2NrX3QgbG9jaztcdC8qIHByb3RlY3RzIGNvbm5zIGFuZCB0aGUgY291bnRlcnMgYmVsb3cgKi9cbitcdHN0cnVjdCBkZW50cnkgKmRmaWxlO1xuK1x0dTMyIGNvdW50O1xuK1x0dTMyIHR4X2Nvbm47XG4rXHR1MzIgcnhfY29ubjtcbitcdGF0b21pYzY0X3QgdHhfcGFja2V0cztcbitcdGF0b21pYzY0X3QgdHhfYnl0ZXM7XG4rXHRhdG9taWM2NF90IHJ4X3BhY2tldHM7XG4rXHRhdG9taWM2NF90IHJ4X2J5dGVzO1xuK1x0YXRvbWljNjRfdCByZXN5bmNzO1xuK307XG4rXG4gI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfU0VDWV9DT1VOVCAzXG4gI2RlZmluZSBOU0lNX01BQ1NFQ19NQVhfUlhTQ19DT1VOVCAxXG4gc3RydWN0IG5zaW1fcnhzYyB7XG5AQCAtMTQxLDYgKzE1NSw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xuIFx0Ym9vbCBicGZfbWFwX2FjY2VwdDtcbiBcdHN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjO1xuIFx0c3RydWN0IG5zaW1fbWFjc2VjIG1hY3NlYztcbitcdHN0cnVjdCBuc2ltX3RscyB0bHM7XG4gXHRzdHJ1Y3QgbnNpbV92bGFuIHZsYW47XG4gXHRzdHJ1Y3Qge1xuIFx0XHR1MzIgaW5qZWN0X2Vycm9yO1xuQEAgLTQzNSw2ICs0NTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuICNlbmRpZlxuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuK3ZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4rdm9pZCBuc2ltX3Rsc190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4rdm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbitcdFx0IHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIG5zaW1fdGxzX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxuIHZvaWQgbnNpbV9tYWNzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4gdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjY5NWYyZTJiZWI4MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXG5AQCAtMCwwICsxLDQxOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC90bHMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibmV0ZGV2c2ltLmhcIlxuK1xuKy8qIEVtdWxhdGVkIGtUTFMgb2ZmbG9hZC4gIE5vIGNyeXB0byBpcyBwZXJmb3JtZWQsIHNvIHRoaXMgaXMgb25seSBzZWxmXG4rICogY29uc2lzdGVudCBiZXR3ZWVuIHR3byBuZXRkZXZzaW0gcG9ydHMuXG4rICovXG4rXG4rI2RlZmluZSBOU0lNX1RMU19NQVhfQ09OTlx0MzJcbitcbisvKiBuZXRkZXZfZml4X2ZlYXR1cmVzKCkgZHJvcHMgTkVUSUZfRl9IV19UTFNfUlggdW5sZXNzIHRoZSBkZXZpY2UgYWxzbyBkb2VzXG4rICogUlggY2hlY2tzdW1zLCB3aGljaCBldmVyeSBvZmZsb2FkIGNhcGFibGUgTklDIGRvZXMuXG4rICovXG4rI2RlZmluZSBOU0lNX1RMU19GRUFUVVJFU1x0KE5FVElGX0ZfSFdfVExTX1RYIHwgTkVUSUZfRl9IV19UTFNfUlggfCBcXFxuK1x0XHRcdFx0IE5FVElGX0ZfUlhDU1VNKVxuK1xuK3N0cnVjdCBuc2ltX3Rsc19jb25uIHtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXG4rXHQvKiBJZGVudGl0eSBhcyBzZWVuIG9uIHRoZSB3aXJlLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBwb3J0XG4rXHQgKiB0aGUgb2ZmbG9hZCB3YXMgaW5zdGFsbGVkIG9uOiBsKiBpcyB0aGlzIHNpZGUsIHIqIGlzIHRoZSBwZWVyLlxuK1x0ICovXG4rXHRzdHJ1Y3QgaW42X2FkZHIgbGFkZHI7XG4rXHRzdHJ1Y3QgaW42X2FkZHIgcmFkZHI7XG4rXHRfX2JlMTYgbHBvcnQ7XG4rXHRfX2JlMTYgcnBvcnQ7XG4rXHR1MTYgZmFtaWx5O1xuK1xuK1x0ZW51bSB0bHNfb2ZmbG9hZF9jdHhfZGlyIGRpcjtcbitcdHUzMiBzdGFydF9zbjtcbitcdHUxNiBjaXBoZXJfdHlwZTtcbitcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eDtcbit9O1xuK1xuK3N0cnVjdCBuc2ltX3Rsc190dXBsZSB7XG4rXHRzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7XG4rXHRzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7XG4rXHRfX2JlMTYgc3BvcnQ7XG4rXHRfX2JlMTYgZHBvcnQ7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBuc2ltX3Rsc19wYXJzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgIHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDtcbitcbitcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xuK1x0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aXB2Nl9hZGRyX3NldF92NG1hcHBlZChpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNnQtXHUwMDNlc2FkZHIpO1xuK1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKGlwaC1cdTAwM2VkYWRkciwgXHUwMDI2dC1cdTAwM2VkYWRkcik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xuK1x0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4rXG4rXHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR0LVx1MDAzZXNhZGRyID0gaXA2aC1cdTAwM2VzYWRkcjtcbitcdFx0dC1cdTAwM2VkYWRkciA9IGlwNmgtXHUwMDNlZGFkZHI7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0dGggPSB0Y3BfaGRyKHNrYik7XG4rXHR0LVx1MDAzZXNwb3J0ID0gdGgtXHUwMDNlc291cmNlO1xuK1x0dC1cdTAwM2VkcG9ydCA9IHRoLVx1MDAzZWRlc3Q7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogT24gUlggdGhlcmUgaXMgbm8gc29ja2V0IHRvIGxvb2sgYXQgeWV0LCBzbyBtYXRjaCB0aGUgdHVwbGUgaW5zdGFsbGVkIGF0XG4rICogLVx1MDAzZXRsc19kZXZfYWRkKCkgdGltZSwgd2hpY2ggaXMgd2hhdCB0aGUgaGFyZHdhcmUgZG9lcy4gIFRoZSBwYWNrZXQgaXNcbisgKiBhcnJpdmluZywgc28gdGhlIHBlZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXMgaXRzIHNvdXJjZS5cbisgKi9cbitzdGF0aWMgYm9vbCBuc2ltX3Rsc19yeF9vZmZsb2FkZWQoc3RydWN0IG5ldGRldnNpbSAqbnMsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuc2ltX3Rsc190dXBsZSAqdClcbit7XG4rXHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNvbm4sIFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucywgbGlzdClcbitcdFx0aWYgKGNvbm4tXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfUlggXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjb25uLVx1MDAzZWxwb3J0ID09IHQtXHUwMDNlZHBvcnQgXHUwMDI2XHUwMDI2IGNvbm4tXHUwMDNlcnBvcnQgPT0gdC1cdTAwM2VzcG9ydCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZjb25uLVx1MDAzZWxhZGRyLCBcdTAwMjZ0LVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZjb25uLVx1MDAzZXJhZGRyLCBcdTAwMjZ0LVx1MDAzZXNhZGRyKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogVGhlIHN0YWNrIGxlYXZlcyBhIHRhZyBzaXplZCBwbGFjZWhvbGRlciBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHJlY29yZCBmb3JcbisgKiB0aGUgZGV2aWNlIHRvIHdyaXRlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgaW50by4gIFdlIGRvIG5vdCBlbmNyeXB0LCBzb1xuKyAqIG5vdGhpbmcgZXZlciBmaWxscyBpdCBpbiwgYW5kIGl0IGNvbWVzIGZyb20gYSBwYWdlIGZyYWcgdGhhdCB3YXMgbmV2ZXJcbisgKiB6ZXJvZWQgLSBjbGVhciBpdCByYXRoZXIgdGhhbiBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9udG8gdGhlIHdpcmUuXG4rICpcbisgKiB0bHNfYXBwZW5kX2ZyYWcoKSBlaXRoZXIgZ3Jvd3MgdGhlIGxhc3QgZnJhZyBvciBhZGRzIG9uZSwgc28gdGhlIHRhZyBpc1xuKyAqIGFsd2F5cyB0aGUgdGFpbCBvZiB0aGUgcmVjb3JkJ3MgbGFzdCBmcmFnLiAgQ2xlYXJpbmcgaXQgdGhlcmUgcmF0aGVyIHRoYW5cbisgKiBpbiB0aGUgc2tiIGNvdmVycyBldmVyeSBzZWdtZW50IHRoZSByZWNvcmQgd2FzIHNwbGl0IGludG8sIGFuZCBhbnlcbisgKiByZXRyYW5zbWl0IG9mIHRoZW0sIHNpbmNlIHRoZXkgYWxsIHNoYXJlIHRoZXNlIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIG5zaW1fdGxzX3R4X3plcm9fdGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2tiLVx1MDAzZXNrKTtcbitcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xuK1x0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKnR4X2N0eDtcbitcdHUzMiBzZXEsIGVuZCwgdGFnX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dW5zaWduZWQgaW50IG9mZjtcbitcbitcdG9mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyBfX3RjcF9oZHJsZW4odGgpO1xuK1x0aWYgKG9mZiBcdTAwM2U9IHNrYi1cdTAwM2VsZW4pXG4rXHRcdHJldHVybjtcbitcbitcdHRhZ19zaXplID0gY3R4LVx1MDAzZXByb3RfaW5mby50YWdfc2l6ZTtcbitcdHNlcSA9IG50b2hsKHRoLVx1MDAzZXNlcSk7XG4rXHRlbmQgPSBzZXEgKyBza2ItXHUwMDNlbGVuIC0gb2ZmO1xuK1x0dHhfY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KGN0eCk7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eF9jdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0d2hpbGUgKGJlZm9yZShzZXEsIGVuZCkpIHtcbitcdFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkO1xuK1x0XHRza2JfZnJhZ190ICpmcmFnO1xuK1x0XHR1NjQgcmNkX3NuO1xuK1xuK1x0XHRyZWNvcmQgPSB0bHNfZ2V0X3JlY29yZCh0eF9jdHgsIHNlcSwgXHUwMDI2cmNkX3NuKTtcbitcdFx0aWYgKCFyZWNvcmQgfHwgdGxzX3JlY29yZF9pc19zdGFydF9tYXJrZXIocmVjb3JkKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0ZnJhZyA9IFx1MDAyNnJlY29yZC1cdTAwM2VmcmFnc1tyZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIC0gMV07XG4rXHRcdG1lbXNldChza2JfZnJhZ19hZGRyZXNzKGZyYWcpICsgc2tiX2ZyYWdfc2l6ZShmcmFnKSAtIHRhZ19zaXplLFxuK1x0XHQgICAgICAgMCwgdGFnX3NpemUpO1xuK1xuK1x0XHRzZXEgPSByZWNvcmQtXHUwMDNlZW5kX3NlcTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhfY3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbit9XG4rXG4rLyogU3RhbmQgaW4gZm9yIHRoZSBpbmxpbmUgZW5jcnlwdGlvbiB0aGUgaGFyZHdhcmUgd291bGQgZG8gb24gdGhlIHdheSBvdXQuXG4rICogVGhlIHN0YWNrIGhhcyBhbHJlYWR5IGZyYW1lZCB0aGUgcmVjb3JkIGFuZCB3ZSBkbyBub3QgZW5jcnlwdCwgc28gdGhlIHRhZ1xuKyAqIGlzIGFsbCB0aGF0IGlzIGxlZnQgdG8gZGVhbCB3aXRoLiAgVGhlIHNvY2tldCBpcyByaWdodCBoZXJlLCBzbyBpZGVudGlmeVxuKyAqIHRoZSBjb25uZWN0aW9uIHRoZSB3YXkgdGhlIHJlYWwgZHJpdmVycyBkby5cbisgKi9cbitzdGF0aWMgdm9pZCBuc2ltX3Rsc190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpZiAoIXRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuc2ltX3Rsc190eF96ZXJvX3RhZ3Moc2tiKTtcbitcdGF0b21pYzY0X2luYyhcdTAwMjZucy1cdTAwM2V0bHMudHhfcGFja2V0cyk7XG4rXHRhdG9taWM2NF9hZGQoc2tiLVx1MDAzZWxlbiwgXHUwMDI2bnMtXHUwMDNldGxzLnR4X2J5dGVzKTtcbit9XG4rXG4rLyogU3RhbmQgaW4gZm9yIHRoZSBpbmxpbmUgZGVjcnlwdGlvbiB0aGUgcGVlcidzIGhhcmR3YXJlIHdvdWxkIGRvLCBzaW5jZSB3ZVxuKyAqIGFyZSBhYm91dCB0byBoYW5kIHRoZSBza2IgdG8gaXRzIHN0YWNrLiAgV2UgZG8gbm90IGRlY3J5cHQgZWl0aGVyLCBzbyBhbGxcbisgKiB0aGF0IGlzIG5lZWRlZCBpcyB0aGUgZmxhZyB0aGF0IHRlbGxzIHRoZSBrVExTIGNvcmUgdGhlIHBheWxvYWQgaXNcbisgKiBhbHJlYWR5IHBsYWludGV4dC5cbisgKi9cbitzdGF0aWMgdm9pZCBuc2ltX3Rsc19yeChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgdDtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghbnNpbV90bHNfcGFyc2Uoc2tiLCBcdTAwMjZ0KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFuc2ltX3Rsc19yeF9vZmZsb2FkZWQobnMsIFx1MDAyNnQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbitcdGF0b21pYzY0X2luYyhcdTAwMjZucy1cdTAwM2V0bHMucnhfcGFja2V0cyk7XG4rXHRhdG9taWM2NF9hZGQoc2tiLVx1MDAzZWxlbiwgXHUwMDI2bnMtXHUwMDNldGxzLnJ4X2J5dGVzKTtcbit9XG4rXG4rLyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxuKyAqIHBlZXIncyByZWNlaXZlIHBhdGgsIHNvIHRoaXMgb25lIGNhbGwgc2l0ZSBzdGFuZHMgaW4gZm9yIHRoZSBoYXJkd2FyZSBvZlxuKyAqIGJvdGggcG9ydHMuICBJdCBoYXMgdG8gcnVuIGJlZm9yZSBuc2ltX2ZvcndhcmRfc2tiKCkgbW92ZXMgdGhlIHNrYiBvdmVyLFxuKyAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cbisgKi9cbit2b2lkIG5zaW1fZG9fdGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxuK1x0XHQgc3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucylcbit7XG4rXHQvKiBuc2ltX2RvX3BzcCgpIHJhbiBmaXJzdCBhbmQgbWF5IGhhdmUgd3JhcHBlZCB0aGUgcmVjb3JkIHN0cmVhbSwgc29cbitcdCAqIHRoaXMgaXMgbm8gbG9uZ2VyIGEgcGxhaW4gVExTIG92ZXIgVENQIHBhY2tldC4gIE5vIE5JQyBjaGFpbnMgdGhlXG4rXHQgKiB0d28gaW5saW5lIG9mZmxvYWRzIGVpdGhlciwgc28gbGVhdmUgaXQgYWxvbmUuXG4rXHQgKi9cbitcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0bnNpbV90bHNfdHgobnMsIHNrYik7XG4rXHRuc2ltX3Rsc19yeChwZWVyX25zLCBza2IpO1xuK31cbitcbitzdGF0aWMgaW50IG5zaW1fdGxzX2Rldl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdCAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbitcdFx0XHQgICAgdTMyIHN0YXJ0X29mZmxvYWRfdGNwX3NuKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBuc2ltX3Rsc19jb25uICpjb25uO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHQvKiBNaXJyb3IgdGhlIGNpcGhlciBzdXBwb3J0IG9mIGEgdHlwaWNhbCBvZmZsb2FkIGNhcGFibGUgTklDLiAqL1xuK1x0c3dpdGNoIChjcnlwdG9faW5mby1cdTAwM2VjaXBoZXJfdHlwZSkge1xuK1x0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4OlxuK1x0Y2FzZSBUTFNfQ0lQSEVSX0FFU19HQ01fMjU2OlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGNvbm4gPSBremFsbG9jX29iaigqY29ubik7XG4rXHRpZiAoIWNvbm4pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuK1x0XHRjb25uLVx1MDAzZWxhZGRyID0gc2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyO1xuK1x0XHRjb25uLVx1MDAzZXJhZGRyID0gc2stXHUwMDNlc2tfdjZfZGFkZHI7XG4rXHR9IGVsc2Uge1xuK1x0XHRpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNrLVx1MDAzZXNrX3Jjdl9zYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VsYWRkcik7XG4rXHRcdGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoc2stXHUwMDNlc2tfZGFkZHIsIFx1MDAyNmNvbm4tXHUwMDNlcmFkZHIpO1xuK1x0fVxuK1x0Y29ubi1cdTAwM2VmYW1pbHkgPSBzay1cdTAwM2Vza19mYW1pbHk7XG4rXHRjb25uLVx1MDAzZWxwb3J0ID0gaHRvbnMoaW5ldF9zayhzayktXHUwMDNlaW5ldF9udW0pO1xuK1x0Y29ubi1cdTAwM2VycG9ydCA9IHNrLVx1MDAzZXNrX2Rwb3J0O1xuK1x0Y29ubi1cdTAwM2VkaXIgPSBkaXJlY3Rpb247XG4rXHRjb25uLVx1MDAzZXN0YXJ0X3NuID0gc3RhcnRfb2ZmbG9hZF90Y3Bfc247XG4rXHRjb25uLVx1MDAzZWNpcGhlcl90eXBlID0gY3J5cHRvX2luZm8tXHUwMDNlY2lwaGVyX3R5cGU7XG4rXHRjb25uLVx1MDAzZXRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnMtXHUwMDNldGxzLmxvY2spO1xuK1x0aWYgKG5zLVx1MDAzZXRscy5jb3VudCBcdTAwM2U9IE5TSU1fVExTX01BWF9DT05OKSB7XG4rXHRcdHJldCA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmNvbm4tXHUwMDNlbGlzdCwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zKTtcbitcdG5zLVx1MDAzZXRscy5jb3VudCsrO1xuK1x0aWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKVxuK1x0XHRucy1cdTAwM2V0bHMudHhfY29ubisrO1xuK1x0ZWxzZVxuK1x0XHRucy1cdTAwM2V0bHMucnhfY29ubisrO1xuK291dF91bmxvY2s6XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRrZnJlZShjb25uKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5zaW1fdGxzX2Rldl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcbitcdFx0XHQgICAgIGVudW0gdGxzX29mZmxvYWRfY3R4X2RpciBkaXJlY3Rpb24pXG4re1xuK1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnMtXHUwMDNldGxzLmxvY2spO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbitcdFx0aWYgKGNvbm4tXHUwMDNldGxzX2N0eCAhPSB0bHNfY3R4IHx8IGNvbm4tXHUwMDNlZGlyICE9IGRpcmVjdGlvbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmNvbm4tXHUwMDNlbGlzdCk7XG4rXHRcdG5zLVx1MDAzZXRscy5jb3VudC0tO1xuK1x0XHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG4rXHRcdFx0bnMtXHUwMDNldGxzLnR4X2Nvbm4tLTtcbitcdFx0ZWxzZVxuK1x0XHRcdG5zLVx1MDAzZXRscy5yeF9jb25uLS07XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdG5ldGRldl9lcnIobmV0ZGV2LCBcIlRMUyAlcyBjb250ZXh0IG5vdCBmb3VuZCBvbiBkZWxcXG5cIixcbitcdFx0ICAgZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggPyBcInR4XCIgOiBcInJ4XCIpO1xuK31cbitcbisvKiBOb3RoaW5nIGlzIGV2ZXIgb3V0IG9mIHN5bmMgaGVyZTogdGhlIGVtdWxhdGlvbiBkb2VzIG5vdCBkZWNyeXB0LCBzbyBpdFxuKyAqIG5ldmVyIGxvc2VzIHRoZSByZWNvcmQgYm91bmRhcmllcyBhbmQgbmV2ZXIgYXNrcyBmb3IgYSByZXN5bmMuICBUaGUgY29yZVxuKyAqIGNhbiBzdGlsbCBjYWxsIGluIG9uIHRoZSBSWCBwYXRoLCBzbyBhY2NvdW50IGZvciBpdCBhbmQgbW92ZSBvbi5cbisgKi9cbitzdGF0aWMgaW50IG5zaW1fdGxzX2Rldl9yZXN5bmMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdCAgICAgICB1MzIgc2VxLCB1OCAqcmNkX3NuLFxuK1x0XHRcdCAgICAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGF0b21pYzY0X2luYyhcdTAwMjZucy1cdTAwM2V0bHMucmVzeW5jcyk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcbitcdC50bHNfZGV2X2FkZFx0PSBuc2ltX3Rsc19kZXZfYWRkLFxuK1x0LnRsc19kZXZfZGVsXHQ9IG5zaW1fdGxzX2Rldl9kZWwsXG4rXHQudGxzX2Rldl9yZXN5bmNcdD0gbnNpbV90bHNfZGV2X3Jlc3luYyxcbit9O1xuK1xuK3N0YXRpYyBzc2l6ZV90IG5zaW1fdGxzX2RiZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuK1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgbnNpbV90bHNfY29ubiAqY29ubjtcbitcdHNpemVfdCBidWZzaXplO1xuK1x0Y2hhciAqYnVmLCAqcDtcbitcdGludCBsZW47XG4rXG4rXHQvKiBUd28gZnVsbCBJUHY2IGFkZHJlc3NlcyBhbmQgcG9ydHMgZml0IGluIDE2MCBieXRlcyBhIGxpbmUuICovXG4rXHRidWZzaXplID0gKE5TSU1fVExTX01BWF9DT05OICogMTYwKSArIDIwMDtcbitcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJ1ZilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwID0gYnVmO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4rXHRcdCAgICAgICBcImNvbm4gY291bnQ9JXUgdHg9JXUgcng9JXVcXG5cIixcbitcdFx0ICAgICAgIG5zLVx1MDAzZXRscy5jb3VudCwgbnMtXHUwMDNldGxzLnR4X2Nvbm4sIG5zLVx1MDAzZXRscy5yeF9jb25uKTtcbitcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4rXHRcdCAgICAgICBcInR4X3BhY2tldHM9JWxsdSB0eF9ieXRlcz0lbGx1IHJ4X3BhY2tldHM9JWxsdSByeF9ieXRlcz0lbGx1IHJlc3luY3M9JWxsdVxcblwiLFxuK1x0XHQgICAgICAgYXRvbWljNjRfcmVhZChcdTAwMjZucy1cdTAwM2V0bHMudHhfcGFja2V0cyksXG4rXHRcdCAgICAgICBhdG9taWM2NF9yZWFkKFx1MDAyNm5zLVx1MDAzZXRscy50eF9ieXRlcyksXG4rXHRcdCAgICAgICBhdG9taWM2NF9yZWFkKFx1MDAyNm5zLVx1MDAzZXRscy5yeF9wYWNrZXRzKSxcbitcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJ4X2J5dGVzKSxcbitcdFx0ICAgICAgIGF0b21pYzY0X3JlYWQoXHUwMDI2bnMtXHUwMDNldGxzLnJlc3luY3MpKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgXHUwMDI2bnMtXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XG4rXHRcdGlmIChjb25uLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcbitcdFx0XHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuK1x0XHRcdFx0ICAgICAgIFwiJXMgWyVwSTZjXToldSAtXHUwMDNlIFslcEk2Y106JXUgY2lwaGVyPSV1IHNuPSV1XFxuXCIsXG4rXHRcdFx0XHQgICAgICAgY29ubi1cdTAwM2VkaXIgPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWCA/XG4rXHRcdFx0XHQgICAgICAgXCJ0eFwiIDogXCJyeFwiLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmNvbm4tXHUwMDNlbGFkZHIsIG50b2hzKGNvbm4tXHUwMDNlbHBvcnQpLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmNvbm4tXHUwMDNlcmFkZHIsIG50b2hzKGNvbm4tXHUwMDNlcnBvcnQpLFxuK1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlY2lwaGVyX3R5cGUsIGNvbm4tXHUwMDNlc3RhcnRfc24pO1xuK1x0XHRlbHNlXG4rXHRcdFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbitcdFx0XHRcdCAgICAgICBcIiVzICVwSTQ6JXUgLVx1MDAzZSAlcEk0OiV1IGNpcGhlcj0ldSBzbj0ldVxcblwiLFxuK1x0XHRcdFx0ICAgICAgIGNvbm4tXHUwMDNlZGlyID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFggP1xuK1x0XHRcdFx0ICAgICAgIFwidHhcIiA6IFwicnhcIixcbitcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZWxhZGRyLnM2X2FkZHIzMlszXSxcbitcdFx0XHRcdCAgICAgICBudG9ocyhjb25uLVx1MDAzZWxwb3J0KSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZjb25uLVx1MDAzZXJhZGRyLnM2X2FkZHIzMlszXSxcbitcdFx0XHRcdCAgICAgICBudG9ocyhjb25uLVx1MDAzZXJwb3J0KSxcbitcdFx0XHRcdCAgICAgICBjb25uLVx1MDAzZWNpcGhlcl90eXBlLCBjb25uLVx1MDAzZXN0YXJ0X3NuKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG4rXG4rXHRrZnJlZShidWYpO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV90bHNfZGJnX2ZvcHMgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4rXHQucmVhZCA9IG5zaW1fdGxzX2RiZ19yZWFkLFxuK1x0Lmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLFxuK307XG4rXG4rdm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuK3tcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5zLVx1MDAzZXRscy5jb25ucyk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZucy1cdTAwM2V0bHMubG9jayk7XG4rXG4rXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNldGxzZGV2X29wcyA9IFx1MDAyNm5zaW1fdGxzZGV2X29wcztcbitcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcbitcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBOU0lNX1RMU19GRUFUVVJFUztcbitcbitcdG5zLVx1MDAzZXRscy5kZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJ0bHNcIiwgMDQwMCxcbitcdFx0XHRcdFx0ICAgIG5zLVx1MDAzZW5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciwgbnMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZuc2ltX3Rsc19kYmdfZm9wcyk7XG4rfVxuK1xuK3ZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4re1xuK1x0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7XG4rXHR1MzIgbGVmdDtcbitcbitcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShucy1cdTAwM2V0bHMuZGZpbGUpO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcdGxlZnQgPSBucy1cdTAwM2V0bHMuY291bnQ7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgdG1wLCBcdTAwMjZucy1cdTAwM2V0bHMuY29ubnMsIGxpc3QpIHtcbitcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmNvbm4tXHUwMDNlbGlzdCk7XG4rXHRcdGtmcmVlX3JjdShjb25uLCByY3UpO1xuK1x0fVxuK1x0bnMtXHUwMDNldGxzLmNvdW50ID0gMDtcbitcdG5zLVx1MDAzZXRscy50eF9jb25uID0gMDtcbitcdG5zLVx1MDAzZXRscy5yeF9jb25uID0gMDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5zLVx1MDAzZXRscy5sb2NrKTtcbitcbitcdGlmIChsZWZ0KVxuK1x0XHRuZXRkZXZfZXJyKG5zLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcInRlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXG5cIixcbitcdFx0XHQgICBsZWZ0KTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vLmdpdGlnbm9yZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlkNGY1N2NiMmJhYTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS8uZ2l0aWdub3JlXG5AQCAtMCwwICsxLDIgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbit0bHNfb2ZmbG9hZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuaW5kZXggOTgwOGMyZmJhZTllOC4uNWJlYjRlZDY0ZWI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlXG5AQCAtMSw1ICsxLDcgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyBPUiBNSVRcbiBcbitDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxuK1xuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGRldmxpbmsuc2ggXFxcbiBcdGRldmxpbmtfaW5fbmV0bnMuc2ggXFxcbkBAIC0xNSw5ICsxNywxNCBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRwZWVyLnNoIFxcXG4gXHRwc2FtcGxlLnNoIFxcXG4gXHR0Yy1tcS12aXNpYmlsaXR5LnNoIFxcXG4rXHR0bHMuc2ggXFxcbiBcdHVkcF90dW5uZWxfbmljLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuIFxuK1RFU1RfR0VOX0ZJTEVTIDo9IFxcXG4rXHR0bHNfb2ZmbG9hZFxuKyMgZW5kIG9mIFRFU1RfR0VOX0ZJTEVTXG4rXG4gVEVTVF9GSUxFUyA6PSBcXFxuIFx0ZXRodG9vbC1jb21tb24uc2hcbiAjIGVuZCBvZiBURVNUX0ZJTEVTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zOTllMmM0ZDM4MmRmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLnNoXG5AQCAtMCwwICsxLDI3MSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgRXhlcmNpc2UgbmV0ZGV2c2ltJ3MgZW11bGF0ZWQga1RMUyBkZXZpY2Ugb2ZmbG9hZCBvdmVyIGEgbGlua2VkXG4rIyBuZXRkZXZzaW0gcGFpciwgb25lIHBvcnQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlLlxuKyNcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNTQgIyBrc2Z0X3NraXAgY29tZXMgZnJvbSBsaWIuc2hcbitcbitsaWJfZGlyPSQoZGlybmFtZSBcIiQwXCIpXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLy4uLy4uLy4uL25ldC9saWIuc2hcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTFcbitzb3VyY2UgXCIkbGliX2RpclwiLy4uLy4uLy4uL25ldC9saWIuc2hcbitcbitOU0lNX0RFVl8xX0lEPSQoKDI1NiArIFJBTkRPTSAlIDI1NikpXG4rTlNJTV9ERVZfMV9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzFfSURcbitOU0lNX0RFVl8yX0lEPSQoKDUxMiArIFJBTkRPTSAlIDI1NikpXG4rTlNJTV9ERVZfMl9TWVM9L3N5cy9idXMvbmV0ZGV2c2ltL2RldmljZXMvbmV0ZGV2c2ltJE5TSU1fREVWXzJfSURcbitcbitOU0lNX0RFVl9TWVNfTkVXPS9zeXMvYnVzL25ldGRldnNpbS9uZXdfZGV2aWNlXG4rTlNJTV9ERVZfU1lTX0RFTD0vc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVxuK05TSU1fREVWX1NZU19MSU5LPS9zeXMvYnVzL25ldGRldnNpbS9saW5rX2RldmljZVxuK1xuK0RFQlVHRlM9L3N5cy9rZXJuZWwvZGVidWcvbmV0ZGV2c2ltXG4rTlNJTV9ERVZfMV9UTFM9JERFQlVHRlMvbmV0ZGV2c2ltJE5TSU1fREVWXzFfSUQvcG9ydHMvMC90bHNcbitOU0lNX0RFVl8yX1RMUz0kREVCVUdGUy9uZXRkZXZzaW0kTlNJTV9ERVZfMl9JRC9wb3J0cy8wL3Rsc1xuK1xuK1NSVl9JUD0xOTIuMTY4LjEzLjFcbitDTElfSVA9MTkyLjE2OC4xMy4yXG4rUE9SVD00NDMzXG4rXG4rU1lOQ0RJUj1cbitCSU49JGxpYl9kaXIvdGxzX29mZmxvYWRcbitcbitudW1fcGFzcz0wXG4rbnVtX2ZhaWw9MFxuK1xuK2NoZWNrKClcbit7XG4rXHRsb2NhbCBtc2c9XCIkMVwiXG4rXHRsb2NhbCByZXQ9XCIkMlwiXG4rXG4rXHRpZiBbIFwiJHJldFwiIC1lcSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIlBBU1M6ICRtc2dcIlxuK1x0XHRudW1fcGFzcz0kKChudW1fcGFzcyArIDEpKVxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogJG1zZ1wiXG4rXHRcdG51bV9mYWlsPSQoKG51bV9mYWlsICsgMSkpXG4rXHRmaVxuK31cbitcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcsU0MyMzI5ICMgaW52b2tlZCBmcm9tIHRoZSBFWElUIHRyYXBcbitjbGVhbnVwKClcbit7XG4rXHRpcCBuZXRucyBkZWwgbnNjbCAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgbnNzdiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIFwiJE5TSU1fREVWXzJfSURcIiBcdTAwM2UgXCIkTlNJTV9ERVZfU1lTX0RFTFwiIDJcdTAwM2UvZGV2L251bGxcbitcdGVjaG8gXCIkTlNJTV9ERVZfMV9JRFwiIFx1MDAzZSBcIiROU0lNX0RFVl9TWVNfREVMXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0WyAtbiBcIiRTWU5DRElSXCIgXSBcdTAwMjZcdTAwMjYgcm0gLXJmIFwiJFNZTkNESVJcIlxuK31cbitcbitzZXR1cCgpXG4re1xuK1x0c2V0IC1lXG4rXG4rXHRlY2hvIFwiJE5TSU1fREVWXzFfSURcIiBcdTAwM2UgXCIkTlNJTV9ERVZfU1lTX05FV1wiXG4rXHRlY2hvIFwiJE5TSU1fREVWXzJfSURcIiBcdTAwM2UgXCIkTlNJTV9ERVZfU1lTX05FV1wiXG4rXHR1ZGV2YWRtIHNldHRsZSAyXHUwMDNlL2Rldi9udWxsIHx8IHNsZWVwIDFcbitcbitcdE5TSU1fREVWXzFfTkFNRT0kKGZpbmQgXCIkTlNJTV9ERVZfMV9TWVNcIi9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFxcXG4rXHRcdC1wYXRoIFwiJE5TSU1fREVWXzFfU1lTXCIvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFxcOylcbitcdE5TSU1fREVWXzJfTkFNRT0kKGZpbmQgXCIkTlNJTV9ERVZfMl9TWVNcIi9uZXQgLW1heGRlcHRoIDEgLXR5cGUgZCAhIFxcXG4rXHRcdC1wYXRoIFwiJE5TSU1fREVWXzJfU1lTXCIvbmV0IC1leGVjIGJhc2VuYW1lIHt9IFxcOylcbitcbitcdGlwIG5ldG5zIGFkZCBuc3N2XG4rXHRpcCBuZXRucyBhZGQgbnNjbFxuK1xuK1x0aXAgbGluayBzZXQgXCIkTlNJTV9ERVZfMV9OQU1FXCIgbmV0bnMgbnNzdlxuK1x0aXAgbGluayBzZXQgXCIkTlNJTV9ERVZfMl9OQU1FXCIgbmV0bnMgbnNjbFxuK1xuK1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGFkZHIgYWRkIFwiJFNSVl9JUC8yNFwiIGRldiBcIiROU0lNX0RFVl8xX05BTUVcIlxuK1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGFkZHIgYWRkIFwiJENMSV9JUC8yNFwiIGRldiBcIiROU0lNX0RFVl8yX05BTUVcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiBcIiROU0lNX0RFVl8xX05BTUVcIiB1cFxuK1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiBcIiROU0lNX0RFVl8yX05BTUVcIiB1cFxuK1xuK1x0TlNJTV9ERVZfMV9GRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxuK1x0ZXhlYyB7TlNJTV9ERVZfMV9GRH1cdTAwM2MvdmFyL3J1bi9uZXRucy9uc3N2XG4rXHROU0lNX0RFVl8xX0lGSURYPSQoaXAgbmV0bnMgZXhlYyBuc3N2IFxcXG4rXHRcdGNhdCAvc3lzL2NsYXNzL25ldC9cIiROU0lNX0RFVl8xX05BTUVcIi9pZmluZGV4KVxuK1xuK1x0TlNJTV9ERVZfMl9GRD0kKCgyNTYgKyBSQU5ET00gJSAyNTYpKVxuK1x0ZXhlYyB7TlNJTV9ERVZfMl9GRH1cdTAwM2MvdmFyL3J1bi9uZXRucy9uc2NsXG4rXHROU0lNX0RFVl8yX0lGSURYPSQoaXAgbmV0bnMgZXhlYyBuc2NsIFxcXG4rXHRcdGNhdCAvc3lzL2NsYXNzL25ldC9cIiROU0lNX0RFVl8yX05BTUVcIi9pZmluZGV4KVxuK1xuK1x0ZWNobyBcIiROU0lNX0RFVl8xX0ZEOiROU0lNX0RFVl8xX0lGSURYICROU0lNX0RFVl8yX0ZEOiROU0lNX0RFVl8yX0lGSURYXCIgXFxcbitcdFx0XHUwMDNlIFwiJE5TSU1fREVWX1NZU19MSU5LXCJcbitcbitcdFNZTkNESVI9JChta3RlbXAgLWQpXG4rXHRzZXQgK2Vcbit9XG4rXG4rZmVhdHVyZSgpXG4re1xuK1x0bG9jYWwgbmV0bnM9XCIkMVwiXG4rXHRsb2NhbCBkZXY9XCIkMlwiXG4rXHRsb2NhbCBmZWF0PVwiJDNcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuZXRuc1wiIGV0aHRvb2wgLWsgXCIkZGV2XCIgMlx1MDAzZS9kZXYvbnVsbCB8IFxcXG4rXHRcdHNlZCAtbiBcInMvXiRmZWF0OiBcXChbYS16XSpcXCkuKi9cXDEvcFwiXG4rfVxuK1xuK2RiZ19maWVsZCgpXG4re1xuK1x0c2VkIC1uIFwicy8uKlxcXHUwMDNjJDI9XFwoWzAtOV0qXFwpLiovXFwxL3BcIiBcIiQxXCIgfCBoZWFkIC0xXG4rfVxuK1xuK3Rsc19zdGF0KClcbit7XG4rXHRpcCBuZXRucyBleGVjIFwiJDFcIiBjYXQgL3Byb2MvbmV0L3Rsc19zdGF0IHwgXFxcbitcdFx0c2VkIC1uIFwicy9eJDIgXFwoWzAtOV0qXFwpL1xcMS9wXCJcbit9XG4rXG4rIyBCb3RoIGVuZHMgcGFyayBvbmNlIHRoZWlyIG9mZmxvYWQgaXMgaW5zdGFsbGVkIGFuZCBiZWZvcmUgYW55IGRhdGEgaXNcbisjIHNlbnQsIHNvIHRoZSBkcml2ZXIncyBjb250ZXh0IGNvdW50IGNhbiBiZSBzYW1wbGVkIHdpdGhvdXQgcmFjaW5nIHRoZVxuKyMgdHJhbnNmZXIuICBQYXNzIFwibm9zYW1wbGVcIiB3aGVuIHRoZSBvZmZsb2FkIGlzIGV4cGVjdGVkIHRvIGJlIHJlZnVzZWQsXG4rIyBzaW5jZSB0aGVuIG5laXRoZXIgZW5kIGV2ZXIgcmVhY2hlcyB0aGUgYmFycmllci5cbitydW5fcGFpcigpXG4re1xuK1x0bG9jYWwgc2FtcGxlPVwiJHsxOi1zYW1wbGV9XCJcbitcdGxvY2FsIHNydl9yYyBjbGlfcmMgd2FpdGVkPTBcbitcbitcdHJtIC1mIFwiJFNZTkNESVJcIi8qLnJlYWR5IFwiJFNZTkNESVJcIi9nb1xuK1x0Q09OTlNfMT0wXG4rXHRDT05OU18yPTBcbitcbitcdGlwIG5ldG5zIGV4ZWMgbnNzdiBcIiRCSU5cIiBzZXJ2ZXIgXCIkU1JWX0lQXCIgXCIkUE9SVFwiIFwiJFNZTkNESVJcIiBcdTAwMjZcbitcdGxvY2FsIHNydl9waWQ9JCFcbitcdGlwIG5ldG5zIGV4ZWMgbnNjbCBcIiRCSU5cIiBjbGllbnQgXCIkU1JWX0lQXCIgXCIkUE9SVFwiIFwiJFNZTkNESVJcIiBcdTAwMjZcbitcdGxvY2FsIGNsaV9waWQ9JCFcbitcbitcdGlmIFsgXCIkc2FtcGxlXCIgPSBcInNhbXBsZVwiIF07IHRoZW5cbitcdFx0d2hpbGUgWyAhIC1lIFwiJFNZTkNESVIvc2VydmVyLnJlYWR5XCIgXSB8fFxuK1x0XHQgICAgICBbICEgLWUgXCIkU1lOQ0RJUi9jbGllbnQucmVhZHlcIiBdOyBkb1xuK1x0XHRcdFsgXCIkd2FpdGVkXCIgLWdlIDIwMCBdIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRcdHNsZWVwIDAuMDVcbitcdFx0XHR3YWl0ZWQ9JCgod2FpdGVkICsgMSkpXG4rXHRcdGRvbmVcbitcdFx0Q09OTlNfMT0kKGRiZ19maWVsZCBcIiROU0lNX0RFVl8xX1RMU1wiIGNvdW50KVxuK1x0XHRDT05OU18yPSQoZGJnX2ZpZWxkIFwiJE5TSU1fREVWXzJfVExTXCIgY291bnQpXG4rXHRcdDogXCIke0NPTk5TXzE6PTB9XCJcbitcdFx0OiBcIiR7Q09OTlNfMjo9MH1cIlxuK1x0ZmlcbitcdHRvdWNoIFwiJFNZTkNESVIvZ29cIlxuK1xuK1x0d2FpdCBcIiRzcnZfcGlkXCI7IHNydl9yYz0kP1xuK1x0d2FpdCBcIiRjbGlfcGlkXCI7IGNsaV9yYz0kP1xuK1xuK1x0WyBcIiRzcnZfcmNcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBbIFwiJGNsaV9yY1wiIC1lcSAwIF1cbit9XG4rXG4rIyMjXG4rIyMjIENvZGUgc3RhcnRcbisjIyNcbitcbitpZiBbIFwiJChpZCAtdSlcIiAtbmUgMCBdOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogbmVlZCByb290XCJcbitcdGV4aXQgXCIka3NmdF9za2lwXCJcbitmaVxuK1xuK2lmICEgY29tbWFuZCAtdiBldGh0b29sIFx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGV0aHRvb2wgbm90IGZvdW5kXCJcbitcdGV4aXQgXCIka3NmdF9za2lwXCJcbitmaVxuK1xuK2lmIFsgISAteCBcIiRCSU5cIiBdOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogJEJJTiBub3QgYnVpbHRcIlxuK1x0ZXhpdCBcIiRrc2Z0X3NraXBcIlxuK2ZpXG4rXG4rbW9kcHJvYmUgbmV0ZGV2c2ltIDJcdTAwM2UvZGV2L251bGxcbitpZiBbICEgLWQgL3N5cy9idXMvbmV0ZGV2c2ltIF07IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBuZXRkZXZzaW0gbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0IFwiJGtzZnRfc2tpcFwiXG4rZmlcbitcbittb2Rwcm9iZSB0bHMgMlx1MDAzZS9kZXYvbnVsbFxuK2lmIFsgISAtZSAvcHJvYy9uZXQvdGxzX3N0YXQgXTsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGtlcm5lbCBUTFMgbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0IFwiJGtzZnRfc2tpcFwiXG4rZmlcbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK3NldHVwXG4rXG4rIyBUaGUgb2ZmbG9hZCBoYXMgdG8gYmUgYWR2ZXJ0aXNlZCwgYW5kIG9uIGJ5IGRlZmF1bHQgbGlrZSB0aGUgb3RoZXJcbisjIG5ldGRldnNpbSBjcnlwdG8gb2ZmbG9hZHMuXG4rZm9yIGYgaW4gdGxzLWh3LXR4LW9mZmxvYWQgdGxzLWh3LXJ4LW9mZmxvYWQ7IGRvXG4rXHRbIFwiJChmZWF0dXJlIG5zc3YgXCIkTlNJTV9ERVZfMV9OQU1FXCIgXCIkZlwiKVwiID0gXCJvblwiIF1cbitcdGNoZWNrIFwiJGYgYWR2ZXJ0aXNlZCBhbmQgb24gYnkgZGVmYXVsdFwiICQ/XG4rZG9uZVxuK1xuK1sgLWUgXCIkTlNJTV9ERVZfMV9UTFNcIiBdXG4rY2hlY2sgXCJwZXItcG9ydCBkZWJ1Z2ZzIHRscyBmaWxlIGV4aXN0c1wiICQ/XG4rXG4rIyBNYWluIGRhdGEgcGF0aCBydW4uXG4rcnVuX3BhaXJcbitjaGVjayBcIm9mZmxvYWRlZCBUTFMgZGF0YSB0cmFuc2ZlclwiICQ/XG4rXG4rIyBTYW1wbGVkIGF0IHRoZSBiYXJyaWVyLCBzbyBlYWNoIHBvcnQgbXVzdCBiZSBob2xkaW5nIGV4YWN0bHkgdGhlIFRYIGFuZFxuKyMgdGhlIFJYIGNvbnRleHQgb2YgaXRzIG93biBzb2NrZXQuXG4rWyBcIiRDT05OU18xXCIgLWVxIDIgXSBcdTAwMjZcdTAwMjYgWyBcIiRDT05OU18yXCIgLWVxIDIgXVxuK2NoZWNrIFwidHggYW5kIHJ4IGNvbnRleHRzIGluc3RhbGxlZCBvbiBib3RoIHBvcnRzXCIgJD9cbitcbisjIEJvdGggZW5kcyBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHRoZSBkZXZpY2UgcGF0aCwgbm90IHRoZSBTVyBmYWxsYmFjay5cbitbIFwiJCh0bHNfc3RhdCBuc3N2IFRsc1R4RGV2aWNlKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc3N2IFRsc1J4RGV2aWNlKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc2NsIFRsc1R4RGV2aWNlKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc2NsIFRsc1J4RGV2aWNlKVwiIC1nZSAxIF1cbitjaGVjayBcImJvdGggZW5kcyB1c2VkIHRoZSBkZXZpY2UgcGF0aFwiICQ/XG4rXG4rWyBcIiQodGxzX3N0YXQgbnNzdiBUbHNUeFN3KVwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKHRsc19zdGF0IG5zY2wgVGxzVHhTdylcIiAtZXEgMCBdXG4rY2hlY2sgXCJubyBzaWxlbnQgZmFsbGJhY2sgdG8gdGhlIHNvZnR3YXJlIHBhdGhcIiAkP1xuK1xuK1sgXCIkKHRsc19zdGF0IG5zc3YgVGxzRGVjcnlwdEVycm9yKVwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJCh0bHNfc3RhdCBuc2NsIFRsc0RlY3J5cHRFcnJvcilcIiAtZXEgMCBdXG4rY2hlY2sgXCJubyBkZWNyeXB0IGVycm9yc1wiICQ/XG4rXG4rIyBUaGUgZHJpdmVyIG11c3QgaGF2ZSBzZWVuIHRoZSByZWNvcmRzIGdvIGJ5IGluIGJvdGggZGlyZWN0aW9ucy5cbitbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMV9UTFNcIiB0eF9wYWNrZXRzKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMV9UTFNcIiByeF9wYWNrZXRzKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMl9UTFNcIiB0eF9wYWNrZXRzKVwiIC1nZSAxIF0gXHUwMDI2XHUwMDI2IFxcXG4rXHRbIFwiJChkYmdfZmllbGQgXCIkTlNJTV9ERVZfMl9UTFNcIiByeF9wYWNrZXRzKVwiIC1nZSAxIF1cbitjaGVjayBcImRyaXZlciBjb3VudGVkIG9mZmxvYWRlZCBwYWNrZXRzIGJvdGggd2F5c1wiICQ/XG4rXG4rIyBTb2NrZXRzIGFyZSBjbG9zZWQgYnkgbm93LCBzbyBldmVyeSBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGdpdmVuIGJhY2suXG4rWyBcIiQoZGJnX2ZpZWxkIFwiJE5TSU1fREVWXzFfVExTXCIgY291bnQpXCIgLWVxIDAgXSBcdTAwMjZcdTAwMjYgXFxcbitcdFsgXCIkKGRiZ19maWVsZCBcIiROU0lNX0RFVl8yX1RMU1wiIGNvdW50KVwiIC1lcSAwIF1cbitjaGVjayBcImFsbCBvZmZsb2FkIGNvbnRleHRzIHJlbGVhc2VkIG9uIGNsb3NlXCIgJD9cbitcbitbIFwiJCh0bHNfc3RhdCBuc3N2IFRsc0N1cnJUeERldmljZSlcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBcXFxuK1x0WyBcIiQodGxzX3N0YXQgbnNzdiBUbHNDdXJyUnhEZXZpY2UpXCIgLWVxIDAgXVxuK2NoZWNrIFwibm8gZGV2aWNlIGNvbnRleHRzIGxlZnQgYmVoaW5kXCIgJD9cbitcbisjIFR1cm5pbmcgdGhlIGZlYXR1cmUgb2ZmIGhhcyB0byBtYWtlIHRoZSBvZmZsb2FkIHJlZnVzZSB0aGUgY29ubmVjdGlvbjtcbisjIHRoZSB0ZXN0IGJpbmFyeSBpbnNpc3RzIG9uIHRoZSBkZXZpY2UgcGF0aCwgc28gaXQgbXVzdCBub3cgZmFpbC5cbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8xX05BTUVcIiB0bHMtaHctdHgtb2ZmbG9hZCBvZmZcbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8xX05BTUVcIiB0bHMtaHctcngtb2ZmbG9hZCBvZmZcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8yX05BTUVcIiB0bHMtaHctdHgtb2ZmbG9hZCBvZmZcbitpcCBuZXRucyBleGVjIG5zY2wgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8yX05BTUVcIiB0bHMtaHctcngtb2ZmbG9hZCBvZmZcbitcbitydW5fcGFpciBub3NhbXBsZVxuK3JjPSQ/XG4rWyBcIiRyY1wiIC1uZSAwIF1cbitjaGVjayBcIm9mZmxvYWQgZGVjbGluZWQgb25jZSB0aGUgZmVhdHVyZSBpcyBvZmZcIiAkP1xuK1xuK1sgXCIkKHRsc19zdGF0IG5zc3YgVGxzVHhTdylcIiAtZ2UgMSBdXG4rY2hlY2sgXCJzb2Z0d2FyZSBwYXRoIHVzZWQgd2hlbiBvZmZsb2FkIGlzIG9mZlwiICQ/XG4rXG4raXAgbmV0bnMgZXhlYyBuc3N2IGV0aHRvb2wgLUsgXCIkTlNJTV9ERVZfMV9OQU1FXCIgdGxzLWh3LXR4LW9mZmxvYWQgb25cbitpcCBuZXRucyBleGVjIG5zc3YgZXRodG9vbCAtSyBcIiROU0lNX0RFVl8xX05BTUVcIiB0bHMtaHctcngtb2ZmbG9hZCBvblxuK2lwIG5ldG5zIGV4ZWMgbnNjbCBldGh0b29sIC1LIFwiJE5TSU1fREVWXzJfTkFNRVwiIHRscy1ody10eC1vZmZsb2FkIG9uXG4raXAgbmV0bnMgZXhlYyBuc2NsIGV0aHRvb2wgLUsgXCIkTlNJTV9ERVZfMl9OQU1FXCIgdGxzLWh3LXJ4LW9mZmxvYWQgb25cbitcbitydW5fcGFpclxuK2NoZWNrIFwib2ZmbG9hZCB3b3JrcyBhZ2FpbiBhZnRlciByZS1lbmFibGluZ1wiICQ/XG4rXG4rZWNob1xuK2VjaG8gXCJwYXNzZWQ6ICRudW1fcGFzcyBmYWlsZWQ6ICRudW1fZmFpbFwiXG4rWyBcIiRudW1fZmFpbFwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IGV4aXQgMFxuK2V4aXQgMVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGRldnNpbS90bHNfb2ZmbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rsc19vZmZsb2FkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lYmZiNGJmY2Q0ZjQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzX29mZmxvYWQuY1xuQEAgLTAsMCArMSw0OTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICoga1RMUyBkZXZpY2Ugb2ZmbG9hZCBkYXRhIHBhdGggZXhlcmNpc2UsIGRyaXZlbiBieSB0bHMuc2guXG4rICpcbisgKiBPbmUgaW5zdGFuY2UgcnVucyBhcyB0aGUgc2VydmVyIGFuZCBvbmUgYXMgdGhlIGNsaWVudCwgZWFjaCBpbiBpdHMgb3duXG4rICogbmV0d29yayBuYW1lc3BhY2UsIGNvbm5lY3RlZCBiYWNrIHRvIGJhY2sgYnkgYSBsaW5rZWQgbmV0ZGV2c2ltIHBhaXIuXG4rICogQm90aCBlbmRzIGVuYWJsZSBrVExTIGFuZCByZWx5IG9uIG5ldGRldnNpbSdzIGVtdWxhdGVkIFRMUyBvZmZsb2FkLCBzb1xuKyAqIGV2ZXJ5IHJlY29yZCB0cmF2ZWxzIHRocm91Z2ggbmV0L3Rscy90bHNfZGV2aWNlLmMgcmF0aGVyIHRoYW4gdGhlXG4rICogc29mdHdhcmUgcGF0aC5cbisgKlxuKyAqIFRoZSB0d28gcHJvY2Vzc2VzIHJlbmRlenZvdXMgdGhyb3VnaCBhIHNoYXJlZCBkaXJlY3Rvcnkgc28gdGhhdCBuZWl0aGVyXG4rICogc2lkZSBzZW5kcyBiZWZvcmUgdGhlIG90aGVyIGhhcyBpbnN0YWxsZWQgaXRzIFJYIG9mZmxvYWQuXG4rICovXG4rXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4rXG4rI2lmbmRlZiBTT0xfVExTXG4rI2RlZmluZSBTT0xfVExTXHRcdFx0MjgyXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBUQ1BfVUxQXG4rI2RlZmluZSBUQ1BfVUxQXHRcdFx0MzFcbisjZW5kaWZcbitcbisjZGVmaW5lIEJVTEtfTEVOXHRcdCgyMDAgKiAxMDI0KVxuKyNkZWZpbmUgTU9SRV9GUkFHU1x0XHQ2NFxuKyNkZWZpbmUgU1BMSUNFX0ZSQUdfTEVOXHRcdDQwOTZcbisjZGVmaW5lIFNQTElDRV9GUkFHU1x0XHQ4XG4rXG4rLyogVExTX01JTl9SRUNPUkRfU0laRV9MSU0gYW5kIFRMU19NQVhfUEFZTE9BRF9TSVpFLCB3aGljaCBhcmUgbm90IHVhcGkuICovXG4rI2RlZmluZSBSRUNfTElNX01JTlx0XHQ2NFxuKyNkZWZpbmUgUkVDX0xJTV9NQVhcdFx0MTYzODRcbitcbisjZGVmaW5lIFNNQUxMX1JFQ1NcdFx0MTAwXG4rI2RlZmluZSBTTUFMTF9MRU5cdFx0KFJFQ19MSU1fTUlOICogU01BTExfUkVDUylcbitcbisjZGVmaW5lIFNZTkNfVElNRU9VVF9NU1x0XHQyMDAwMFxuKyNkZWZpbmUgQ09OTkVDVF9USU1FT1VUX01TXHQyMDAwMFxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpyb2xlO1xuK1xuK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICp3aGF0KVxuK3tcbitcdGZwcmludGYoc3RkZXJyLCBcIiVzOiAlczogJXNcXG5cIiwgcm9sZSwgd2hhdCwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGV4aXQoMSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZhaWwoY29uc3QgY2hhciAqZm10LCAuLi4pXG4re1xuK1x0dmFfbGlzdCBhcDtcbitcbitcdGZwcmludGYoc3RkZXJyLCBcIiVzOiBcIiwgcm9sZSk7XG4rXHR2YV9zdGFydChhcCwgZm10KTtcbitcdHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7XG4rXHR2YV9lbmQoYXApO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuK1x0ZXhpdCgxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXNsZWVwKHVuc2lnbmVkIGludCBtcylcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XG4rXHRcdC50dl9zZWMgPSBtcyAvIDEwMDAsXG4rXHRcdC50dl9uc2VjID0gKG1zICUgMTAwMCkgKiAxMDAwMDAwTCxcbitcdH07XG4rXG4rXHRuYW5vc2xlZXAoXHUwMDI2dHMsIE5VTEwpO1xuK31cbitcbisvKiAvcHJvYy9uZXQvdGxzX3N0YXQgaXMgcGVyIG5ldG5zLCBzbyBib3RoIGVuZHMgY2FuIGNoZWNrIHRoYXQgdGhlaXIgb3duXG4rICogY29ubmVjdGlvbiByZWFsbHkgbGFuZGVkIG9uIHRoZSBkZXZpY2UgcGF0aC5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3Rsc19zdGF0KGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0Y2hhciBsaW5lWzI1Nl07XG4rXHR1bnNpZ25lZCBsb25nIHZhbDtcbitcdEZJTEUgKmY7XG4rXG4rXHRmID0gZm9wZW4oXCIvcHJvYy9uZXQvdGxzX3N0YXRcIiwgXCJyXCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRkaWUoXCJvcGVuIC9wcm9jL25ldC90bHNfc3RhdFwiKTtcbitcbitcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4rXHRcdGNoYXIga2V5WzY0XTtcbitcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIiU2M3MgJWx1XCIsIGtleSwgXHUwMDI2dmFsKSAhPSAyKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIXN0cmNtcChrZXksIG5hbWUpKSB7XG4rXHRcdFx0ZmNsb3NlKGYpO1xuK1x0XHRcdHJldHVybiB2YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdGZjbG9zZShmKTtcbitcdGZhaWwoXCIlcyBub3QgZm91bmQgaW4gL3Byb2MvbmV0L3Rsc19zdGF0XCIsIG5hbWUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZpbGxfcGF0dGVybihjaGFyICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBzZWVkKVxuK3tcbitcdHNpemVfdCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspXG4rXHRcdGJ1ZltpXSA9IChjaGFyKShzZWVkICsgaSAqIDMxICsgKGkgXHUwMDNlXHUwMDNlIDgpICogNyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNoZWNrX3BhdHRlcm4oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgc2VlZCxcbitcdFx0XHQgIGNvbnN0IGNoYXIgKndoYXQpXG4re1xuK1x0Y2hhciAqd2FudCA9IG1hbGxvYyhsZW4pO1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIXdhbnQpXG4rXHRcdGRpZShcIm1hbGxvY1wiKTtcbitcbitcdGZpbGxfcGF0dGVybih3YW50LCBsZW4sIHNlZWQpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspIHtcbitcdFx0aWYgKGJ1ZltpXSAhPSB3YW50W2ldKVxuK1x0XHRcdGZhaWwoXCIlczogcGF5bG9hZCBtaXNtYXRjaCBhdCBieXRlICV6dTogZ290IDB4JTAyeCB3YW50IDB4JTAyeFwiLFxuK1x0XHRcdCAgICAgd2hhdCwgaSwgKHVuc2lnbmVkIGNoYXIpYnVmW2ldLFxuK1x0XHRcdCAgICAgKHVuc2lnbmVkIGNoYXIpd2FudFtpXSk7XG4rXHR9XG4rXG4rXHRmcmVlKHdhbnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0c2l6ZV90IGRvbmUgPSAwO1xuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuK1x0XHRzc2l6ZV90IG4gPSBzZW5kKGZkLCBidWYgKyBkb25lLCBsZW4gLSBkb25lLCAwKTtcbitcbitcdFx0aWYgKG4gXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRkaWUoXCJzZW5kXCIpO1xuK1x0XHR9XG4rXHRcdGRvbmUgKz0gbjtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmVhZF9hbGwoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0c2l6ZV90IGRvbmUgPSAwO1xuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuK1x0XHRzc2l6ZV90IG4gPSByZWN2KGZkLCBidWYgKyBkb25lLCBsZW4gLSBkb25lLCAwKTtcbitcbitcdFx0aWYgKG4gXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRkaWUoXCJyZWN2XCIpO1xuK1x0XHR9XG4rXHRcdGlmIChuID09IDApXG4rXHRcdFx0ZmFpbChcInBlZXIgY2xvc2VkIGFmdGVyICV6dSBvZiAlenUgYnl0ZXNcIiwgZG9uZSwgbGVuKTtcbitcdFx0ZG9uZSArPSBuO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbmFibGVfa3RscyhpbnQgZmQpXG4re1xuK1x0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IGNpID0ge307XG4rXHR1bnNpZ25lZCBsb25nIHR4X2JlZm9yZSwgcnhfYmVmb3JlO1xuK1xuK1x0dHhfYmVmb3JlID0gcmVhZF90bHNfc3RhdChcIlRsc1R4RGV2aWNlXCIpO1xuK1x0cnhfYmVmb3JlID0gcmVhZF90bHNfc3RhdChcIlRsc1J4RGV2aWNlXCIpO1xuK1xuK1x0aWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcInRsc1wiLCBzaXplb2YoXCJ0bHNcIikpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRDUF9VTFAsIHRscylcIik7XG4rXG4rXHRjaS5pbmZvLnZlcnNpb24gPSBUTFNfMV8yX1ZFUlNJT047XG4rXHRjaS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyODtcbitcdG1lbXNldChjaS5pdiwgJ2knLCBzaXplb2YoY2kuaXYpKTtcbitcdG1lbXNldChjaS5rZXksICdrJywgc2l6ZW9mKGNpLmtleSkpO1xuK1x0bWVtc2V0KGNpLnNhbHQsICdzJywgc2l6ZW9mKGNpLnNhbHQpKTtcbitcdG1lbXNldChjaS5yZWNfc2VxLCAwLCBzaXplb2YoY2kucmVjX3NlcSkpO1xuK1xuK1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2Y2ksIHNpemVvZihjaSkpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRMU19UWClcIik7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1JYLCBcdTAwMjZjaSwgc2l6ZW9mKGNpKSkpXG4rXHRcdGRpZShcInNldHNvY2tvcHQoVExTX1JYKVwiKTtcbitcbitcdC8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZXhlcmNpc2U6IHJlZnVzZSB0byBzaWxlbnRseSBmYWxsIGJhY2sgdG9cbitcdCAqIHRoZSBzb2Z0d2FyZSBwYXRoLCBvdGhlcndpc2UgdGhlIHRlc3Qgd291bGQgcGFzcyB3aXRob3V0IGV2ZXJcbitcdCAqIHRvdWNoaW5nIHRsc19kZXZpY2UuYy5cbitcdCAqL1xuK1x0aWYgKHJlYWRfdGxzX3N0YXQoXCJUbHNUeERldmljZVwiKSAhPSB0eF9iZWZvcmUgKyAxKVxuK1x0XHRmYWlsKFwiVFggZGlkIG5vdCBsYW5kIG9uIHRoZSBkZXZpY2UgcGF0aCAoVGxzVHhEZXZpY2UgJWx1IC1cdTAwM2UgJWx1KVwiLFxuK1x0XHQgICAgIHR4X2JlZm9yZSwgcmVhZF90bHNfc3RhdChcIlRsc1R4RGV2aWNlXCIpKTtcbitcdGlmIChyZWFkX3Rsc19zdGF0KFwiVGxzUnhEZXZpY2VcIikgIT0gcnhfYmVmb3JlICsgMSlcbitcdFx0ZmFpbChcIlJYIGRpZCBub3QgbGFuZCBvbiB0aGUgZGV2aWNlIHBhdGggKFRsc1J4RGV2aWNlICVsdSAtXHUwMDNlICVsdSlcIixcbitcdFx0ICAgICByeF9iZWZvcmUsIHJlYWRfdGxzX3N0YXQoXCJUbHNSeERldmljZVwiKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHN5bmNfcGF0aChjaGFyICpvdXQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqd2hvKVxuK3tcbitcdGlmICgoc2l6ZV90KXNucHJpbnRmKG91dCwgbGVuLCBcIiVzLyVzLnJlYWR5XCIsIGRpciwgd2hvKSBcdTAwM2U9IGxlbilcbitcdFx0ZmFpbChcInN5bmMgZGlyIHBhdGggdG9vIGxvbmdcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlbmRlenZvdXMoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqcGVlcilcbit7XG4rXHRjaGFyIG1pbmVbUEFUSF9NQVhdLCB0aGVpcnNbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZCA9IDA7XG4rXHRpbnQgZmQ7XG4rXG4rXHRzeW5jX3BhdGgobWluZSwgc2l6ZW9mKG1pbmUpLCBkaXIsIG1lKTtcbitcdHN5bmNfcGF0aCh0aGVpcnMsIHNpemVvZih0aGVpcnMpLCBkaXIsIHBlZXIpO1xuK1xuK1x0ZmQgPSBvcGVuKG1pbmUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDYwMCk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdGRpZShcImNyZWF0ZSBzeW5jIGZpbGVcIik7XG4rXHRjbG9zZShmZCk7XG4rXG4rXHR3aGlsZSAoYWNjZXNzKHRoZWlycywgRl9PSykpIHtcbitcdFx0aWYgKHdhaXRlZCBcdTAwM2U9IFNZTkNfVElNRU9VVF9NUylcbitcdFx0XHRmYWlsKFwidGltZWQgb3V0IHdhaXRpbmcgZm9yICVzXCIsIHBlZXIpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0XHR3YWl0ZWQgKz0gMjA7XG4rXHR9XG4rfVxuK1xuKy8qIEJvdGggZW5kcyBzdG9wIGhlcmUgd2l0aCB0aGVpciBvZmZsb2FkIGluc3RhbGxlZCBhbmQgbm8gZGF0YSBzZW50IHlldCxcbisgKiBzbyB0aGF0IHRoZSBkcml2ZXIgc3RhdGUgY2FuIGJlIGluc3BlY3RlZCBmcm9tIHRoZSBvdXRzaWRlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2dvKGNvbnN0IGNoYXIgKmRpcilcbit7XG4rXHR1bnNpZ25lZCBpbnQgd2FpdGVkID0gMDtcbitcdGNoYXIgZ29bUEFUSF9NQVhdO1xuK1xuK1x0aWYgKChzaXplX3Qpc25wcmludGYoZ28sIHNpemVvZihnbyksIFwiJXMvZ29cIiwgZGlyKSBcdTAwM2U9IHNpemVvZihnbykpXG4rXHRcdGZhaWwoXCJzeW5jIGRpciBwYXRoIHRvbyBsb25nXCIpO1xuK1xuK1x0d2hpbGUgKGFjY2VzcyhnbywgRl9PSykpIHtcbitcdFx0aWYgKHdhaXRlZCBcdTAwM2U9IFNZTkNfVElNRU9VVF9NUylcbitcdFx0XHRmYWlsKFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIGdvXCIpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0XHR3YWl0ZWQgKz0gMjA7XG4rXHR9XG4rfVxuK1xuKy8qIFNtYWxsIHdyaXRlcyB3aXRoIE1TR19NT1JFIGFjY3VtdWxhdGUgaW50byBvbmUgb3BlbiByZWNvcmQgYmVmb3JlIGl0IGlzXG4rICogcHVzaGVkLCB3aGljaCBpcyB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0bHNfcHVzaF9kYXRhKCkuXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9tc2dfbW9yZShpbnQgZmQsIHVuc2lnbmVkIGludCBzZWVkKVxuK3tcbitcdGNoYXIgYnVmW01PUkVfRlJBR1MgKyAxXTtcbitcdGludCBpO1xuK1xuK1x0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTU9SRV9GUkFHUzsgaSsrKSB7XG4rXHRcdGlmIChzZW5kKGZkLCBidWYgKyBpLCAxLCBNU0dfTU9SRSkgIT0gMSlcbitcdFx0XHRkaWUoXCJzZW5kKE1TR19NT1JFKVwiKTtcbitcdH1cbitcdGlmIChzZW5kKGZkLCBidWYgKyBNT1JFX0ZSQUdTLCAxLCAwKSAhPSAxKVxuK1x0XHRkaWUoXCJzZW5kKGxhc3QpXCIpO1xuK31cbitcbisvKiBzcGxpY2UoKSByZWFjaGVzIHRsc19wdXNoX2RhdGEoKSB3aXRoIE1TR19TUExJQ0VfUEFHRVMgb25jZVxuKyAqIFRMU19UWF9aRVJPQ09QWV9STyBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGRpc3RpbmN0IGZyYWdtZW50IHBhdGguXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9zcGxpY2UoaW50IGZkLCB1bnNpZ25lZCBpbnQgc2VlZClcbit7XG4rXHRjaGFyIGJ1ZltTUExJQ0VfRlJBR19MRU5dO1xuK1x0aW50IHZhbCA9IDE7XG4rXHRpbnQgaTtcbitcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRMU19UWF9aRVJPQ09QWV9STylcIik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTUExJQ0VfRlJBR1M7IGkrKykge1xuK1x0XHRpbnQgcFsyXTtcbitcbitcdFx0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQgKyBpICogU1BMSUNFX0ZSQUdfTEVOKTtcbitcbitcdFx0aWYgKHBpcGUocCkpXG4rXHRcdFx0ZGllKFwicGlwZVwiKTtcbitcdFx0aWYgKHdyaXRlKHBbMV0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IHNpemVvZihidWYpKVxuK1x0XHRcdGRpZShcIndyaXRlIHRvIHBpcGVcIik7XG4rXHRcdGlmIChzcGxpY2UocFswXSwgTlVMTCwgZmQsIE5VTEwsIHNpemVvZihidWYpLFxuK1x0XHRcdCAgIGkgPT0gU1BMSUNFX0ZSQUdTIC0gMSA/IDAgOiBTUExJQ0VfRl9NT1JFKSAhPVxuK1x0XHQgICAgc2l6ZW9mKGJ1ZikpXG4rXHRcdFx0ZGllKFwic3BsaWNlXCIpO1xuK1x0XHRjbG9zZShwWzBdKTtcbitcdFx0Y2xvc2UocFsxXSk7XG4rXHR9XG4rXG4rXHR2YWwgPSAwO1xuK1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4rXHRcdGRpZShcInNldHNvY2tvcHQoVExTX1RYX1pFUk9DT1BZX1JPIG9mZilcIik7XG4rfVxuK1xuKy8qIEEgcmVjb3JkIGNhbiBiZSB1cCB0byAxNkssIHNvIG5vcm1hbGx5IG9uZSBzZWdtZW50IGNhcnJpZXMgYSBwaWVjZSBvZiBhXG4rICogc2luZ2xlIHJlY29yZC4gIFNocmlua2luZyB0aGUgbGltaXQgcHV0cyBhIGRvemVuIG9yIHNvIHdob2xlIHJlY29yZHMgaW5cbisgKiBldmVyeSBzZWdtZW50IGluc3RlYWQsIHdoaWNoIGlzIHRoZSBtdWx0aS1yZWNvcmQgcGF0aCB0aHJvdWdoIHRoZSBkcml2ZXIuXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9zbWFsbF9yZWNvcmRzKGludCBmZCwgdW5zaWduZWQgaW50IHNlZWQpXG4re1xuK1x0Y2hhciBidWZbU01BTExfTEVOXTtcbitcdHVpbnQxNl90IGxpbWl0O1xuK1xuK1x0bGltaXQgPSBSRUNfTElNX01JTjtcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfVExTLCBUTFNfVFhfTUFYX1BBWUxPQURfTEVOLCBcdTAwMjZsaW1pdCxcbitcdFx0ICAgICAgIHNpemVvZihsaW1pdCkpKVxuK1x0XHRkaWUoXCJzZXRzb2Nrb3B0KFRMU19UWF9NQVhfUEFZTE9BRF9MRU4pXCIpO1xuK1xuK1x0ZmlsbF9wYXR0ZXJuKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlZWQpO1xuK1x0d3JpdGVfYWxsKGZkLCBidWYsIHNpemVvZihidWYpKTtcbitcbitcdGxpbWl0ID0gUkVDX0xJTV9NQVg7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1RMUywgVExTX1RYX01BWF9QQVlMT0FEX0xFTiwgXHUwMDI2bGltaXQsXG4rXHRcdCAgICAgICBzaXplb2YobGltaXQpKSlcbitcdFx0ZGllKFwic2V0c29ja29wdChUTFNfVFhfTUFYX1BBWUxPQURfTEVOIHJlc3RvcmUpXCIpO1xuK31cbitcbisjZGVmaW5lIFNFRURfQzJTX0JVTEtcdDB4MTFcbisjZGVmaW5lIFNFRURfUzJDX0JVTEtcdDB4MjJcbisjZGVmaW5lIFNFRURfQzJTX01PUkVcdDB4MzNcbisjZGVmaW5lIFNFRURfQzJTX1NQTElDRVx0MHg0NFxuKyNkZWZpbmUgU0VFRF9DMlNfU01BTExcdDB4NTVcbitcbitzdGF0aWMgdm9pZCBydW5fY2xpZW50KGludCBmZClcbit7XG4rXHRjaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pO1xuK1xuK1x0aWYgKCFidWYpXG4rXHRcdGRpZShcIm1hbGxvY1wiKTtcbitcbitcdGZpbGxfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX0MyU19CVUxLKTtcbitcdHdyaXRlX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XG4rXG4rXHRyZWFkX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XG4rXHRjaGVja19wYXR0ZXJuKGJ1ZiwgQlVMS19MRU4sIFNFRURfUzJDX0JVTEssIFwic2VydmVyIC1cdTAwM2UgY2xpZW50IGJ1bGtcIik7XG4rXG4rXHRzZW5kX21zZ19tb3JlKGZkLCBTRUVEX0MyU19NT1JFKTtcbitcdHNlbmRfc3BsaWNlKGZkLCBTRUVEX0MyU19TUExJQ0UpO1xuK1x0c2VuZF9zbWFsbF9yZWNvcmRzKGZkLCBTRUVEX0MyU19TTUFMTCk7XG4rXG4rXHQvKiBXYWl0IGZvciB0aGUgc2VydmVyJ3MgdmVyZGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZyBkb3duLiAqL1xuK1x0cmVhZF9hbGwoZmQsIGJ1ZiwgMSk7XG4rXHRpZiAoYnVmWzBdICE9ICdrJylcbitcdFx0ZmFpbChcInNlcnZlciByZXBvcnRlZCBhIGZhaWx1cmVcIik7XG4rXG4rXHRmcmVlKGJ1Zik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkKVxuK3tcbitcdHNpemVfdCBzcGxpY2VfbGVuID0gKHNpemVfdClTUExJQ0VfRlJBR19MRU4gKiBTUExJQ0VfRlJBR1M7XG4rXHRjaGFyICpidWYgPSBtYWxsb2MoQlVMS19MRU4pO1xuK1x0Y2hhciBtb3JlW01PUkVfRlJBR1MgKyAxXTtcbitcdGNoYXIgKnNidWY7XG4rXHRjaGFyIG9rID0gJ2snO1xuK1x0aW50IGk7XG4rXG4rXHRzYnVmID0gbWFsbG9jKHNwbGljZV9sZW4pO1xuK1x0aWYgKCFidWYgfHwgIXNidWYpXG4rXHRcdGRpZShcIm1hbGxvY1wiKTtcbitcbitcdHJlYWRfYWxsKGZkLCBidWYsIEJVTEtfTEVOKTtcbitcdGNoZWNrX3BhdHRlcm4oYnVmLCBCVUxLX0xFTiwgU0VFRF9DMlNfQlVMSywgXCJjbGllbnQgLVx1MDAzZSBzZXJ2ZXIgYnVsa1wiKTtcbitcbitcdGZpbGxfcGF0dGVybihidWYsIEJVTEtfTEVOLCBTRUVEX1MyQ19CVUxLKTtcbitcdHdyaXRlX2FsbChmZCwgYnVmLCBCVUxLX0xFTik7XG4rXG4rXHRyZWFkX2FsbChmZCwgbW9yZSwgc2l6ZW9mKG1vcmUpKTtcbitcdGNoZWNrX3BhdHRlcm4obW9yZSwgc2l6ZW9mKG1vcmUpLCBTRUVEX0MyU19NT1JFLCBcImNsaWVudCAtXHUwMDNlIHNlcnZlciBNU0dfTU9SRVwiKTtcbitcbitcdHJlYWRfYWxsKGZkLCBzYnVmLCBzcGxpY2VfbGVuKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNQTElDRV9GUkFHUzsgaSsrKVxuK1x0XHRjaGVja19wYXR0ZXJuKHNidWYgKyAoc2l6ZV90KWkgKiBTUExJQ0VfRlJBR19MRU4sXG4rXHRcdFx0ICAgICAgU1BMSUNFX0ZSQUdfTEVOLCBTRUVEX0MyU19TUExJQ0UgK1xuK1x0XHRcdCAgICAgIGkgKiBTUExJQ0VfRlJBR19MRU4sIFwiY2xpZW50IC1cdTAwM2Ugc2VydmVyIHNwbGljZVwiKTtcbitcbitcdHJlYWRfYWxsKGZkLCBidWYsIFNNQUxMX0xFTik7XG4rXHRjaGVja19wYXR0ZXJuKGJ1ZiwgU01BTExfTEVOLCBTRUVEX0MyU19TTUFMTCxcbitcdFx0ICAgICAgXCJjbGllbnQgLVx1MDAzZSBzZXJ2ZXIgc21hbGwgcmVjb3Jkc1wiKTtcbitcbitcdHdyaXRlX2FsbChmZCwgXHUwMDI2b2ssIDEpO1xuK1xuK1x0ZnJlZShzYnVmKTtcbitcdGZyZWUoYnVmKTtcbit9XG4rXG4rc3RhdGljIGludCBkb19zZXJ2ZXIoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xuK1x0aW50IGxmZCwgZmQsIG9uZSA9IDE7XG4rXG4rXHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGxmZCBcdTAwM2MgMClcbitcdFx0ZGllKFwic29ja2V0XCIpO1xuK1x0aWYgKHNldHNvY2tvcHQobGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuK1x0XHRkaWUoXCJTT19SRVVTRUFERFJcIik7XG4rXG4rXHRzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbitcdHNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7XG4rXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcbitcdFx0ZmFpbChcImJhZCBiaW5kIGFkZHJlc3MgJXNcIiwgaXApO1xuK1xuK1x0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2EsIHNpemVvZihzYSkpKVxuK1x0XHRkaWUoXCJiaW5kXCIpO1xuK1x0aWYgKGxpc3RlbihsZmQsIDEpKVxuK1x0XHRkaWUoXCJsaXN0ZW5cIik7XG4rXG4rXHRmZCA9IGFjY2VwdChsZmQsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRkaWUoXCJhY2NlcHRcIik7XG4rXHRjbG9zZShsZmQpO1xuK1xuK1x0ZW5hYmxlX2t0bHMoZmQpO1xuK1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcInNlcnZlclwiLCBcImNsaWVudFwiKTtcbitcdHdhaXRfZm9yX2dvKHN5bmNkaXIpO1xuK1xuK1x0cnVuX3NlcnZlcihmZCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBkb19jbGllbnQoY29uc3QgY2hhciAqaXAsIGludCBwb3J0LCBjb25zdCBjaGFyICpzeW5jZGlyKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHt9O1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZCA9IDA7XG4rXHRpbnQgZmQ7XG4rXG4rXHRzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbitcdHNhLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7XG4rXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwLCBcdTAwMjZzYS5zaW5fYWRkcikgIT0gMSlcbitcdFx0ZmFpbChcImJhZCBzZXJ2ZXIgYWRkcmVzcyAlc1wiLCBpcCk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcbitcdFx0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRcdGRpZShcInNvY2tldFwiKTtcbitcdFx0aWYgKCFjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2EsIHNpemVvZihzYSkpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdGlmICh3YWl0ZWQgXHUwMDNlPSBDT05ORUNUX1RJTUVPVVRfTVMpXG4rXHRcdFx0ZGllKFwiY29ubmVjdFwiKTtcbitcdFx0bXNsZWVwKDIwKTtcbitcdFx0d2FpdGVkICs9IDIwO1xuK1x0fVxuK1xuK1x0ZW5hYmxlX2t0bHMoZmQpO1xuK1x0cmVuZGV6dm91cyhzeW5jZGlyLCBcImNsaWVudFwiLCBcInNlcnZlclwiKTtcbitcdHdhaXRfZm9yX2dvKHN5bmNkaXIpO1xuK1xuK1x0cnVuX2NsaWVudChmZCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdGludCBwb3J0O1xuK1xuK1x0aWYgKGFyZ2MgIT0gNSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcInVzYWdlOiAlcyBzZXJ2ZXJ8Y2xpZW50IFx1MDAzY2lwXHUwMDNlIFx1MDAzY3BvcnRcdTAwM2UgXHUwMDNjc3luY2Rpclx1MDAzZVxcblwiLFxuK1x0XHRcdGFyZ3ZbMF0pO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcbitcdHJvbGUgPSBhcmd2WzFdO1xuK1x0cG9ydCA9IGF0b2koYXJndlszXSk7XG4rXG4rXHRpZiAoIXN0cmNtcChyb2xlLCBcInNlcnZlclwiKSlcbitcdFx0cmV0dXJuIGRvX3NlcnZlcihhcmd2WzJdLCBwb3J0LCBhcmd2WzRdKTtcbitcdGlmICghc3RyY21wKHJvbGUsIFwiY2xpZW50XCIpKVxuK1x0XHRyZXR1cm4gZG9fY2xpZW50KGFyZ3ZbMl0sIHBvcnQsIGFyZ3ZbNF0pO1xuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwidW5rbm93biByb2xlICVzXFxuXCIsIHJvbGUpO1xuK1x0cmV0dXJuIDI7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MTkuNzU2NzU0NTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MjU3NjAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtUTFMgT2ZmbG9hZCBQYXRjaCBmb3IgbmV0ZGV2c2ltKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBhZGRpbmcgZW11bGF0ZWQga1RMUyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgdG8gYG5ldGRldnNpbWAuIEknbSBpbW1lZGlhdGVseSB6ZXJvaW5nIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgYSB3b3JraG9yc2UgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcgaW4gdGhlIG5ldHdvcmtpbmcgd29ybGQuIEdldHRpbmcgdGhpcyByaWdodCBpcyBjcnVjaWFsIGZvciB0aGUgc3RhYmlsaXR5IG9mIHRoZSBrZXJuZWwgYW5kIHRoZSByZWxpYWJpbGl0eSBvZiBvdXIgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS5cblxuSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBoYW5kZnVsIG9mIGZpbGVzOiBgS2NvbmZpZ2AsIHRoZSBgTWFrZWZpbGVgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgLCBgdGxzLmNgLCBhbmQgYSBuZXcgc2VsZnRlc3QuIFRoYXQncyBhIHJlYXNvbmFibGUgc2NvcGUgZm9yIHRoaXMga2luZCBvZiBmZWF0dXJlIGFkZGl0aW9uLiBHaXZlbiB0aGF0IGBuZXRkZXZzaW1gIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgdGhlIGFjY2Vzc2liaWxpdHkgaXMgY2xlYXJseSB0aGVyZS5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlLi4uIHdlJ2xsIG5lZWQgYENPTkZJR19ORVRERVZTSU1gLCBgQ09ORklHX1RMU2AsIGFuZCBgQ09ORklHX1RMU19ERVZJQ0VgLiBJJ2xsIGltbWVkaWF0ZWx5IHN0YXJ0IGNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZW5mb3JjZWQgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFyZSBhdm9pZGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L0tjb25maWdgIGFuZCBgbmV0L3Rscy9LY29uZmlnYC5cblxuT2theSwgbG9va2luZyBhdCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBgTkVUREVWU0lNYCBkZXBlbmRzIG9uIGBJTkVUYCwgYFBTQU1QTEUgfHwgUFNBTVBMRT1uYCwgYFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uYCwgYW5kIGltcG9ydGFudGx5LCBgVExTIHx8IFRMUz1uYC4gVGhpcyBzZWVtcyBsb2dpY2FsLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHdpdGhpbiB0aGUgZGVwZW5kZW5jaWVzLiBOb3cgbGV0J3MgY2hlY2sgYG5ldC90bHMvS2NvbmZpZ2AgZm9yIHRoZSBgVExTX0RFVklDRWAgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBkcmlsbCBkb3duIHRvIGVuc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc2NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjI3LjAyOTMzMzc2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3OTI1NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjI4Ljg1NzI2NTE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjUzMzYxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gVExTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFRMUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIGV4cG9zZWQuIEkgcmVtZW1iZXIgdGhhdCBgbmV0L3Rscy9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLCBzbyBsZXQncyBuYXZpZ2F0ZSB0byB0aGF0IGZpbGUuIEknbSBmb2N1c2luZyBhcm91bmQgbGluZSAxOTsgdGhhdCdzIGdlbmVyYWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTkgd2lsbCBiZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQncyBkZWZpbmVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hhdCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgbG9va3MgbGlrZSBmb3IgVExTIGZlYXR1cmUgY29uZmlndXJhdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgZmVlbCBmb3IgaG93IEkgY2FuIGluZmx1ZW5jZSBvciBpbnRlZ3JhdGUgdGhpcyBpbnRvIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MzQuODIyNjAzNDY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6MzQuODIyNjY3NzA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAwMjQwNDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9ucywgZXhwcmVzc2VkIGFzIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEZXBlbmRlbmN5IERlZHVjdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEl0IGxvb2tzIGxpa2UgYFRMU19ERVZJQ0VgIGlzIGluaGVyZW50bHkgbGlua2VkIHRvIGBUTFNgLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBgVExTYCBpdHNlbGYgaXMgYnVpbGRpbmcgb24gdG9wIG9mIHRoZSBgSU5FVGAgc3RhY2ssIGFzIEknZCBleHBlY3QuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgYE5FVERFVlNJTWAsIHdoaWNoIGFwcGFyZW50bHkgZGVwZW5kcyBvbiBgVExTYCAqb3IqIGV4cGxpY2l0bHkgZGlzYWJsaW5nIGBUTFNgIChgVExTPW5gKS4gQnV0IHNpbmNlIHRoZSBnb2FsIGlzIHRvICplbmFibGUqIGBORVRERVZTSU1gLCB0aGUgcmVxdWlyZW1lbnQgYmVjb21lcyBjbGVhcjogd2UgZGVmaW5pdGVseSBuZWVkIGBUTFNgLlxuXG5UaGVyZWZvcmUsIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIGJvaWxzIGRvd24gdG8gZW5zdXJpbmcgdGhhdCBgTkVUREVWU0lNYCwgYFRMU2AsIGFuZCBgVExTX0RFVklDRWAgYXJlIGFsbCBlbmFibGVkIGFuZCBwcm9wZXJseSBzZXQgdXAgdG8gd29yayB0b2dldGhlci4gRXNzZW50aWFsbHksIGdldHRpbmcgdGhlIHdob2xlIHN0YWNrIGluIG9yZGVyLlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFkZGVkIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYW5kIHRoZSByZWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCB0ZWxsIHRoZSBmdWxsIHN0b3J5LiBJIHdhbnQgdG8gc2VlICpob3cqIHRoZXNlIG1vZHVsZXMgaGF2ZSBpbnRlZ3JhdGVkIGFuZCBob3cgdGhleSdyZSBoYW5kbGluZyB0aGlzIHNwZWNpZmljIGFzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMjgsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjQzLjgyNTA3NjAxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ3OTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfMC05XSsgKStuc2ltX3Rsc19bYS16XzAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz00NT1zdHJ1Y3QgbnNpbV90bHNfdHVwbGUge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTUxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzo1MjpzdGF0aWMgYm9vbCBuc2ltX3Rsc19wYXJzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy01My1cXHRcXHRcXHQgICBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtOTAtICovXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjkxOnN0YXRpYyBib29sIG5zaW1fdGxzX3J4X29mZmxvYWRlZChzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtOTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbnNpbV90bHNfdHVwbGUgKnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTE1LSAqL1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxMTY6c3RhdGljIHZvaWQgbnNpbV90bHNfdHhfemVyb190YWdzKHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTExNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTU3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxNTg6c3RhdGljIHZvaWQgbnNpbV90bHNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTE1OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMTcyLSAqL1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoxNzM6c3RhdGljIHZvaWQgbnNpbV90bHNfcngoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTE3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM9MTk2PXZvaWQgbnNpbV9kb190bHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjA5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzoyMTA6c3RhdGljIGludCBuc2ltX3Rsc19kZXZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBzb2NrICpzayxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjExLVxcdFxcdFxcdCAgICBlbnVtIHRsc19vZmZsb2FkX2N0eF9kaXIgZGlyZWN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTI2Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MjY3OnN0YXRpYyB2b2lkIG5zaW1fdGxzX2Rldl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMjY4LVxcdFxcdFxcdCAgICAgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTI5OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6MzAwOnN0YXRpYyBpbnQgbnNpbV90bHNfZGV2X3Jlc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTMwMS1cXHRcXHRcXHQgICAgICAgdTMyIHNlcSwgdTggKnJjZF9zbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0zMTE9c3RhdGljIGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzIG5zaW1fdGxzZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0zMTYtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jOjMxNzpzdGF0aWMgc3NpemVfdCBuc2ltX3Rsc19kYmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzE4LVxcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV90bHNfZGJnX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmMtMzgxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYzozODI6dm9pZCBuc2ltX3Rsc19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuYy0zODMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTM5NS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmM6Mzk2OnZvaWQgbnNpbV90bHNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3Rscy5jLTM5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjQzLjg3NjU2MzkxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0Nzg0NDUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUHJpb3JpdGl6aW5nIFRMUyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBUTFMgZnVuY3Rpb25zIGhlcmUuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGxlYW5pbmcgbWUgdG93YXJkcyBmb2N1c2luZyBvbiBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfZGV2X2FkZGAsIGBuc2ltX3Rsc19kZXZfZGVsYCwgYG5zaW1fdGxzX2Rldl9yZXN5bmNgLCBgbnNpbV90bHNfZGJnX3JlYWRgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBhIGZldyBvZiB0aG9zZSDigJMgYG5zaW1fdGxzX2Rldl9hZGRgLCBgbnNpbV90bHNfZGV2X2RlbGAsIGBuc2ltX3Rsc19kZXZfcmVzeW5jYCwgYW5kIGBuc2ltX3Rsc19kYmdfcmVhZGAg4oCTIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoZSBndWlkYW5jZSBzdWdnZXN0cyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBhdm9pZCBpbmxpbmVkIGhlbHBlcnMgd2l0aG91dCBkaXN0aW5jdCBzeW1ib2xzLiBIb3dldmVyLCBJIHNlZSB0aGF0IGBuc2ltX3Rsc19kZXZfYWRkYCBpcyBhc3NpZ25lZCB0byBgbnNpbV90bHNkZXZfb3BzYCwgYSBzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMuIFRoYXQncyBnb29kLCBtZWFuaW5nIGl0ICp3b24ndCogYmUgaW5saW5lZCBhbmQgaXMgcG90ZW50aWFsbHkgYSBzb2xpZCBjaG9pY2UuIEJ1dCBgbnNpbV9kb190bHNgIGlzIG5vbi1zdGF0aWMuXG5cbkxldCdzIHNpbXBsaWZ5IHRoaW5ncyBmb3Igbm93IGFuZCB1c2UgYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC5cblxuV2FpdCwgdGhpbmtpbmcgbW9yZSBhYm91dCBpdCwgYG5zaW1fdGxzX2Rldl9hZGRgIGlzIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBhZGRpbmcgYSBuZXcgVExTIGNvbnRleHQuIEV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgc28gaXQgd29uJ3QgYmUgaW5saW5lZC4gSXQncyBhIHZhbGlkLCBwZXJoYXBzIHRoZSBiZXN0IHRhcmdldC4gQWx0aG91Z2gsIGl0IGlzIGEgdmFsaWQgdGFyZ2V0IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB3ZSBjb3VsZCBhbHNvIGNob29zZSBgbnNpbV9kb190bHNgLlxuXG5BY3R1YWxseSwgbm93IEkgcmVtZW1iZXIsIGBuc2ltX2RvX3Rsc2AgaXMgY2FsbGVkIGZyb20gYG5zaW1fc3RhcnRfeG1pdGAuXG5cblRpbWUgdG8gZG91YmxlLWNoZWNrIGBuc2ltX2RvX3Rsc2AgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS90bHMuY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIHRoZSByaWdodCBmaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjA2OjUzLjM1NTAxMzQyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcbiAxOTE6XFx0LyogbmV0ZGV2c2ltIGhhcyBubyB3aXJlOiBuc2ltX3N0YXJ0X3htaXQoKSBoYW5kcyB0aGUgc2tiIHN0cmFpZ2h0IHRvIHRoZVxcbiAxOTI6XFx0ICogcGVlcidzIHJlY2VpdmUgcGF0aCwgc28gdGhpcyBvbmUgY2FsbCBzaXRlIHN0YW5kcyBpbiBmb3IgdGhlIGhhcmR3YXJlIG9mXFxuIDE5MzpcXHQgKiBib3RoIHBvcnRzLiAgSXQgaGFzIHRvIHJ1biBiZWZvcmUgbnNpbV9mb3J3YXJkX3NrYigpIG1vdmVzIHRoZSBza2Igb3ZlcixcXG4gMTk0OlxcdCAqIHdoaWNoIHJlc2V0cyB0aGUgaGVhZGVycy5cXG4gMTk1OlxcdCAqL1xcbiAxOTY6XFx0dm9pZCBuc2ltX2RvX3RscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG4gMTk3OlxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zKVxcbiAxOTg6XFx0e1xcbiAxOTk6XFx0XFx0LyogbnNpbV9kb19wc3AoKSByYW4gZmlyc3QgYW5kIG1heSBoYXZlIHdyYXBwZWQgdGhlIHJlY29yZCBzdHJlYW0sIHNvXFxuIDIwMDpcXHRcXHQgKiB0aGlzIGlzIG5vIGxvbmdlciBhIHBsYWluIFRMUyBvdmVyIFRDUCBwYWNrZXQuICBObyBOSUMgY2hhaW5zIHRoZVxcbiAyMDE6XFx0XFx0ICogdHdvIGlubGluZSBvZmZsb2FkcyBlaXRoZXIsIHNvIGxlYXZlIGl0IGFsb25lLlxcbiAyMDI6XFx0XFx0ICovXFxuIDIwMzpcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbiAyMDQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRuc2ltX3Rsc190eChucywgc2tiKTtcXG4gMjA3OlxcdFxcdG5zaW1fdGxzX3J4KHBlZXJfbnMsIHNrYik7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6NTMuMzU1MTAxNzkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTkzNDQ2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gVExTIEluaXRpYWxpemF0aW9uIGFuZCBUZWFyZG93bioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlc2UgdHdvIHNwZWNpZmljIGZ1bmN0aW9uczogYG5zaW1fdGxzX2luaXRgIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiBUaGVzZSBuYW1lcyBpbW1lZGlhdGVseSBzdWdnZXN0IHRoZXkgYXJlIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gb2YgVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYG5zaW1gIGZyYW1ld29yay4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGluZ3MgbGlrZSBlc3RhYmxpc2hpbmcgc2VjdXJlIGNvbm5lY3Rpb25zLCBzZXR0aW5nIHVwIFRMUyBjb250ZXh0cywgaGFuZGxpbmcgY2VydGlmaWNhdGVzLCBrZXkgbWFuYWdlbWVudCwgYW5kIHVsdGltYXRlbHksIGdyYWNlZnVsbHkgc2h1dHRpbmcgZG93biB0aG9zZSBzZWN1cmVkIHNlc3Npb25zLiBBIHN1Y2Nlc3NmdWwgaW52ZXN0aWdhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgaW52b2x2ZSBsb29raW5nIGZvciBhIG51bWJlciBvZiBmZWF0dXJlcyBsaWtlIGEgc3VjY2Vzc2Z1bCBUTFMgaW5pdGlhbGl6YXRpb24sIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cCB3aGVuIHRlYXJpbmcgZG93biB0aGUgVExTIGNvbm5lY3Rpb24sIGFuZCB0aGUgaW5jbHVzaW9uIG9mIHdlbGwtc3RydWN0dXJlZCBmdW5jdGlvbnMgc3VjaCBhcyBgU1NMX0NUWF9uZXdgLCBgU1NMX25ld2AsIGBTU0xfY29ubmVjdGAsIGFuZCBgU1NMX3NodXRkb3duYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuc2ltYCBtYW5hZ2VzIHRoZSBpbnRyaWNhY2llcyBvZiBUTFMgd2l0aGluIGl0cyBhcmNoaXRlY3R1cmUuIE5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6NTguMzE0NDUxNDI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vdGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdH07XFxuIDM4MTpcXHRcXG4gMzgyOlxcdHZvaWQgbnNpbV90bHNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4gMzgzOlxcdHtcXG4gMzg0OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZucy1cXHUwMDNldGxzLmNvbm5zKTtcXG4gMzg1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZucy1cXHUwMDNldGxzLmxvY2spO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2V0bHNkZXZfb3BzID0gXFx1MDAyNm5zaW1fdGxzZGV2X29wcztcXG4gMzg4OlxcdFxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5TSU1fVExTX0ZFQVRVUkVTO1xcbiAzODk6XFx0XFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTlNJTV9UTFNfRkVBVFVSRVM7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdG5zLVxcdTAwM2V0bHMuZGZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJ0bHNcXFwiLCAwNDAwLFxcbiAzOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5zLVxcdTAwM2Vuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4gMzkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bnNpbV90bHNfZGJnX2ZvcHMpO1xcbiAzOTQ6XFx0fVxcbiAzOTU6XFx0XFxuIDM5NjpcXHR2b2lkIG5zaW1fdGxzX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiAzOTc6XFx0e1xcbiAzOTg6XFx0XFx0c3RydWN0IG5zaW1fdGxzX2Nvbm4gKmNvbm4sICp0bXA7XFxuIDM5OTpcXHRcXHR1MzIgbGVmdDtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVxcdTAwM2V0bHMuZGZpbGUpO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuIDQwNDpcXHRcXHRsZWZ0ID0gbnMtXFx1MDAzZXRscy5jb3VudDtcXG4gNDA1OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCB0bXAsIFxcdTAwMjZucy1cXHUwMDNldGxzLmNvbm5zLCBsaXN0KSB7XFxuIDQwNjpcXHRcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWxpc3QpO1xcbiA0MDc6XFx0XFx0XFx0a2ZyZWVfcmN1KGNvbm4sIHJjdSk7XFxuIDQwODpcXHRcXHR9XFxuIDQwOTpcXHRcXHRucy1cXHUwMDNldGxzLmNvdW50ID0gMDtcXG4gNDEwOlxcdFxcdG5zLVxcdTAwM2V0bHMudHhfY29ubiA9IDA7XFxuIDQxMTpcXHRcXHRucy1cXHUwMDNldGxzLnJ4X2Nvbm4gPSAwO1xcbiA0MTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5zLVxcdTAwM2V0bHMubG9jayk7XFxuIDQxMzpcXHRcXG4gNDE0OlxcdFxcdGlmIChsZWZ0KVxcbiA0MTU6XFx0XFx0XFx0bmV0ZGV2X2Vycihucy1cXHUwMDNlbmV0ZGV2LFxcbiA0MTY6XFx0XFx0XFx0XFx0ICAgXFxcInRlYXJpbmcgZG93biBUTFMgb2ZmbG9hZCB3aXRoICV1IGNvbm5lY3Rpb25zIGxlZnRcXFxcblxcXCIsXFxuIDQxNzpcXHRcXHRcXHRcXHQgICBsZWZ0KTtcXG4gNDE4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MDY6NTguMzE0NjMyMjU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NTU3NDYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGtUTFMgT2ZmbG9hZCBQYXRjaCBmb3IgbmV0ZGV2c2ltKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGp1c3QgZ3JhYiBgbnNpbV9kb190bHNgIHNpbmNlIGl0J3Mgbm90IHN0YXRpYyBhbmQgbm90IGlubGluZWQsIGFsb25nIHdpdGggYG5zaW1fdGxzX2luaXRgIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiAgYG5zaW1fdGxzX2Rldl9hZGRgIGNhdWdodCBteSBleWUgaW5pdGlhbGx5LCBzaW5jZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiAtIGluZGljYXRpbmcgaXQncyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBCdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG5zaW1fdGxzX2Rldl9hZGRgIGFuZCBgbnNpbV90bHNfZGV2X2RlbGAgYXJlIHJlYWxseSB0aGUgaGVhcnQgb2YgdGhlIFRMUyBjb250ZXh0IG1hbmFnZW1lbnQgZm9yIHRoaXMgbmV0ZGV2c2ltIGtUTFMgb2ZmbG9hZC4gVGhleSAqYXJlKiBhc3NpZ25lZCB0byB0aGUgYG5zaW1fdGxzZGV2X29wc2Agc3RydWN0dXJlIHdoaWNoIGlzIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHRoZSBrVExTIGNvbnRleHQgYWRkaXRpb24gYW5kIGRlbGV0aW9uLCBzbyBJIHNob3VsZCBpbmNsdWRlIHRoZW0uIFRoZW4sIHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzaG91bGQgc3RpY2sgd2l0aCBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLiBJJ20gZ29pbmcgdG8gc3RpY2sgd2l0aCB0aGUgYG5zaW1fZG9fdGxzYCwgYG5zaW1fdGxzX2luaXRgLCBhbmQgYG5zaW1fdGxzX3RlYXJkb3duYC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIGBORVRERVZTSU1gLCBgVExTYCwgYW5kIGBUTFNfREVWSUNFYC4gQ2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4uLiBgVExTYCBuZWVkcyBgSU5FVGAuIGBORVRERVZTSU1gIG5lZWRzIGBJTkVUYCwgIGBQU0FNUExFIHx8IFBTQU1QTEU9bmAsIGBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9bmAsIGFuZCBgVExTIHx8IFRMUz1uYC4gU28sIHRob3NlIHRocmVlIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5UaGUgYmlnIHBpY3R1cmUgaXMgdGhpczogdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldywgZW11bGF0ZWQga1RMUyBvZmZsb2FkIGNhcGFiaWxpdHkgdG8gdGhlIGBuZXRkZXZzaW1gIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYWRkaXRpb24gdGhhdCBwcm92aWRlcyBuZXcsIHJlYWNoYWJsZSBjb2RlIHBhdGhzLiBUaGlzIG1lYW5zIGl0J3MgZm9yIHRlc3RpbmcgVExTIGhhcmR3YXJlIG9mZmxvYWQgaW4gYSB2aXJ0dWFsaXplZCwgc2ltdWxhdGVkIGVudmlyb25tZW50LiBUaGUgbmV3IGNvZGUgc2hvdWxkIGJlIGludm9rZWQgdmlhIHRoZSBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucyBhbmQgdHlwaWNhbCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBgbmV0ZGV2c2ltYC5cblxuVG8gcmVjYXAsIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgbnNpbV9kb190bHNgLCBgbnNpbV90bHNfaW5pdGAsIGFuZCBgbnNpbV90bHNfdGVhcmRvd25gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5MiwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNTowNzowNy4xNzAzODIzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTUxMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fZG9fdGxzXCIsXG4gICAgXCJuc2ltX3Rsc19pbml0XCIsXG4gICAgXCJuc2ltX3Rsc190ZWFyZG93blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZW11bGF0ZWQga1RMUyBvZmZsb2FkIHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiBuZXRkZXZzaW0gaXMgdXNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fZG9fdGxzXCIsXG4gICAgXCJuc2ltX3Rsc19pbml0XCIsXG4gICAgXCJuc2ltX3Rsc190ZWFyZG93blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZW11bGF0ZWQga1RMUyBvZmZsb2FkIHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBmb3IgdGVzdGluZyBUTFMgaGFyZHdhcmUgb2ZmbG9hZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBvcHRpb25zIGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMgd2hlbiBuZXRkZXZzaW0gaXMgdXNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[1] Phase: Succeeded StartedAt: 2026-07-29 15:07:18 +0000 UTC FinishedAt: 2026-07-29 15:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 15:07:18 +0000 UTC FinishedAt: 2026-07-29 15:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2] Phase: Succeeded StartedAt: 2026-07-29 15:07:18 +0000 UTC FinishedAt: 2026-07-29 18:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 15:07:18 +0000 UTC FinishedAt: 2026-07-29 18:55:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 15:07:18 +0000 UTC FinishedAt: 2026-07-29 15:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 15:07:18 +0000 UTC FinishedAt: 2026-07-29 15:07:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcn5hp/series-workflowcn5hp-convert-artifact-2381304902/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 15:07:29 +0000 UTC FinishedAt: 2026-07-29 15:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 15:07:29 +0000 UTC FinishedAt: 2026-07-29 15:27:05 +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:*aafed955-da0f-497d-9f33-6b9d94dc7f60,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-workflowcn5hp/series-workflowcn5hp-convert-artifact-2381304902/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": "9f5c4f1d-ae1c-4661-ac7c-de598b8217c5", "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-workflowcn5hp/series-workflowcn5hp-build-action-3655115228/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 15:07:29 +0000 UTC FinishedAt: 2026-07-29 15:26:55 +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:*aafed955-da0f-497d-9f33-6b9d94dc7f60,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-workflowcn5hp/series-workflowcn5hp-convert-artifact-2381304902/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": "9f5c4f1d-ae1c-4661-ac7c-de598b8217c5", "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-workflowcn5hp/series-workflowcn5hp-build-action-3655115228/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 15:27:05 +0000 UTC FinishedAt: 2026-07-29 15:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 15:27:05 +0000 UTC FinishedAt: 2026-07-29 15:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 15:27:05 +0000 UTC FinishedAt: 2026-07-29 15:27:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 15:27:05 +0000 UTC FinishedAt: 2026-07-29 15:27:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcn5hp/series-workflowcn5hp-convert-artifact-194463641/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 15:27:15 +0000 UTC FinishedAt: 2026-07-29 15:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 15:27:15 +0000 UTC FinishedAt: 2026-07-29 15:29:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f5c4f1d-ae1c-4661-ac7c-de598b8217c5,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-workflowcn5hp/series-workflowcn5hp-build-action-3655115228/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-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 15:29:21 +0000 UTC FinishedAt: 2026-07-29 15:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 15:29:21 +0000 UTC FinishedAt: 2026-07-29 15:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 15:29:21 +0000 UTC FinishedAt: 2026-07-29 15:52:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 15:29:21 +0000 UTC FinishedAt: 2026-07-29 15:52:41 +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:*aafed955-da0f-497d-9f33-6b9d94dc7f60,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-workflowcn5hp/series-workflowcn5hp-convert-artifact-194463641/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": "6e722e06-2f3d-4133-91dd-54802ee7f925", "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-workflowcn5hp/series-workflowcn5hp-build-action-2139182837/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 15:29:21 +0000 UTC FinishedAt: 2026-07-29 15:52:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*aafed955-da0f-497d-9f33-6b9d94dc7f60,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-workflowcn5hp/series-workflowcn5hp-convert-artifact-194463641/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": "6e722e06-2f3d-4133-91dd-54802ee7f925", "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-workflowcn5hp/series-workflowcn5hp-build-action-2139182837/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 15:52:41 +0000 UTC FinishedAt: 2026-07-29 15:52:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 15:52:41 +0000 UTC FinishedAt: 2026-07-29 15:52:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 15:52:41 +0000 UTC FinishedAt: 2026-07-29 15:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 15:52:41 +0000 UTC FinishedAt: 2026-07-29 15:54:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6e722e06-2f3d-4133-91dd-54802ee7f925,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-workflowcn5hp/series-workflowcn5hp-build-action-2139182837/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-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 15:54:31 +0000 UTC FinishedAt: 2026-07-29 18:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 15:54:31 +0000 UTC FinishedAt: 2026-07-29 18:55:52 +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":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"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:*9f5c4f1d-ae1c-4661-ac7c-de598b8217c5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6e722e06-2f3d-4133-91dd-54802ee7f925,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-workflowcn5hp/series-workflowcn5hp-build-action-3655115228/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-workflowcn5hp/series-workflowcn5hp-build-action-2139182837/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 15:54:31 +0000 UTC FinishedAt: 2026-07-29 15:54:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 15:54:31 +0000 UTC FinishedAt: 2026-07-29 15:54:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"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-workflowcn5hp/series-workflowcn5hp-convert-artifact-618272142/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 15:54:31 +0000 UTC FinishedAt: 2026-07-29 15:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 15:54:31 +0000 UTC FinishedAt: 2026-07-29 15:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 15:54:31 +0000 UTC FinishedAt: 2026-07-29 15:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 15:54:41 +0000 UTC FinishedAt: 2026-07-29 18:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcn5hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_do_tls","nsim_tls_init","nsim_tls_teardown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","TLS","TLS_DEVICE"],"series_id":"424efba7-fa9a-474b-9760-7ed353c70dd0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 15:54:41 +0000 UTC FinishedAt: 2026-07-29 18:55:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f5c4f1d-ae1c-4661-ac7c-de598b8217c5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6e722e06-2f3d-4133-91dd-54802ee7f925,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-workflowcn5hp/series-workflowcn5hp-build-action-3655115228/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-workflowcn5hp/series-workflowcn5hp-build-action-2139182837/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-workflowcn5hp/series-workflowcn5hp-convert-artifact-618272142/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,}