Name: series-workflow4nrjb Phase: Succeeded StartedAt: 2026-09-05 12:28:09 +0000 UTC FinishedAt: 2026-09-05 16:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[0] Phase: Succeeded StartedAt: 2026-09-05 12:28:09 +0000 UTC FinishedAt: 2026-09-05 12:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 12:28:09 +0000 UTC FinishedAt: 2026-09-05 12:43:47 +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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP", "NET_IPGRE_DEMUX" ], "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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP", "NET_IPGRE_DEMUX" ], "series_id": "af95c1a0-949e-4c33-ad31-cef2b196924d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_async_ioctl", "ppp_async_send", "ppp_sync_ioctl", "ppp_sync_send", "pppoe_xmit", "pppoe_fill_forward_path", "pptp_xmit", "pptp_ppp_ioctl", "pppoatm_send", "pppoatm_devppp_ioctl", "pppol2tp_xmit", "ppp_push", "ppp_mp_explode", "__ppp_channel_push", "ppp_channel_bridge_input", "ppp_ioctl", "ppp_fill_forward_path" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2sgdmFyaWFibGVzLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocyBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGNyZWF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb2ludGVyLXJlbGF0ZWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcHBwX2NoYW5uZWxfb3BzIGludGVyZmFjZSAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSB0byBwYXNzIHRoZSBjaGFubmVsIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiBwcHBfZ2VuZXJpYyBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgUFBQIGNoYW5uZWwgbW9kdWxlcyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIHBwcG9sMnRwKS4gVGhlc2UgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBwcm90b2NvbHMgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgL2Rldi9wcHAgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZTI1MTg5YjZiODA2MGMwNDRlNTYyMThjMmE3N2E4M2UzZjVmMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMjo0Mjo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO3N0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19pbnB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpO1xuJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbiBcbiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuQEAgLTMyMSw5ICYjNDM7MzIwLDkgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbkBAIC01NTAsOSAmIzQzOzU0OSw5IEBAIHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcClcbiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7cHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX2FzeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbkBAIC03OTAsNyAmIzQzOzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdFx0Y2hhbiA9IHBjaC1cdTAwM2VjaGFuO1xuIFx0XHRcdGVyciA9IC1FTk9UVFk7XG4gXHRcdFx0aWYgKGNoYW4gXHUwMDI2XHUwMDI2IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKVxuLVx0XHRcdFx0ZXJyID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwoY2hhbiwgY21kLCBhcmcpO1xuJiM0MztcdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4tXHUwMDNlcHJpdmF0ZSwgY21kLCBhcmcpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2gtXHUwMDNlY2hhbl9zZW0pO1xuIFx0XHR9XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE2MDMsNyAmIzQzOzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0aWYgKCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7XG4mIzQzO1x0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi1cdTAwM2Vwcml2YXRlKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcHBfbmV0ZGV2X29wcyA9IHtcbkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcbiYjNDM7XHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpO1xuIFxuIG91dDpcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdC8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi9cbiBcdFx0Y2hhbiA9IHBjaC1cdTAwM2VjaGFuO1xuIFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkgfHxcbi1cdFx0XHQhY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcbiYjNDM7XHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBmcmFnKSlcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgZnJhZyk7XG4gXHRcdHBjaC1cdTAwM2VoYWRfZnJhZyA9IDE7XG4gXHRcdHAgJiM0Mzs9IGZsZW47XG5AQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXG4gXHRpZiAocGNoLVx1MDAzZWNoYW4pIHtcbiBcdFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpKSB7XG4gXHRcdFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpO1xuLVx0XHRcdGlmICghcGNoLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoLVx1MDAzZWNoYW4sIHNrYikpIHtcbiYjNDM7XHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKSB7XG4gXHRcdFx0XHQvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiBcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjMwMCw3ICYjNDM7MjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVx1MDAzZWNoYW5fbmV0LCBwY2hiLVx1MDAzZWNoYW5fbmV0KSk7XG4tXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4sIHNrYikpXG4mIzQzO1x0aWYgKCFwY2hiLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoYi1cdTAwM2VjaGFuLVx1MDAzZXByaXZhdGUsIHNrYikpXG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFxuIG91dGw6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZjg3ZDQzZmFlZWFiNS4uNTRkODQwMmUxOGM0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTgxLDkgJiM0Mzs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuJiM0MztzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbiBzdGF0aWMgaW50IHBwcF9zeW5jX3B1c2goc3RydWN0IHN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcbkBAIC0zMTIsOSAmIzQzOzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHRpbnQgZXJyLCB2YWw7XG4gXHR1MzIgYWNjbVs4XTtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuQEAgLTQ5MSw5ICYjNDM7NDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7cHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX3N5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuQEAgLTg0MSw5ICYjNDM7ODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XG4gICpcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXHUwMDNlcHBwb2VfZGV2O1xuIFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XG5AQCAtODk1LDkgJiM0Mzs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4mIzQzO1x0XHRcdFx0ICAgdm9pZCAqcHJpdmF0ZSlcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwdHAuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbmluZGV4IGE3OTdhMDYwNmY2YjQuLjhmNzE5MGQ3MDY3ZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG5AQCAtMTQ2LDkgJiM0MzsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLFxuIFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbkBAIC01NzMsMTAgJiM0Mzs1NzMsOSBAQCBzdGF0aWMgaW50IHBwdHBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4pXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9IFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwdHA7XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsO1xuIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuIFx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4gXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cbi1cdGludFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4mIzQzO1x0aW50XHQoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gXHQvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi9cbi1cdGludFx0KCppb2N0bCkoc3RydWN0IHBwcF9jaGFubmVsICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4mIzQzO1x0aW50XHQoKmlvY3RsKSh2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4gXHRpbnRcdCgqZmlsbF9mb3J3YXJkX3BhdGgpKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICosXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICopO1xuJiM0MztcdFx0XHRcdCAgICAgdm9pZCAqKTtcbiB9O1xuIFxuIHN0cnVjdCBwcHBfY2hhbm5lbCB7XG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbiBcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4te1xuLVx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4tfVxuLVxuIC8qXG4gICogV2UgY2FuJiMzOTt0IGRvIHRoaXMgZGlyZWN0bHkgZnJvbSBvdXIgX3BvcCBoYW5kbGVyLCBzaW5jZSB0aGUgcHBwIGNvZGVcbiAgKiBkb2VzbiYjMzk7dCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbVxuQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXG4gICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZG9pbmcuXG4gICovXG4gI2RlZmluZSBEUk9QX1BBQ0tFVCAxXG4tc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbiYjNDM7XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG5AQCAtMzY2LDE2ICYjNDM7MzYxLDE2IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB9XG4gXG4gLyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cbi1zdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdHVuc2lnbmVkIGxvbmcgYXJnKVxuJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuJiM0MztcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4mIzQzO1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuLVx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4tXHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuJiM0MztcdFx0cmV0dXJuIHB1dF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4tXHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4mIzQzO1x0XHRyZXR1cm4gZ2V0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHR9XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbmluZGV4IGVmOGZkZmFmMDUxZDQuLmMxY2RhMWQ3ZmJmNmIgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5AQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XG4gXHRzdHJ1Y3Qgc29ja1x0XHQqX19zaztcdFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xuIFx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbkBAIC0zMjcsOSAmIzQzOzMyNyw5IEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5c1xuICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuXG4gICovXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7XG4gXHRpbnQgdWhsZW4sIGhlYWRyb29tO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwcHBfY2hhbm5lbF9vcHMgaW50ZXJmYWNlIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIHRvIHBhc3MgdGhlIGNoYW5uZWwgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHBwcF9nZW5lcmljIGFzIHdlbGwgYXMgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBQUFAgY2hhbm5lbCBtb2R1bGVzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgcHBwb2wydHApLiBUaGVzZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHByb3RvY29scyBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXRzIGFuZCAvZGV2L3BwcCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlMjUxODliNmI4MDYwYzA0NGU1NjIxOGMyYTc3YTgzZTNmNWYwYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEyOjQyOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTsKICAqIFByb3RvdHlwZXMuCiAgKi8KIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogCiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLApAQCAtMzIxLDkgJiM0MzszMjAsOSBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJaW50IGVyciwgdmFsOwpAQCAtNTUwLDkgJiM0Mzs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9hc3luY19wdXNoKGFwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzkwLDcgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJCWVyciA9IC1FTk9UVFk7CiAJCQlpZiAoY2hhbiAmYW1wOyZhbXA7IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwpCi0JCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZyk7CiYjNDM7CQkJCWVyciA9IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwoY2hhbi0mZ3Q7cHJpdmF0ZSwgY21kLCBhcmcpOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGNoLSZndDtjaGFuX3NlbSk7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0xNjAzLDcgJiM0MzsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlpZiAoIWNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7CiYjNDM7CXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi0mZ3Q7cHJpdmF0ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7CkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKTsKJiM0MzsJCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBza2IpOwogCiBvdXQ6CiAJCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCS8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi8KIAkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtwY2gtJmd0O2ZpbGUueHEpIHx8Ci0JCQkhY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIGZyYWcpKQomIzQzOwkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbi0mZ3Q7cHJpdmF0ZSwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgZnJhZyk7CiAJCXBjaC0mZ3Q7aGFkX2ZyYWcgPSAxOwogCQlwICYjNDM7PSBmbGVuOwpAQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApCiAJaWYgKHBjaC0mZ3Q7Y2hhbikgewogCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkpIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cGNoLSZndDtmaWxlLnhxKTsKLQkJCWlmICghcGNoLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoLSZndDtjaGFuLCBza2IpKSB7CiYjNDM7CQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpIHsKIAkJCQkvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJCQlza2JfcXVldWVfaGVhZCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgc2tiKTsKIAkJCQlicmVhazsKQEAgLTIzMDAsNyAmIzQzOzIzMDAsNyBAQCBzdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtJmd0O2NoYW5fbmV0LCBwY2hiLSZndDtjaGFuX25ldCkpOwotCWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4sIHNrYikpCiYjNDM7CWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpCiAJCWtmcmVlX3NrYihza2IpOwogCiBvdXRsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAgewogICogUHJvdG90eXBlcy4KICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTsKQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC00OTEsOSAmIzQzOzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogICogYXQgc29tZSBsYXRlciB0aW1lLgogICovCiBzdGF0aWMgaW50Ci1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9zeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC04NDEsOSAmIzQzOzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tJmd0O3BwcG9lX2RldjsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKQEAgLTg5NSw5ICYjNDM7ODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsCi0JCQkJICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwppbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKQEAgLTE0Niw5ICYjNDM7MTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbywKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKIH0KIAotc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHB0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJmFtcDtwby0mZ3Q7cHJvdG8ucHB0cDsKQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybikKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsOwogc3RydWN0IHBwcF9jaGFubmVsX29wcyB7CiAJLyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuCiAJICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovCi0JaW50CSgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwomIzQzOwlpbnQJKCpzdGFydF94bWl0KSh2b2lkICosIHN0cnVjdCBza19idWZmICopOwogCS8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqLwotCWludAkoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKJiM0MzsJaW50CSgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAlpbnQJKCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKiwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKJiM0MzsJCQkJICAgICB2b2lkICopOwogfTsKIAogc3RydWN0IHBwcF9jaGFubmVsIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYykKIAlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLSZndDt1c2VyX2JhY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKLXsKLQlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi0mZ3Q7cHJpdmF0ZSk7Ci19Ci0KIC8qCiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZQogICogZG9lc24mIzM5O3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb20KQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpCiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy4KICAqLwogI2RlZmluZSBEUk9QX1BBQ0tFVCAxCi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7CiYjNDM7CXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgcmV0OwogCkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqLwotc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKJiM0MzsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUFBQSU9DR0ZMQUdTOgotCQlyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLSZndDtmbGFncywgKGludCBfX3VzZXIgKikgYXJnKQotCQkgICAgPyAtRUZBVUxUIDogMDsKJiM0MzsJCXJldHVybiBwdXRfdXNlcihwdmNjLSZndDtmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CiAJY2FzZSBQUFBJT0NTRkxBR1M6Ci0JCXJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIGdldF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gewogCXN0cnVjdCBzb2NrCQkqX19zazsJCS8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqLwogfTsKIAotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHsKIAkuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LApAQCAtMzI3LDkgJiM0MzszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwKICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5cwogICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci4KICAqLwotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7CiAJaW50IHVobGVuLCBoZWFkcm9vbTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGl0cyBmdXp6aW5nIHBvdGVudGlhbCBhbmQgaG93IHRvIGJlc3QgYXBwcm9hY2ggaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmcsIGFuZCBpZiBzbywgd2hhdCBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSBtb3N0IGVmZmVjdGl2ZS4KClRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgYHBwcGAgcmVsYXRlZCBmaWxlczogYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYGluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaGAsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNwcmVhZGluZyBhY3Jvc3MgdGhlIFBQUCBzdGFjay4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWx0ZXJpbmcgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYC4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBvZiBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBiZWluZyB0d2Vha2VkLiBUaGV5JiMzOTtyZSBjaGFuZ2luZyBmcm9tIHRha2luZyBhIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0byB0YWtpbmcgYSBgdm9pZCAqYCBpbnN0ZWFkLgoKVGhpcyBhbHNvIG1lYW5zIGNvcnJlc3BvbmRpbmcgdXBkYXRlcyBpbiB0aGUgY2FsbGVyIHNpdGVzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG5vdyBwYXNzaW5nIGBjaGFuLSZndDtwcml2YXRlYCB0byB0aGVzZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBgY2hhbmAgaXRzZWxmIGluIGBwcHBfZ2VuZXJpYy5jYC4gQWxyaWdodCwgc28gdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgYWxzbyB1cGRhdGVkOiBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9hc3luY19zZW5kYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwcF9zeW5jX3NlbmRgLCBgcHBwb2VfeG1pdGAsIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHRwX3htaXRgLCBgcHB0cF9wcHBfaW9jdGxgLCBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCBhbmQgYHBwcG9sMnRwX3htaXRgIGFyZSBhbGwgYmVpbmcgdG91Y2hlZC4KCk5vdywgYmVmb3JlIEkgZGVjaWRlIG9uIGEgZnV6emluZyBzdHJhdGVneSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGEgY29tcHJlaGVuc2l2ZSBjaGFuZ2UuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGVudGlyZSBjb2RlYmFzZSB0byB2ZXJpZnkgdGhhdCBubyBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgYHBwcF9jaGFubmVsX29wc2AgaGF2ZSBiZWVuIG1pc3NlZC4gR290dGEgdXNlIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgZWxzZSBwb3BzIHVwISBJJiMzOTttIGhvcGluZyB0aGlzIGlzIGEgY29tcGxldGUgYW5kIGNsZWFuIHJlZmFjdG9yLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgdGhvcm91Z2ggY2hlY2suIFRoZW4gaXQmIzM5O3MgdGltZSB0byBjb21waWxlIGl0IGFuZCBjb25maXJtIGl0IGFsbCB3b3JrcyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfY2hhbm5lbF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMj1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDYtXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTg5PXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDUtXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDctXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9MjU9c3RydWN0IHBwcF9jaGFubmVsO1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI2LVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI4LVx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTM4PXN0cnVjdCBwcHBfY2hhbm5lbCB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMzktXHR2b2lkXHRcdCpwcml2YXRlO1x0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo0MDpcdGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsgLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXHRpbnRcdFx0bXR1O1x0XHQvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNjQ9c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OS1cdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTI1PXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEyOC1cdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBQUFAvUFBQb0UgUHJvdG9jb2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZ3VpZGVsaW5lcyBjbGVhcmx5IHN0YXRlIEkgY2FuJiMzOTt0IGp1c3Qgd2F2ZSBvZmYgYW55IG1vZGlmaWNhdGlvbiwgZXZlbiBpZiBpdCYjMzk7cyBsYWJlbGVkICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciAmIzM0O3JlZmFjdG9yaW5nJiMzNDsuICBJZiB0aGUgY29kZSBpcyB0b3VjaGVkIGFuZCBleGVjdXRhYmxlLCBpdCAqbXVzdCogYmUgZnV6emVkLiBBbmQgdGhlc2UgUFBQIGFuZCBQUFBvRSBwcm90b2NvbHMsIGFsb25nIHdpdGggdGhlaXIgdmFyaWF0aW9ucyAoUFBUUCwgUFBQb0wyVFAsIFBQUG9BVE0sIHBwcF9hc3luYywgcHBwX3N5bmN0dHkpLCBhcmUgZGVmaW5pdGVseSB3aXRoaW4gc2NvcGUuIFRoZXkgYXJlIHN0YW5kYXJkIG5ldHdvcmtpbmcgcHJvdG9jb2xzL2RyaXZlcnMuICBUaGV5JiMzOTtyZSByZWFjaGFibGUgdmlhIHNvY2tldHMgYW5kIGAvZGV2L3BwcGAgaW9jdGxzIOKAkyB0aGF0JiMzOTtzIGEgZGlyZWN0IGVudHJ5IHBvaW50LCBzbyBXb3J0aEZ1enppbmcgaXMgYWJzb2x1dGVseSBgdHJ1ZWAuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBmdXp6aW5nLCBJIG5lZWQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudDogSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXNlIGZpbGVzIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyAoc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGVgLCBgbmV0L2F0bS9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvTWFrZWZpbGVgKSBhbmQgZ3JlcCBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYG5ldC9hdG0vcHBwb2F0bS5jYCwgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gT25jZSBJIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gcmVnYXJkaW5nIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIGZ1enphYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QUFApICYjNDM7PSBwcHBfZ2VuZXJpYy5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUFBQX0FTWU5DKSAmIzQzOz0gcHBwX2FzeW5jLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS04LW9iai0kKENPTkZJR19QUFBfQlNEQ09NUCkgJiM0Mzs9IGJzZF9jb21wLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19QUFBfREVGTEFURSkgJiM0Mzs9IHBwcF9kZWZsYXRlLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUFBQX01QUEUpICYjNDM7PSBwcHBfbXBwZS5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgJiM0Mzs9IHBwcF9zeW5jdHR5Lm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT1gpICYjNDM7PSBwcHBveC5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1BQUE9FKSAmIzQzOz0gcHBwb2Uub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19QUFRQKSAmIzQzOz0gcHB0cC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBCdWlsZCBDb25maWd1cmF0aW9ucyBmb3IgQVRNIGFuZCBMMlRQKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvYXRtL01ha2VmaWxlYCBhbmQgYG5ldC9sMnRwL01ha2VmaWxlYCBmaWxlcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgYmVpbmcgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwgdHJlZSwgYW5kLCBpbXBsaWNpdGx5LCBob3cgdGhleSYjMzk7cmUgKmludGVncmF0ZWQqLiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIHNwZWNpZmljIHRvIHRoZXNlIG5ldHdvcmsgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBhbnkgbnVhbmNlcyB0aGF0IGV4aXN0IGluIHRoZWlyIGJ1aWxkIHNldHVwLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2sgYnVpbGQgc3RyYXRlZ3kgdG9vLiBBbnkgaW50ZXJlc3RpbmcgZGlyZWN0aXZlcyB0aGVyZSB3aWxsIGJlIGEgYm9udXMhIEkgZXhwZWN0IHRoZXNlIGZpbGVzIHRvIHJldmVhbCBtdWNoIGFib3V0IG1vZHVsZSBvcHRpb25zLCBwZXJoYXBzIGV4cG9zaW5nIHdoZXRoZXIgcGFydGljdWxhciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgaG93IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcG9hdG0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTDJUUCBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvbDJ0cC9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgTDJUUCBtb2R1bGUgaXMgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBwdXQgdG9nZXRoZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucywgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCB2ZXJzaW9ucyBvciBjb25maWcgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBkZXBlbmRlbmNpZXMg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBUaW1lIHRvIGdldCBkb3duIGluIHRoZSB3ZWVkcyBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIE1ha2VmaWxlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL01ha2VmaWxlPTg9Q0ZMQUdTX2wydHBfY29yZS5vICYjNDM7PSAtSSQoc3JjKVxuLS1cbm5ldC9sMnRwL01ha2VmaWxlLTEwLSMgQnVpbGQgbDJ0cCBhcyBtb2R1bGVzIGlmIEwyVFAgaXMgTVxubmV0L2wydHAvTWFrZWZpbGU6MTE6b2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19QUFBPTDJUUCkpICYjNDM7PSBsMnRwX3BwcC5vXG5uZXQvbDJ0cC9NYWtlZmlsZS0xMi1vYmotJChzdWJzdCB5LCQoQ09ORklHX0wyVFApLCQoQ09ORklHX0wyVFBfSVApKSAmIzQzOz0gbDJ0cF9pcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTg5CgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZHMgYSBmZWxsb3cgZXhwZXJ0OgoKKipLY29uZmlnIERpdmUgZm9yIFBQUCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgUFBQIChQb2ludC10by1Qb2ludCBQcm90b2NvbCkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBwcm9qZWN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHZhcmlvdXMgUFBQIHN1Yi1wcm90b2NvbHMgYW5kIGltcGxlbWVudGF0aW9ucy4gTXkgdGFyZ2V0IGxpc3QgaXM6IGBQUFBgLCBgUFBQX0FTWU5DYCwgYFBQUF9TWU5DX1RUWWAsIGBQUFBPRWAsIGBQUFRQYCwgYFBQUE9BVE1gLCBhbmQgYFBQUE9MMlRQYC4KCk15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGVmZmljaWVudGx5IGRldGVybWluZSB3aGVyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBsaXZlIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHkuIE5vIG5lZWQgdG8gZ28gaHVudGluZyBtYW51YWxseSDigJMgYSBgZ3JlcGAgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggdG8gbG9jYXRlIGFuZCBwaW5wb2ludCB3aGVyZSBlYWNoIG9mIHRob3NlIHN5bWJvbHMgaXMgZGVmaW5lZC4gVGhhdCBzaG91bGQgcXVpY2tseSBleHBvc2UgYW55IGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvdGVudGlhbCBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlc2UgZGlmZmVyZW50IFBQUCB2YXJpYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIGVhY2ggZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGFmZmVjdHMgd2hldGhlciB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGVzZSBvcHRpb25zIGZpdCB0b2dldGhlciBhbmQgdWx0aW1hdGVseSBob3cgdGhlIHN5c3RlbSBzdXBwb3J0cyBhbmQgZW5hYmxlcyB0aGUgZGlmZmVyZW50IFBQUCBjb21tdW5pY2F0aW9uIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoUFBQfFBQUF9BU1lOQ3xQUFBfU1lOQ19UVFl8UFBQT0V8UFBUUHxQUFBPQVRNfFBQUE9MMlRQKVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTExMz1jb25maWcgUFBQT1hcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1Mz1jb25maWcgUFBQT0VfSEFTSF9CSVRTXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTYwLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYxOmNvbmZpZyBQUFRQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjItXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBJUHY0IChQUFRQKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3Mzpjb25maWcgUFBQT0wyVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODE9aWYgVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTg0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhlc2UgS2NvbmZpZyBlbnRyaWVzIGhpZ2hsaWdodGVkLCBhbmQgbXkgZmlyc3QgbW92ZSBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGVpciByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRyb2xzIHRoZXNlIHNldHRpbmdzLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvbnRleHQg4oCTIGEgZmV3IGxpbmVzIGFib3ZlIGFuZCBiZWxvdyBlYWNoIGhpZ2hsaWdodGVkIGVudHJ5IOKAkyBzcGVjaWZpY2FsbHkgc2VhcmNoaW5nIGZvciBhbnkgJiMzNDtkZXBlbmRzIG9uJiMzNDsgc3RhdGVtZW50cy4gVGhvc2UgZGVwZW5kZW5jaWVzIGFyZSB0aGUga2V5OyB0aGV5JiMzOTtsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgKG9yIGRpc2FibGVkKSBmb3IgdGhlc2UgcGFydGljdWxhciBzZXR0aW5ncyB0byBldmVuIGJlIGNvbnNpZGVyZWQsIG9yIHRvIHdvcmsgY29ycmVjdGx5LiBJdCYjMzk7cyB0aGUgYmVzdCBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBQUCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQUFBcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBTTEhDXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXG4gIDExOlx0XHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXG4gIDEyOlx0XHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXG4gIDEzOlx0XHQgIG90aGVyd2lzZSB5b3UgY2FuJiMzOTt0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXG4gIDE0Olx0XHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gdXNlIFBQUCwgeW91IG5lZWQgYW4gYWRkaXRpb25hbCBwcm9ncmFtIGNhbGxlZCBwcHBkLCBhdmFpbGFibGUgYXRcbiAgMTc6XHRcdCAgXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxuICAxODpcdFx0ICByZWNvbW1lbmRlZCBpbiBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1x1MDAzZS5cbiAgMTk6XHRcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIFRoZXJlIGFyZSBhY3R1YWxseSB0d28gdmVyc2lvbnMgb2YgUFBQOiB0aGUgdHJhZGl0aW9uYWwgUFBQIGZvclxuICAyMjpcdFx0ICBhc3luY2hyb25vdXMgbGluZXMsIHN1Y2ggYXMgcmVndWxhciBhbmFsb2cgcGhvbmUgbGluZXMsIGFuZFxuICAyMzpcdFx0ICBzeW5jaHJvbm91cyBQUFAgd2hpY2ggY2FuIGJlIHVzZWQgb3ZlciBkaWdpdGFsIElTRE4gbGluZXMgZm9yXG4gIDI0Olx0XHQgIGV4YW1wbGUuICBJZiB5b3Ugd2FudCB0byB1c2UgUFBQIG92ZXIgcGhvbmUgbGluZXMgb3Igb3RoZXJcbiAgMjU6XHRcdCAgYXN5bmNocm9ub3VzIHNlcmlhbCBsaW5lcywgeW91IG5lZWQgdG8gc2F5IFkgKG9yIE0pIGhlcmUgYW5kIGFsc28gdG9cbiAgMjY6XHRcdCAgdGhlIG5leHQgb3B0aW9uLCBcJiMzNDtQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXCYjMzQ7LiAgRm9yIFBQUCBvdmVyXG4gIDI3Olx0XHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcJiMzNDtTdXBwb3J0XG4gIDI4Olx0XHQgIHN5bmNocm9ub3VzIFBQUFwmIzM0OywgYmVsb3cuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHlvdSBzYWlkIFkgdG8gXCYjMzQ7VmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1wmIzM0OyBhYm92ZSwgdGhlblxuICAzMTpcdFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxuICAzMjpcdFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxuICAzMzpcdFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxuICAzNDpcdFxuICAzNTpcdGlmIFBQUFxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBQUFBfQlNEQ09NUFxuICAzODpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblwmIzM0O1xuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBTdXBwb3J0IGZvciB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzXG4gIDQxOlx0XHQgIHRoZSBMWlcgY29tcHJlc3Npb24gbWV0aG9kIHRvIGNvbXByZXNzIGVhY2ggUFBQIHBhY2tldCBiZWZvcmUgaXQgaXNcbiAgNDI6XHRcdCAgc2VudCBvdmVyIHRoZSB3aXJlLiBUaGUgbWFjaGluZSBhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBQUFAgbGlua1xuICA0MzpcdFx0ICAodXN1YWxseSB5b3VyIElTUCkgaGFzIHRvIHN1cHBvcnQgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxuICA0NDpcdFx0ICBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuIEV2ZW4gaWYgdGhleSBkb24mIzM5O3Qgc3VwcG9ydCBpdCxcbiAgNDU6XHRcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxuICA0NjpcdFxuICA0NzpcdFx0ICBUaGUgUFBQIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIChcJiMzNDtQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblwmIzM0OyxcbiAgNDg6XHRcdCAgYWJvdmUpIGlzIHByZWZlcmFibGUgdG8gQlNELUNvbXByZXNzLCBiZWNhdXNlIGl0IGNvbXByZXNzZXMgYmV0dGVyXG4gIDQ5Olx0XHQgIGFuZCBpcyBwYXRlbnQtZnJlZS5cbiAgNTA6XHRcbiAgNTE6XHRcdCAgTm90ZSB0aGF0IHRoZSBCU0QgY29tcHJlc3Npb24gY29kZSB3aWxsIGFsd2F5cyBiZSBjb21waWxlZCBhcyBhXG4gIDUyOlx0XHQgIG1vZHVsZTsgaXQgaXMgY2FsbGVkIGJzZF9jb21wIGFuZCB3aWxsIHNob3cgdXAgaW4gdGhlIGRpcmVjdG9yeVxuICA1MzpcdFx0ICBtb2R1bGVzIG9uY2UgeW91IGhhdmUgc2FpZCBcJiMzNDttYWtlIG1vZHVsZXNcJiMzNDsuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDU0Olx0XG4gIDU1Olx0Y29uZmlnIFBQUF9ERUZMQVRFXG4gIDU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblwmIzM0O1xuICA1NzpcdFx0c2VsZWN0IFpMSUJfSU5GTEFURVxuICA1ODpcdFx0c2VsZWN0IFpMSUJfREVGTEFURVxuICA1OTpcdFx0aGVscFxuICA2MDpcdFx0ICBTdXBwb3J0IGZvciB0aGUgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlcyB0aGVcbiAgNjE6XHRcdCAgRGVmbGF0ZSBhbGdvcml0aG0gKHRoZSBzYW1lIGFsZ29yaXRobSB0aGF0IGd6aXAgdXNlcykgdG8gY29tcHJlc3NcbiAgNjI6XHRcdCAgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpcyBzZW50IG92ZXIgdGhlIHdpcmUuICBUaGUgbWFjaGluZSBhdCB0aGVcbiAgNjM6XHRcdCAgb3RoZXIgZW5kIG9mIHRoZSBQUFAgbGluayAodXN1YWxseSB5b3VyIElTUCkgaGFzIHRvIHN1cHBvcnQgdGhlXG4gIDY0Olx0XHQgIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiAgRXZlbiBpZlxuICA2NTpcdFx0ICB0aGV5IGRvbiYjMzk7dCBzdXBwb3J0IGl0LCBpdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuXG4gIDY2Olx0XG4gIDY3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIFBQUF9GSUxURVJcbiAgNzA6XHRcdGJvb2wgXCYjMzQ7UFBQIGZpbHRlcmluZ1wmIzM0O1xuICA3MTpcdFx0aGVscFxuICA3MjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZSBwYWNrZXRzIHBhc3Npbmcgb3ZlclxuICA3MzpcdFx0ICBQUFAgaW50ZXJmYWNlcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoaWNoIHBhY2tldHMgY291bnQgYXNcbiAgNzQ6XHRcdCAgYWN0aXZpdHkgKGkuZS4gd2hpY2ggcGFja2V0cyB3aWxsIHJlc2V0IHRoZSBpZGxlIHRpbWVyIG9yIGJyaW5nIHVwXG4gIDc1Olx0XHQgIGEgZGVtYW5kLWRpYWxlZCBsaW5rKSBhbmQgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZHJvcHBlZCBlbnRpcmVseS5cbiAgNzY6XHRcdCAgWW91IG5lZWQgdG8gc2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHBhc3MtZmlsdGVyIGFuZFxuICA3NzpcdFx0ICBhY3RpdmUtZmlsdGVyIG9wdGlvbnMgdG8gcHBwZC5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODA6XHRcbiAgODE6XHRjb25maWcgUFBQX01QUEVcbiAgODI6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBNUFBFIGNvbXByZXNzaW9uIChlbmNyeXB0aW9uKVwmIzM0O1xuICA4MzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxuICA4NDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICA4NTpcdFx0aGVscFxuICA4NjpcdFx0ICBTdXBwb3J0IGZvciB0aGUgTVBQRSBFbmNyeXB0aW9uIHByb3RvY29sLCBhcyBlbXBsb3llZCBieSB0aGVcbiAgODc6XHRcdCAgTWljcm9zb2Z0IFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbC5cbiAgODg6XHRcbiAgODk6XHRcdCAgU2VlIGh0dHA6Ly9wcHRwY2xpZW50LnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIG9uXG4gIDkwOlx0XHQgIGNvbmZpZ3VyaW5nIFBQVFAgY2xpZW50cyBhbmQgc2VydmVycyB0byB1dGlsaXplIHRoaXMgbWV0aG9kLlxuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBQUFBfTVVMVElMSU5LXG4gIDkzOlx0XHRib29sIFwmIzM0O1BQUCBtdWx0aWxpbmsgc3VwcG9ydFwmIzM0O1xuICA5NDpcdFx0aGVscFxuICA5NTpcdFx0ICBQUFAgbXVsdGlsaW5rIGlzIGEgcHJvdG9jb2wgKGRlZmluZWQgaW4gUkZDIDE5OTApIHdoaWNoIGFsbG93cyB5b3VcbiAgOTY6XHRcdCAgdG8gY29tYmluZSBzZXZlcmFsIChsb2dpY2FsIG9yIHBoeXNpY2FsKSBsaW5lcyBpbnRvIG9uZSBsb2dpY2FsIFBQUFxuICA5NzpcdFx0ICBjb25uZWN0aW9uLCBzbyB0aGF0IHlvdSBjYW4gdXRpbGl6ZSB5b3VyIGZ1bGwgYmFuZHdpZHRoLlxuICA5ODpcdFxuICA5OTpcdFx0ICBUaGlzIGhhcyB0byBiZSBzdXBwb3J0ZWQgYXQgdGhlIG90aGVyIGVuZCBhcyB3ZWxsIGFuZCB5b3UgbmVlZCBhXG4gMTAwOlx0XHQgIHZlcnNpb24gb2YgdGhlIHBwcGQgZGFlbW9uIHdoaWNoIHVuZGVyc3RhbmRzIHRoZSBtdWx0aWxpbmsgcHJvdG9jb2wuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRlbHZpbmcgaW50byBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBQUFAgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHNldCB1cCwgd2hhdCB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgYW5kIGV4dGVuZGluZyB0aGUgbmV0d29ya2luZyBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTA1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMDM6XHRcbiAxMDQ6XHRjb25maWcgUFBQT0FUTVxuIDEwNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4gMTA2Olx0XHRkZXBlbmRzIG9uIEFUTVxuIDEwNzpcdFx0aGVscFxuIDEwODpcdFx0ICBTdXBwb3J0IFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGVuY2Fwc3VsYXRlZCBpbiBBVE0gZnJhbWVzLlxuIDEwOTpcdFx0ICBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCBjb21wbHkgd2l0aCBzZWN0aW9uIDggb2YgUkZDMjM2NCxcbiAxMTA6XHRcdCAgd2hpY2ggY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgaWYgdGhlIEFUTSBwZWVyIGxvc2VzIHN0YXRlIGFuZFxuIDExMTpcdFx0ICBjaGFuZ2VzIGl0cyBlbmNhcHN1bGF0aW9uIHVuaWxhdGVyYWxseS5cbiAxMTI6XHRcbiAxMTM6XHRjb25maWcgUFBQT1hcbiAxMTQ6XHRcdHRyaXN0YXRlXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIFBQUE9FXG4gMTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuIDExODpcdFx0c2VsZWN0IFBQUE9YXG4gMTE5Olx0XHRoZWxwXG4gMTIwOlx0XHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxuIDEyMTpcdFxuIDEyMjpcdFx0ICBUbyB3b3JrIGluIGNsaWVudCBtb2RlLCBwcHBkIHZlcnNpb24gMi40LjIgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuXG4gMTIzOlx0XHQgIFRvIHdvcmsgaW4gc2VydmVyIG1vZGUsIHRoZSBwcHBvZS1zZXJ2ZXIgY29tbWFuZCBmcm9tIHRoZSBSUC1QUFBvRVxuIDEyNDpcdFx0ICBwYWNrYWdlIGlzIGFsc28gcmVxdWlyZWQsIGF2YWlsYWJsZSBhdFxuIDEyNTpcdFx0ICBcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cdTAwM2UuXG4gMTI2Olx0XG4gMTI3Olx0Y2hvaWNlXG4gMTI4Olx0XHRwcm9tcHQgXCYjMzQ7TnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1wmIzM0O1xuIDEyOTpcdFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxuIDEzMDpcdFx0ZGVwZW5kcyBvbiBQUFBPRVxuIDEzMTpcdFx0aGVscFxuIDEzMjpcdFx0XHRTZWxlY3QgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIGhhc2hpbmcgUFBQb0UgaW50ZXJmYWNlcy5cbiAxMzM6XHRcbiAxMzQ6XHRcdFx0TGFyZ2VyIHNpemVzIHJlZHVjZXMgdGhlIHJpc2sgb2YgaGFzaCBjb2xsaXNpb25zIGF0IHRoZSBjb3N0XG4gMTM1Olx0XHRcdG9mIHNsaWdodGx5IGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UuXG4gMTM2Olx0XG4gMTM3Olx0XHRcdFRoaXMgaGFzaCB0YWJsZSBpcyBvbiBhIHBlciBvdXRlciBldGhlcm5ldCBpbnRlcmZhY2UuXG4gMTM4Olx0XG4gMTM5Olx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXG4gMTQwOlx0XHRib29sIFwmIzM0OzEgYml0ICgyIGJ1Y2tldHMpXCYjMzQ7XG4gMTQxOlx0XG4gMTQyOlx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXG4gMTQzOlx0XHRib29sIFwmIzM0OzIgYml0cyAoNCBidWNrZXRzKVwmIzM0O1xuIDE0NDpcdFxuIDE0NTpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxuIDE0NjpcdFx0Ym9vbCBcJiMzNDs0IGJpdHMgKDE2IGJ1Y2tldHMpXCYjMzQ7XG4gMTQ3Olx0XG4gMTQ4Olx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XG4gMTQ5Olx0XHRib29sIFwmIzM0OzggYml0cyAoMjU2IGJ1Y2tldHMpXCYjMzQ7XG4gMTUwOlx0XG4gMTUxOlx0ZW5kY2hvaWNlXG4gMTUyOlx0XG4gMTUzOlx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU1xuIDE1NDpcdFx0aW50XG4gMTU1Olx0XHRkZWZhdWx0IDEgaWYgUFBQT0VfSEFTSF9CSVRTXzFcbiAxNTY6XHRcdGRlZmF1bHQgMiBpZiBQUFBPRV9IQVNIX0JJVFNfMlxuIDE1NzpcdFx0ZGVmYXVsdCA0IGlmIFBQUE9FX0hBU0hfQklUU180XG4gMTU4Olx0XHRkZWZhdWx0IDggaWYgUFBQT0VfSEFTSF9CSVRTXzhcbiAxNTk6XHRcdGRlZmF1bHQgNFxuIDE2MDpcdFxuIDE2MTpcdGNvbmZpZyBQUFRQXG4gMTYyOlx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBJUHY0IChQUFRQKVwmIzM0O1xuIDE2MzpcdFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbiAxNjQ6XHRcdHNlbGVjdCBQUFBPWFxuIDE2NTpcdFx0aGVscFxuIDE2NjpcdFx0ICBTdXBwb3J0IGZvciBQUFAgb3ZlciBJUHY0LihQb2ludC10by1Qb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wpXG4gMTY3Olx0XG4gMTY4Olx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBwcGQgcGx1Z2luIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUgb3JcbiAxNjk6XHRcdCAgbW9kaWZpZWQgcHB0cGQgKHBvcHRvcCkgdG8gd29yayBpbiBzZXJ2ZXIgbW9kZS5cbiAxNzA6XHRcdCAgU2VlIGh0dHA6Ly9hY2NlbC1wcHRwLnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIGhvdyB0b1xuIDE3MTpcdFx0ICB1dGlsaXplIHRoaXMgbW9kdWxlLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBQUFBPTDJUUFxuIDE3NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgTDJUUFwmIzM0O1xuIDE3NTpcdFx0ZGVwZW5kcyBvbiBMMlRQXG4gMTc2Olx0XHRzZWxlY3QgUFBQT1hcbiAxNzc6XHRcdGhlbHBcbiAxNzg6XHRcdCAgU3VwcG9ydCBmb3IgUFBQLW92ZXItTDJUUCBzb2NrZXQgZmFtaWx5LiBMMlRQIGlzIGEgcHJvdG9jb2xcbiAxNzk6XHRcdCAgdXNlZCBieSBJU1BzIGFuZCBlbnRlcnByaXNlcyB0byB0dW5uZWwgUFBQIHRyYWZmaWMgb3ZlciBVRFBcbiAxODA6XHRcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXG4gMTgxOlx0aWYgVFRZXG4gMTgyOlx0XG4gMTgzOlx0Y29uZmlnIFBQUF9BU1lOQ1xuIDE4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuIDE4NTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzdGFuZGFyZFxuIDE4ODpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzdWNoIGFzIENPTTEgb3IgQ09NMiBvbiBhIFBDLiAgSWYgeW91IHVzZVxuIDE4OTpcdFx0ICBhIG1vZGVtIChub3QgYSBzeW5jaHJvbm91cyBvciBJU0ROIG1vZGVtKSB0byBjb250YWN0IHlvdXIgSVNQLCB5b3VcbiAxOTA6XHRcdCAgbmVlZCB0aGlzIG9wdGlvbi5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAxOTM6XHRcbiAxOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxOTU6XHRcbiAxOTY6XHRjb25maWcgUFBQX1NZTkNfVFRZXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcbiAyMDA6XHRcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0MwoJCQkJCQkJb3V0cHV0OiAzNjAKCQkJCQkJCXRob3VnaHRzOiA5NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUFBQIENoYW5uZWwgUmVmYWN0b3JpbmcgVmVyaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBQUFAgY2hhbm5lbCByZWZhY3RvcmluZywgZW5zdXJpbmcgdGhlIGNoYW5nZXMgYXJlIHNvdW5kIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBGaXJzdCwgSSYjMzk7bGwgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBQUFBgLCBgUFBQX0FTWU5DYCwgYFBQUF9TWU5DX1RUWWAsIGBQUFBPRWAsIGBQUFRQYCwgYFBQUE9BVE1gLCBgUFBQT0wyVFBgLCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcyBsaWtlIGBUVFlgLCBgQVRNYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgTDJUUGAuCgpOZXh0LCBJJiMzOTtsbCB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRob3NlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGxpbmcgdGhlIHJlZmFjdG9yZWQgb3BlcmF0aW9ucy4gSW4gYHBwcF9nZW5lcmljLmNgLCBJJiMzOTtsbCBsb29rIGF0IGBwcHBfaW9jdGxgLCBgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYHBwcF9wdXNoYCwgYHBwcF9tcF9leHBsb2RlYCwgYF9fcHBwX2NoYW5uZWxfcHVzaGAsIGFuZCBgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0YC4gVGhlbiwgaW4gYHBwcF9hc3luYy5jYCwgYHBwcF9hc3luY19pb2N0bGAgYW5kIGBwcHBfYXN5bmNfc2VuZGAuIFNpbWlsYXJseSwgaW4gYHBwcF9zeW5jdHR5LmNgLCBgcHBwX3N5bmNfaW9jdGxgIGFuZCBgcHBwX3N5bmNfc2VuZGA7IGluIGBwcHBvZS5jYCwgYHBwcG9lX3htaXRgIGFuZCBgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhgOyBpbiBgcHB0cC5jYCwgYHBwdHBfeG1pdGAgYW5kIGBwcHRwX3BwcF9pb2N0bGA7IGluIGBwcHBvYXRtLmNgLCBgcHBwb2F0bV9zZW5kYCBhbmQgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYDsgYW5kIGZpbmFsbHksIGluIGBsMnRwX3BwcC5jYCwgYHBwcG9sMnRwX3htaXRgLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXNlIGFyZSB0aGUgb25seSBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGUgY2hhbmdlLCBhbmQgdGhhdCB0aGUgY2hhbmdlIGlzIGFwcHJvcHJpYXRlbHkgbG9jYWxpemVkLiBUaGVzZSBhcmUgYWxsIHNwZWNpZmljLCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgaW1wbGVtZW50aW5nL2hhbmRsaW5nIHRoZSBQUFAgY2hhbm5lbCBvcGVyYXRpb25zIHRoYXQgd2VyZSByZWZhY3RvcmVkLgoKSSYjMzk7bGwgdGhlbiByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3Mgb25jZSBtb3JlIHRvIGVuc3VyZSBhbGwgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG5hbWVzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXggdG8gY29uZmlybSB0aGV5JiMzOTtyZSBhY2N1cmF0ZSBhbmQgY29uc2lzdGVudCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uCgpJJiMzOTtsbCBjb21waWxlIGEgY29tcGxldGUgbGlzdCBvZiAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IOKAkyBhbGwgdGhlIGZ1bmN0aW9ucyBpZGVudGlmaWVkIGFib3ZlIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIHBhcnQgb2YgdGhlIGludGVyZmFjZSByZWZhY3RvcmluZyDigJMgdG8gYmUgcmV2aWV3ZWQgaW4gZGVwdGg6IGBwcHBfYXN5bmNfaW9jdGxgLCBgcHBwX2FzeW5jX3NlbmRgLCBgcHBwX3N5bmNfaW9jdGxgLCBgcHBwX3N5bmNfc2VuZGAsIGBwcHBvZV94bWl0YCwgYHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYHBwdHBfeG1pdGAsIGBwcHRwX3BwcF9pb2N0bGAsIGBwcHBvYXRtX3NlbmRgLCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgLCBgcHBwb2wydHBfeG1pdGAsIGBwcHBfcHVzaGAsIGBwcHBfbXBfZXhwbG9kZWAsIGBfX3BwcF9jaGFubmVsX3B1c2hgLCBgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0YCwgYHBwcF9pb2N0bGAsIGFuZCBgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoYC4KCkNydWNpYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYWxsIHRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgaW4gLmMgZmlsZXMgYW5kIGFyZSBub24tc3RhdGljIChvciBhdCBsZWFzdCwgYXJlIHN0YXRpYyBmdW5jdGlvbnMgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgaGVuY2UgbmVlZGluZyBhZGRyZXNzZXMpLgoKSW4gY29uY2x1c2lvbiwgdGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIGludm9sdmVzIHJlZmFjdG9yaW5nIHRoZSBgcHBwX2NoYW5uZWxfb3BzYCBpbnRlcmZhY2UgdG8gcGFzcyB0aGUgY2hhbm5lbCYjMzk7cyBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBgcHBwX2dlbmVyaWNgLCBgcHBwX2FzeW5jYCwgYHBwcF9zeW5jdHR5YCwgYHBwcG9lYCwgYHBwdHBgLCBgcHBwb2F0bWAsIGFuZCBgbDJ0cF9wcHBgLiBUaGVzZSBjb21wb25lbnRzIGFyZSBrZXkgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBleHBvc2VkIHZpYSBzb2NrZXRzIGFuZCBgL2Rldi9wcHBgIGlvY3Rscy4gVGhlcmVmb3JlLCByaWdvcm91cyBmdXp6aW5nIGlzIHBhcmFtb3VudCB0byBkZXRlY3QgdHlwZSBzYWZldHkgaXNzdWVzLCByZWdyZXNzaW9ucywgYW5kIGVuc3VyZSB0aGF0IG5vIHVuZm9yZXNlZW4gYmVoYXZpb3JzIGFyZSBpbnRyb2R1Y2VkIGR1ZSB0byB0aGUgcmVmYWN0b3JpbmcuIE5vdyBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX0FTWU5DJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFBPRSYjMzQ7LAogICAgJiMzNDtQUFRQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7UFBQT0wyVFAmIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX2FzeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9hc3luY19zZW5kJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2VfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBvZV9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtwcHRwX3htaXQmIzM0OywKICAgICYjMzQ7cHB0cF9wcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fZGV2cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3htaXQmIzM0OywKICAgICYjMzQ7cHBwX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX21wX2V4cGxvZGUmIzM0OywKICAgICYjMzQ7X19wcHBfY2hhbm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9jaGFubmVsX2JyaWRnZV9pbnB1dCYjMzQ7LAogICAgJiMzNDtwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcHBwX2NoYW5uZWxfb3BzIGludGVyZmFjZSAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSB0byBwYXNzIHRoZSBjaGFubmVsIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiBwcHBfZ2VuZXJpYyBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgUFBQIGNoYW5uZWwgbW9kdWxlcyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIHBwcG9sMnRwKS4gVGhlc2UgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBwcm90b2NvbHMgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgL2Rldi9wcHAgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwcHBfY2hhbm5lbF9vcHMgaW50ZXJmYWNlIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIHRvIHBhc3MgdGhlIGNoYW5uZWwgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHBwcF9nZW5lcmljIGFzIHdlbGwgYXMgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBQUFAgY2hhbm5lbCBtb2R1bGVzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgcHBwb2wydHApLiBUaGVzZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHByb3RvY29scyBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXRzIGFuZCAvZGV2L3BwcCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgc2lnbmF0dXJlIHJlZmFjdG9yaW5nIGFjcm9zcyB0aGUgUFBQIHN1YnN5c3RlbTogYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrcyAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYXJlIHVwZGF0ZWQgdG8gYWNjZXB0IHRoZSBjaGFubmVsJiMzOTtzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlMjUxODliNmI4MDYwYzA0NGU1NjIxOGMyYTc3YTgzZTNmNWYwYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEyOjQyOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTsKICAqIFByb3RvdHlwZXMuCiAgKi8KIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogCiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLApAQCAtMzIxLDkgJiM0MzszMjAsOSBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJaW50IGVyciwgdmFsOwpAQCAtNTUwLDkgJiM0Mzs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9hc3luY19wdXNoKGFwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzkwLDcgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJCWVyciA9IC1FTk9UVFk7CiAJCQlpZiAoY2hhbiAmYW1wOyZhbXA7IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwpCi0JCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZyk7CiYjNDM7CQkJCWVyciA9IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwoY2hhbi0mZ3Q7cHJpdmF0ZSwgY21kLCBhcmcpOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGNoLSZndDtjaGFuX3NlbSk7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0xNjAzLDcgJiM0MzsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlpZiAoIWNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7CiYjNDM7CXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi0mZ3Q7cHJpdmF0ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7CkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKTsKJiM0MzsJCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBza2IpOwogCiBvdXQ6CiAJCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCS8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi8KIAkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtwY2gtJmd0O2ZpbGUueHEpIHx8Ci0JCQkhY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIGZyYWcpKQomIzQzOwkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbi0mZ3Q7cHJpdmF0ZSwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgZnJhZyk7CiAJCXBjaC0mZ3Q7aGFkX2ZyYWcgPSAxOwogCQlwICYjNDM7PSBmbGVuOwpAQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApCiAJaWYgKHBjaC0mZ3Q7Y2hhbikgewogCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkpIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cGNoLSZndDtmaWxlLnhxKTsKLQkJCWlmICghcGNoLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoLSZndDtjaGFuLCBza2IpKSB7CiYjNDM7CQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpIHsKIAkJCQkvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJCQlza2JfcXVldWVfaGVhZCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgc2tiKTsKIAkJCQlicmVhazsKQEAgLTIzMDAsNyAmIzQzOzIzMDAsNyBAQCBzdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtJmd0O2NoYW5fbmV0LCBwY2hiLSZndDtjaGFuX25ldCkpOwotCWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4sIHNrYikpCiYjNDM7CWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpCiAJCWtmcmVlX3NrYihza2IpOwogCiBvdXRsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAgewogICogUHJvdG90eXBlcy4KICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTsKQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC00OTEsOSAmIzQzOzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogICogYXQgc29tZSBsYXRlciB0aW1lLgogICovCiBzdGF0aWMgaW50Ci1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9zeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC04NDEsOSAmIzQzOzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tJmd0O3BwcG9lX2RldjsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKQEAgLTg5NSw5ICYjNDM7ODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsCi0JCQkJICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwppbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKQEAgLTE0Niw5ICYjNDM7MTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbywKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKIH0KIAotc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHB0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJmFtcDtwby0mZ3Q7cHJvdG8ucHB0cDsKQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybikKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsOwogc3RydWN0IHBwcF9jaGFubmVsX29wcyB7CiAJLyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuCiAJICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovCi0JaW50CSgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwomIzQzOwlpbnQJKCpzdGFydF94bWl0KSh2b2lkICosIHN0cnVjdCBza19idWZmICopOwogCS8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqLwotCWludAkoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKJiM0MzsJaW50CSgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAlpbnQJKCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKiwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKJiM0MzsJCQkJICAgICB2b2lkICopOwogfTsKIAogc3RydWN0IHBwcF9jaGFubmVsIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYykKIAlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLSZndDt1c2VyX2JhY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKLXsKLQlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi0mZ3Q7cHJpdmF0ZSk7Ci19Ci0KIC8qCiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZQogICogZG9lc24mIzM5O3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb20KQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpCiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy4KICAqLwogI2RlZmluZSBEUk9QX1BBQ0tFVCAxCi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7CiYjNDM7CXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgcmV0OwogCkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqLwotc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKJiM0MzsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUFBQSU9DR0ZMQUdTOgotCQlyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLSZndDtmbGFncywgKGludCBfX3VzZXIgKikgYXJnKQotCQkgICAgPyAtRUZBVUxUIDogMDsKJiM0MzsJCXJldHVybiBwdXRfdXNlcihwdmNjLSZndDtmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CiAJY2FzZSBQUFBJT0NTRkxBR1M6Ci0JCXJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIGdldF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gewogCXN0cnVjdCBzb2NrCQkqX19zazsJCS8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqLwogfTsKIAotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHsKIAkuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LApAQCAtMzI3LDkgJiM0MzszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwKICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5cwogICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci4KICAqLwotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7CiAJaW50IHVobGVuLCBoZWFkcm9vbTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgQ2hhbm5lbCBPcGVyYXRpb25zIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGZpcnN0LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHBhc3NlcyBgdm9pZCAqcHJpdmF0ZWAgaW5zdGVhZCBvZiBgc3RydWN0IHBwcF9jaGFubmVsICpgIHRvIGZ1bmN0aW9ucyBsaWtlIGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGAuIEl0IGFwcGVhcnMgdGhlIHJhdGlvbmFsZSBpcyB0byBzaW1wbGlmeSB0aGluZ3MgYnkgZGlyZWN0bHkgcHJvdmlkaW5nIHRoZSBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFubmVsLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gdXBkYXRlIGFsbCB0aGUgcmVsZXZhbnQgaW1wbGVtZW50YXRpb25zIGFjcm9zcyB0aGUgdmFyaW91cyBQUFAgZHJpdmVyczogYHBwcF9hc3luYy5jYCwgYHBwcF9nZW5lcmljLmNgLCBgcHBwX3N5bmN0dHkuY2AsIGBwcHBvZS5jYCwgYHBwdHAuY2AsIGBwcHBvYXRtLmNgLCBhbmQgYGwydHBfcHBwLmNgLiBXaXRoaW4gYHBwcF9nZW5lcmljLmNgLCB0aGUgcGF0Y2ggY29uc2lzdGVudGx5IHVwZGF0ZXMgY2FsbHMgbGlrZSBgY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZylgIHRvIGBjaGFuLSZndDtvcHMtJmd0O2lvY3RsKGNoYW4tJmd0O3ByaXZhdGUsIGNtZCwgYXJnKWAgYW5kIHNpbWlsYXIgc3Vic3RpdHV0aW9ucyBmb3IgdGhlIG90aGVyIGZ1bmN0aW9uIHBvaW50ZXJzLCBpbmNsdWRpbmcgdGhlIGBzdGFydF94bWl0YCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbnMuIEVhY2ggY2hhbm5lbCBpbXBsZW1lbnRhdGlvbiBhbHNvIHVwZGF0ZXMgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgdG8gbWF0Y2ggdGhpcyBuZXcgYHZvaWQgKnByaXZhdGVgIGFyZ3VtZW50LgoKTm93LCBteSBtYWluIGNvbmNlcm4gaXMgbWFraW5nIHN1cmUgdGhpcyBpcyBjb21wbGV0ZS4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCAqZXZlcnkqIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIHRyZWUgaGFzIGJlZW4gdXBkYXRlZCBjb3JyZWN0bHkuIEFueSBtaXNzZWQgaW5zdGFuY2Ugb3IgYSBtaXNhcHBsaWVkIGNoYW5nZSBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBncmVwIGFjcm9zcyB0aGUga2VybmVsIGZvciBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgdG8gZW5zdXJlIG5vIHN0cmF5IGltcGxlbWVudGF0aW9ucyBoYXZlIGJlZW4gb3Zlcmxvb2tlZCwgYW5kIHRoYXQgYWxsIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIFRoaXMgaXMgY3JpdGljYWwgZm9yIGNhdGNoaW5nIHBvdGVudGlhbCBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGNvdmVycyB0aGUgZW50aXJlIHN1cmZhY2UgYXJlYSBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfY2hhbm5lbF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMj1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDYtXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTg5PXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDUtXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDctXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9MjU9c3RydWN0IHBwcF9jaGFubmVsO1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI2LVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI4LVx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTM4PXN0cnVjdCBwcHBfY2hhbm5lbCB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMzktXHR2b2lkXHRcdCpwcml2YXRlO1x0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo0MDpcdGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsgLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXHRpbnRcdFx0bXR1O1x0XHQvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNjQ9c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OS1cdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTI1PXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEyOC1cdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDcKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogNzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gZm9yIFBQUCBDaGFubmVsIENhbGxiYWNrIFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCBhbmQgdXBkYXRlZCBldmVyeSBzaW5nbGUgYHBwcF9jaGFubmVsX29wc2AgaW5zdGFuY2UgaW4gdGhlIGtlcm5lbC4gTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMgYmFzZWQgb24gdGhlIEtNU0FOIGd1aWRlbGluZXMuIFJlbWVtYmVyLCB0aGUgcnVsZSBpcyBjbGVhcjogS01TQU4gaXMgYSByZXNvdXJjZSBob2cuIFdlIG9ubHkgdXNlIGl0IGlmIEtBU0FOIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMgKmNhbiYjMzk7dCogY2F0Y2ggYSBwb3RlbnRpYWwgaXNzdWUuIEl0JiMzOTtzIGZvciB0aG9zZSBpbnNpZGlvdXMsIHNpbGVudCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvci4KClRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IHNwZWNpZmljOiBpcyB0aGUgcGF0Y2ggdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzPwoKSW4gdGhpcyBjYXNlLCB0aGlzIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3Jpbmcgb2YgUFBQIGNoYW5uZWwgY2FsbGJhY2sgc2lnbmF0dXJlcy4gV2UmIzM5O3JlIGNoYW5naW5nIHRoZSBjYWxsIHN0cnVjdHVyZSBmcm9tIGBjaGFuLSZndDtvcHMtJmd0O2Z1bmMoY2hhbiwgLi4uKWAgd2l0aCB0aGUgaW50ZXJuYWwgcmV0cmlldmFsIG9mIGBhcCA9IGNoYW4tJmd0O3ByaXZhdGVgIHRvIHNpbXBseSBwYXNzaW5nIGBjaGFuLSZndDtwcml2YXRlYCBkaXJlY3RseSB0byBgY2hhbi0mZ3Q7b3BzLSZndDtmdW5jKGNoYW4tJmd0O3ByaXZhdGUsIC4uLilgLiBUaGF0JiMzOTtzIGl0LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bjoKCiogICBBcmUgd2UgaW50cm9kdWNpbmcgb3IgbW9kaWZ5aW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLiBUaGUgYGNoYW4tJmd0O3ByaXZhdGVgIGRhdGEgaXMgYWxyZWFkeSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCB1c2VkIGFzIG5lZWRlZCwgYW5kIHRoZXJlJiMzOTtzIG5vIGNoYW5nZSB0byB3aGF0JiMzOTtzICpzZW50KiB0byB1c2Vyc3BhY2UuIEZvciBleGFtcGxlLCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgIHN0aWxsIGZ1bmN0aW9ucyBhcyBpdCBkaWQuCiogICBBcmUgdGhlcmUgYW55IG5ldyBjb25kaXRpb25hbHMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4gYGNoYW4tJmd0O3ByaXZhdGVgIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb24gY2hhbm5lbCByZWdpc3RyYXRpb24uIEl0IHdhcyBhbHJlYWR5IGJlaW5nIGRlcmVmZXJlbmNlZCBpbnNpZGUgZWFjaCBjYWxsYmFjayBwcmlvciB0byB0aGlzIGNoYW5nZS4KKiAgIEFyZSB3ZSBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBhdCBhbGwuCiogICBBcmUgd2UgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBObyBhZ2Fpbi4KCk9uIHRoZSBmbGlwIHNpZGUsIHdlIGtub3cgd2UgKmRvbiYjMzk7dCogbmVlZCBLTVNBTiBpZiB0aGUgY2hhbmdlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSDigJMgdGhpbmdzIEtBU0FOIGFuZCBmcmllbmRzIGhhbmRsZSBwZXJmZWN0bHkgd2VsbC4gVGhlIGNvZGUgZG9lc24mIzM5O3QgdG91Y2ggdGhvc2UgaXNzdWVzLiBXZSYjMzk7cmUgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdGhhdCBhcmVuJiMzOTt0IGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAodXNpbmcgdGhlIHN0YW5kYXJkIHByYWN0aWNlcykuIFRoZSBwYXRjaCBhYnNvbHV0ZWx5IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLgoKT2theSwgbGV0JiMzOTtzIGRvIGEgcXVpY2sgZmluYWwgcnVuLXRocm91Z2ggdG8gbWFrZSBpdCBhbGwgY3J5c3RhbCBjbGVhcjoKMS4gIFRoZSBwYXRjaCByZWZhY3RvcnMgUFBQIGNoYW5uZWwgY2FsbGJhY2tzIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGBmaWxsX2ZvcndhcmRfcGF0aGApIHRvIHJlY2VpdmUgYGNoYW4tJmd0O3ByaXZhdGVgIChgdm9pZCAqYCkgaW5zdGVhZCBvZiBgc3RydWN0IHBwcF9jaGFubmVsICpgLgoyLiAgVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsL3NpZ25hdHVyZSByZWZhY3RvcmluZywgd2l0aCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgaW5pdGlhbGl6YXRpb24sIG1lbW9yeSBjb3B5IGJvdW5kcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS4KMy4gIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlc3VsdGluZyBmcm9tIHBvaW50ZXIgbWlzbWF0Y2hlcyBvciBOVUxMIHBvaW50ZXJzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHR5cGUgY29uZnVzaW9uIGlmIGFueSkuCjQuICBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2sgdmFyaWFibGVzLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocyBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGNyZWF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb2ludGVyLXJlbGF0ZWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2sgdmFyaWFibGVzLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocyBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGNyZWF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb2ludGVyLXJlbGF0ZWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQyOjUwLjI5NDgwNTcxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTgwNTEwMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0FTWU5DXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUE9FXCIsXG4gICAgXCJQUFRQXCIsXG4gICAgXCJQUFBPQVRNXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJMMlRQXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfYXN5bmNfaW9jdGxcIixcbiAgICBcInBwcF9hc3luY19zZW5kXCIsXG4gICAgXCJwcHBfc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwb2VfeG1pdFwiLFxuICAgIFwicHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwdHBfeG1pdFwiLFxuICAgIFwicHB0cF9wcHBfaW9jdGxcIixcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9kZXZwcHBfaW9jdGxcIixcbiAgICBcInBwcG9sMnRwX3htaXRcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfbXBfZXhwbG9kZVwiLFxuICAgIFwiX19wcHBfY2hhbm5lbF9wdXNoXCIsXG4gICAgXCJwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRcIixcbiAgICBcInBwcF9pb2N0bFwiLFxuICAgIFwicHBwX2ZpbGxfZm9yd2FyZF9wYXRoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBwcF9jaGFubmVsX29wcyBpbnRlcmZhY2UgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgdG8gcGFzcyB0aGUgY2hhbm5lbCBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4gcHBwX2dlbmVyaWMgYXMgd2VsbCBhcyBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIFBQUCBjaGFubmVsIG1vZHVsZXMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBwcHBvbDJ0cCkuIFRoZXNlIG5ldHdvcmtpbmcgZHJpdmVycyBhbmQgcHJvdG9jb2xzIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldHMgYW5kIC9kZXYvcHBwIGlvY3RscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0Mjo1MC4yOTQ4MjE1MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzg5OTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJlMjUxODliNmI4MDYwYzA0NGU1NjIxOGMyYTc3YTgzZTNmNWYwYjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxMjo0Mjo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lNzNiMGZjZTg2YjkxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbkBAIC05MSwxMyArOTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcXG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xcbitzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxcbiBcXHRcXHRcXHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG4rc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbiBcXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG5AQCAtMzIxLDkgKzMyMCw5IEBAIHBwcF9hc3luY19pbml0KHZvaWQpXFxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxcbiAgKi9cXG4gc3RhdGljIGludFxcbi1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4rcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuLVxcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XFxuIFxcdGludCBfX3VzZXIgKnAgPSBhcmdwO1xcbiBcXHRpbnQgZXJyLCB2YWw7XFxuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFxuIFxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtNzkwLDcgKzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdFxcdGNoYW4gPSBwY2gtXFx1MDAzZWNoYW47XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9UVFk7XFxuIFxcdFxcdFxcdGlmIChjaGFuIFxcdTAwMjZcXHUwMDI2IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpXFxuLVxcdFxcdFxcdFxcdGVyciA9IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwoY2hhbiwgY21kLCBhcmcpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWlvY3RsKGNoYW4tXFx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWNoYW5fc2VtKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTYwMyw3ICsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0aWYgKCFjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4pO1xcbitcXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xcbkBAIC0xOTMyLDcgKzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXQgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcXG4rXFx0XFx0cmV0ID0gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYik7XFxuIFxcbiBvdXQ6XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWRvd25sKTtcXG5AQCAtMjE0Miw3ICsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdC8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi9cXG4gXFx0XFx0Y2hhbiA9IHBjaC1cXHUwMDNlY2hhbjtcXG4gXFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkgfHxcXG4tXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcXG4rXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLVxcdTAwM2Vwcml2YXRlLCBmcmFnKSlcXG4gXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSwgZnJhZyk7XFxuIFxcdFxcdHBjaC1cXHUwMDNlaGFkX2ZyYWcgPSAxO1xcbiBcXHRcXHRwICs9IGZsZW47XFxuQEAgLTIxNzUsNyArMjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdGlmIChwY2gtXFx1MDAzZWNoYW4pIHtcXG4gXFx0XFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkpIHtcXG4gXFx0XFx0XFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSk7XFxuLVxcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLCBza2IpKSB7XFxuK1xcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLVxcdTAwM2Vwcml2YXRlLCBza2IpKSB7XFxuIFxcdFxcdFxcdFxcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xcbiBcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2cGNoLVxcdTAwM2VmaWxlLnhxLCBza2IpO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC1cXHUwMDNlY2hhbl9uZXQsIHBjaGItXFx1MDAzZWNoYW5fbmV0KSk7XFxuLVxcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4sIHNrYikpXFxuK1xcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYikpXFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXG4gb3V0bDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XFxuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcXG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuK3BwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuLVxcdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuK1xcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XFxuIFxcdGludCBlcnIsIHZhbDtcXG4gXFx0dTMyIGFjY21bOF07XFxuIFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuK3BwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xcbiBcXG4gXFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuQEAgLTg0MSw5ICs4NDEsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XFxuICAqXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XFxuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxcbi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgKnByaXZhdGUpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcXG4gXFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcXHUwMDI2cG8tXFx1MDAzZXByb3RvLnBwdHA7XFxuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXFx1MDAyNnBvLVxcdTAwM2Vwcm90by5wcHRwO1xcbiBcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcXG4gc3RydWN0IHBwcF9jaGFubmVsX29wcyB7XFxuIFxcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxcbiBcXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cXG4tXFx0aW50XFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxuK1xcdGludFxcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG4gXFx0LyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgdGhhdCBoYXMgY29tZSBpbiB2aWEgL2Rldi9wcHAuICovXFxuLVxcdGludFxcdCgqaW9jdGwpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xcbitcXHRpbnRcXHQoKmlvY3RsKSh2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XFxuIFxcdGludFxcdCgqZmlsbF9mb3J3YXJkX3BhdGgpKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICosXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcXG4rXFx0XFx0XFx0XFx0ICAgICB2b2lkICopO1xcbiB9O1xcbiBcXG4gc3RydWN0IHBwcF9jaGFubmVsIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLXtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXFxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cXG5AQCAtMjg2LDkgKzI4MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxcbiAgKi9cXG4gI2RlZmluZSBEUk9QX1BBQ0tFVCAxXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XFxuK1xcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XFxuIFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbitcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xcbitcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuLVxcdFxcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuLVxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbitcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xcbiBcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4tXFx0XFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4tXFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuK1xcdFxcdHJldHVybiBnZXRfdXNlcihwdmNjLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NFxcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XFxuIFxcdHN0cnVjdCBzb2NrXFx0XFx0Kl9fc2s7XFx0XFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XFxuIFxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuQEAgLTMyNyw5ICszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4gICogdGhlIHNrYiBpdCBzdXBwbGllZCwgbm90IG91ciBjbG9uZWQgc2tiLiBTbyB3ZSB0YWtlIGNhcmUgdG8gYWx3YXlzXFxuICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuXFxuICAqL1xcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xcbiBcXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDtcXG4gXFx0aW50IHVobGVuLCBoZWFkcm9vbTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDI6NTAuNzI5NzIwOTc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA5OTkyMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9BU1lOQ1wiLFxuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBPRVwiLFxuICAgIFwiUFBUUFwiLFxuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiUFBQT0wyVFBcIixcbiAgICBcIkFUTVwiLFxuICAgIFwiTDJUUFwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX2FzeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBfYXN5bmNfc2VuZFwiLFxuICAgIFwicHBwX3N5bmNfaW9jdGxcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIixcbiAgICBcInBwcG9lX3htaXRcIixcbiAgICBcInBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHRwX3htaXRcIixcbiAgICBcInBwdHBfcHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fZGV2cHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvbDJ0cF94bWl0XCIsXG4gICAgXCJwcHBfcHVzaFwiLFxuICAgIFwicHBwX21wX2V4cGxvZGVcIixcbiAgICBcIl9fcHBwX2NoYW5uZWxfcHVzaFwiLFxuICAgIFwicHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0XCIsXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9maWxsX2ZvcndhcmRfcGF0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcHBwX2NoYW5uZWxfb3BzIGludGVyZmFjZSAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSB0byBwYXNzIHRoZSBjaGFubmVsIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiBwcHBfZ2VuZXJpYyBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgUFBQIGNoYW5uZWwgbW9kdWxlcyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIHBwcG9sMnRwKS4gVGhlc2UgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBwcm90b2NvbHMgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgL2Rldi9wcHAgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmUyNTE4OWI2YjgwNjBjMDQ0ZTU2MjE4YzJhNzdhODNlM2Y1ZjBiMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTI6NDI6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuQEAgLTkxLDEzICs5MSwxMiBAQCBNT0RVTEVfQUxJQVNfTERJU0MoTl9QUFApO1xuICAqIFByb3RvdHlwZXMuXG4gICovXG4gc3RhdGljIGludCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApO1xuLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxuIFx0XHRcdCAgICBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbiBcbiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuQEAgLTMyMSw5ICszMjAsOSBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKVxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbkBAIC01NTAsOSArNTQ5LDkgQEAgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3BwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX2FzeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbkBAIC03OTAsNyArNzkwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdFx0ZXJyID0gLUVOT1RUWTtcbiBcdFx0XHRpZiAoY2hhbiBcdTAwMjZcdTAwMjYgY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpXG4tXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZyk7XG4rXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLVx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWNoYW5fc2VtKTtcbiBcdFx0fVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0aWYgKCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7XG4rXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuQEAgLTE5MzIsNyArMTkzMiw3IEBAIHBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyZXQgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYik7XG4rXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpO1xuIFxuIG91dDpcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbkBAIC0yMTQyLDcgKzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqL1xuIFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuLVx0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxuK1x0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4tXHUwMDNlcHJpdmF0ZSwgZnJhZykpXG4gXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIGZyYWcpO1xuIFx0XHRwY2gtXHUwMDNlaGFkX2ZyYWcgPSAxO1xuIFx0XHRwICs9IGZsZW47XG5AQCAtMjE3NSw3ICsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbiBcdGlmIChwY2gtXHUwMDNlY2hhbikge1xuIFx0XHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkpIHtcbiBcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSk7XG4tXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuK1x0XHRcdGlmICghcGNoLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSkge1xuIFx0XHRcdFx0LyogcHV0IHRoZSBwYWNrZXQgYmFjayBhbmQgdHJ5IGFnYWluIGxhdGVyICovXG4gXHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgc2tiKTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTIzMDAsNyArMjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVx1MDAzZWNoYW5fbmV0LCBwY2hiLVx1MDAzZWNoYW5fbmV0KSk7XG4tXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4sIHNrYikpXG4rXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSlcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gb3V0bDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtODEsOSArODEsOCBAQCBzdHJ1Y3Qgc3luY3BwcCB7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuQEAgLTMxMiw5ICszMTEsOSBAQCBwcHBfc3luY19pbml0KHZvaWQpXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4rcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5AQCAtNDkxLDkgKzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfc3luY19wdXNoKGFwKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCBiZjc0MTRiNDZhMjYwLi43NTg0NTM1MDM1MjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtODQxLDkgKzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHNlbmRzIFBQUCBmcmFtZSBvdmVyIFBQUG9FIHNvY2tldFxuICAqXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLXN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXHRzdHJ1Y3QgcHBwb2VfaGRyICpwaDtcbkBAIC04OTUsOSArODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuK1x0XHRcdFx0ICAgdm9pZCAqcHJpdmF0ZSlcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcbiBcdHJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfcHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcbiBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHtcbiBcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxuIFx0ICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovXG4tXHRpbnRcdCgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopO1xuK1x0aW50XHQoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gXHQvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi9cbi1cdGludFx0KCppb2N0bCkoc3RydWN0IHBwcF9jaGFubmVsICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4rXHRpbnRcdCgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiBcdGludFx0KCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4rXHRcdFx0XHQgICAgIHZvaWQgKik7XG4gfTtcbiBcbiBzdHJ1Y3QgcHBwX2NoYW5uZWwge1xuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbiBcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4te1xuLVx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4tfVxuLVxuIC8qXG4gICogV2UgY2FuJ3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cbkBAIC0yODYsOSArMjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXG4gICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJ3JlIHJlYWxseSBkb2luZy5cbiAgKi9cbiAjZGVmaW5lIERST1BfUEFDS0VUIDFcbi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG5AQCAtMzY2LDE2ICszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuK1x0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbitcbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFBQUElPQ0dGTEFHUzpcbi1cdFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIHB1dF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4tXHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4rXHRcdHJldHVybiBnZXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDtcbiBcdH1cbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZWY4ZmRmYWYwNTFkNC4uYzFjZGExZDdmYmY2YiAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbisrKyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24ge1xuIFx0c3RydWN0IHNvY2tcdFx0Kl9fc2s7XHRcdC8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqL1xuIH07XG4gXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xuIFx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbkBAIC0zMjcsOSArMzI3LDkgQEAgc3RhdGljIGludCBwcHBvbDJ0cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogdGhlIHNrYiBpdCBzdXBwbGllZCwgbm90IG91ciBjbG9uZWQgc2tiLiBTbyB3ZSB0YWtlIGNhcmUgdG8gYWx3YXlzXG4gICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci5cbiAgKi9cbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7XG4gXHRpbnQgdWhsZW4sIGhlYWRyb29tO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDI6NTAuNzI5NzIyODU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3MzMyMTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpdHMgZnV6emluZyBwb3RlbnRpYWwgYW5kIGhvdyB0byBiZXN0IGFwcHJvYWNoIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLCBhbmQgaWYgc28sIHdoYXQgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMgd291bGQgYmUgbW9zdCBlZmZlY3RpdmUuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgYHBwcGAgcmVsYXRlZCBmaWxlczogYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYGluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaGAsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFNvLCBpdCdzIGRlZmluaXRlbHkgc3ByZWFkaW5nIGFjcm9zcyB0aGUgUFBQIHN0YWNrLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGFsdGVyaW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2YgYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgYmVpbmcgdHdlYWtlZC4gVGhleSdyZSBjaGFuZ2luZyBmcm9tIHRha2luZyBhIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0byB0YWtpbmcgYSBgdm9pZCAqYCBpbnN0ZWFkLlxuXG5UaGlzIGFsc28gbWVhbnMgY29ycmVzcG9uZGluZyB1cGRhdGVzIGluIHRoZSBjYWxsZXIgc2l0ZXMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBub3cgcGFzc2luZyBgY2hhbi1cdTAwM2Vwcml2YXRlYCB0byB0aGVzZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBgY2hhbmAgaXRzZWxmIGluIGBwcHBfZ2VuZXJpYy5jYC4gQWxyaWdodCwgc28gdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgYWxzbyB1cGRhdGVkOiBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9hc3luY19zZW5kYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwcF9zeW5jX3NlbmRgLCBgcHBwb2VfeG1pdGAsIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHRwX3htaXRgLCBgcHB0cF9wcHBfaW9jdGxgLCBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCBhbmQgYHBwcG9sMnRwX3htaXRgIGFyZSBhbGwgYmVpbmcgdG91Y2hlZC5cblxuTm93LCBiZWZvcmUgSSBkZWNpZGUgb24gYSBmdXp6aW5nIHN0cmF0ZWd5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYSBjb21wcmVoZW5zaXZlIGNoYW5nZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgZW50aXJlIGNvZGViYXNlIHRvIHZlcmlmeSB0aGF0IG5vIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiBgcHBwX2NoYW5uZWxfb3BzYCBoYXZlIGJlZW4gbWlzc2VkLiBHb3R0YSB1c2UgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBlbHNlIHBvcHMgdXAhIEknbSBob3BpbmcgdGhpcyBpcyBhIGNvbXBsZXRlIGFuZCBjbGVhbiByZWZhY3RvciwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgdGhvcm91Z2ggY2hlY2suIFRoZW4gaXQncyB0aW1lIHRvIGNvbXBpbGUgaXQgYW5kIGNvbmZpcm0gaXQgYWxsIHdvcmtzIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjAxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDI6NTUuMDAzMDQ5NjE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzM2ODA3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQyOjU2Ljg3NjczNjM5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NzI2NDM0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgUFBQL1BQUG9FIFByb3RvY29scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBndWlkZWxpbmVzIGNsZWFybHkgc3RhdGUgSSBjYW4ndCBqdXN0IHdhdmUgb2ZmIGFueSBtb2RpZmljYXRpb24sIGV2ZW4gaWYgaXQncyBsYWJlbGVkIFwibm8gZnVuY3Rpb25hbCBjaGFuZ2VcIiBvciBcInJlZmFjdG9yaW5nXCIuICBJZiB0aGUgY29kZSBpcyB0b3VjaGVkIGFuZCBleGVjdXRhYmxlLCBpdCAqbXVzdCogYmUgZnV6emVkLiBBbmQgdGhlc2UgUFBQIGFuZCBQUFBvRSBwcm90b2NvbHMsIGFsb25nIHdpdGggdGhlaXIgdmFyaWF0aW9ucyAoUFBUUCwgUFBQb0wyVFAsIFBQUG9BVE0sIHBwcF9hc3luYywgcHBwX3N5bmN0dHkpLCBhcmUgZGVmaW5pdGVseSB3aXRoaW4gc2NvcGUuIFRoZXkgYXJlIHN0YW5kYXJkIG5ldHdvcmtpbmcgcHJvdG9jb2xzL2RyaXZlcnMuICBUaGV5J3JlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgYC9kZXYvcHBwYCBpb2N0bHMg4oCTIHRoYXQncyBhIGRpcmVjdCBlbnRyeSBwb2ludCwgc28gV29ydGhGdXp6aW5nIGlzIGFic29sdXRlbHkgYHRydWVgLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBmdXp6aW5nLCBJIG5lZWQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudDogSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXNlIGZpbGVzIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyAoc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGVgLCBgbmV0L2F0bS9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvTWFrZWZpbGVgKSBhbmQgZ3JlcCBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYG5ldC9hdG0vcHBwb2F0bS5jYCwgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gT25jZSBJIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gcmVnYXJkaW5nIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjAwLjY0OTM4MjAxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM1OTQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QUFApICs9IHBwcF9nZW5lcmljLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUFBQX0FTWU5DKSArPSBwcHBfYXN5bmMub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS04LW9iai0kKENPTkZJR19QUFBfQlNEQ09NUCkgKz0gYnNkX2NvbXAub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19QUFBfREVGTEFURSkgKz0gcHBwX2RlZmxhdGUub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUFBQX01QUEUpICs9IHBwcF9tcHBlLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgKz0gcHBwX3N5bmN0dHkub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT1gpICs9IHBwcG94Lm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1BQUE9FKSArPSBwcHBvZS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19QUFRQKSArPSBwcHRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MDAuNzAxNzQ4MDc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4MzM5NTY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgQnVpbGQgQ29uZmlndXJhdGlvbnMgZm9yIEFUTSBhbmQgTDJUUCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYG5ldC9hdG0vTWFrZWZpbGVgIGFuZCBgbmV0L2wydHAvTWFrZWZpbGVgIGZpbGVzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLCBhbmQsIGltcGxpY2l0bHksIGhvdyB0aGV5J3JlICppbnRlZ3JhdGVkKi4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBuZXR3b3JrIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgYW55IG51YW5jZXMgdGhhdCBleGlzdCBpbiB0aGVpciBidWlsZCBzZXR1cC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2sgYnVpbGQgc3RyYXRlZ3kgdG9vLiBBbnkgaW50ZXJlc3RpbmcgZGlyZWN0aXZlcyB0aGVyZSB3aWxsIGJlIGEgYm9udXMhIEkgZXhwZWN0IHRoZXNlIGZpbGVzIHRvIHJldmVhbCBtdWNoIGFib3V0IG1vZHVsZSBvcHRpb25zLCBwZXJoYXBzIGV4cG9zaW5nIHdoZXRoZXIgcGFydGljdWxhciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgaG93IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHRpbWUgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTA5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MDIuODg1MTQ2MjExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDM0NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzowMi45MzUxODY5MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjMyMjY4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTDJUUCBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L2wydHAvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIEwyVFAgbW9kdWxlIGlzIGRlZmluZWQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgcHV0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWxkIG9wdGlvbnMsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgdmVyc2lvbnMgb3IgY29uZmlnIGZsYWdzLCBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYXJlYXMgcmlwZSBmb3Igb3B0aW1pemF0aW9uIG9yIHJlZmFjdG9yaW5nLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBkZXBlbmRlbmNpZXMg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBUaW1lIHRvIGdldCBkb3duIGluIHRoZSB3ZWVkcyBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIE1ha2VmaWxlIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjA3LjU2NzQ1OTQ3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzIxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibDJ0cF9wcHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvTWFrZWZpbGU9OD1DRkxBR1NfbDJ0cF9jb3JlLm8gKz0gLUkkKHNyYylcXG4tLVxcbm5ldC9sMnRwL01ha2VmaWxlLTEwLSMgQnVpbGQgbDJ0cCBhcyBtb2R1bGVzIGlmIEwyVFAgaXMgTVxcbm5ldC9sMnRwL01ha2VmaWxlOjExOm9iai0kKHN1YnN0IHksJChDT05GSUdfTDJUUCksJChDT05GSUdfUFBQT0wyVFApKSArPSBsMnRwX3BwcC5vXFxubmV0L2wydHAvTWFrZWZpbGUtMTItb2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19MMlRQX0lQKSkgKz0gbDJ0cF9pcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjA3LjYxNDMwMDM5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDAwMjIwMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZHMgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKktjb25maWcgRGl2ZSBmb3IgUFBQIENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFBQUCAoUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wpIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMgcHJvamVjdC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHZhcmlvdXMgUFBQIHN1Yi1wcm90b2NvbHMgYW5kIGltcGxlbWVudGF0aW9ucy4gTXkgdGFyZ2V0IGxpc3QgaXM6IGBQUFBgLCBgUFBQX0FTWU5DYCwgYFBQUF9TWU5DX1RUWWAsIGBQUFBPRWAsIGBQUFRQYCwgYFBQUE9BVE1gLCBhbmQgYFBQUE9MMlRQYC5cblxuTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZWZmaWNpZW50bHkgZGV0ZXJtaW5lIHdoZXJlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGxpdmUgd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gTm8gbmVlZCB0byBnbyBodW50aW5nIG1hbnVhbGx5IOKAkyBhIGBncmVwYCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGlzIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCB0byBsb2NhdGUgYW5kIHBpbnBvaW50IHdoZXJlIGVhY2ggb2YgdGhvc2Ugc3ltYm9scyBpcyBkZWZpbmVkLiBUaGF0IHNob3VsZCBxdWlja2x5IGV4cG9zZSBhbnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG90ZW50aWFsIGJ1aWxkIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBkaWZmZXJlbnQgUFBQIHZhcmlhdGlvbnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBhZmZlY3RzIHdoZXRoZXIgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyBob3cgdGhlc2Ugb3B0aW9ucyBmaXQgdG9nZXRoZXIgYW5kIHVsdGltYXRlbHkgaG93IHRoZSBzeXN0ZW0gc3VwcG9ydHMgYW5kIGVuYWJsZXMgdGhlIGRpZmZlcmVudCBQUFAgY29tbXVuaWNhdGlvbiBtZXRob2RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OSwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjExLjAxNDUyMzE5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0Njc2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChQUFB8UFBQX0FTWU5DfFBQUF9TWU5DX1RUWXxQUFBPRXxQUFRQfFBQUE9BVE18UFBQT0wyVFApXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTExMz1jb25maWcgUFBQT1hcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBFdGhlcm5ldFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1Mz1jb25maWcgUFBQT0VfSEFTSF9CSVRTXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjAtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYxOmNvbmZpZyBQUFRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTYyLVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBJUHY0IChQUFRQKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgxPWlmIFRUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoxMS4wNjk5OTU2NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2NDE3Mjc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGVzZSBLY29uZmlnIGVudHJpZXMgaGlnaGxpZ2h0ZWQsIGFuZCBteSBmaXJzdCBtb3ZlIGlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgdGhlc2Ugc2V0dGluZ3MuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBhbHdheXMgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb250ZXh0IOKAkyBhIGZldyBsaW5lcyBhYm92ZSBhbmQgYmVsb3cgZWFjaCBoaWdobGlnaHRlZCBlbnRyeSDigJMgc3BlY2lmaWNhbGx5IHNlYXJjaGluZyBmb3IgYW55IFwiZGVwZW5kcyBvblwiIHN0YXRlbWVudHMuIFRob3NlIGRlcGVuZGVuY2llcyBhcmUgdGhlIGtleTsgdGhleSdsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgKG9yIGRpc2FibGVkKSBmb3IgdGhlc2UgcGFydGljdWxhciBzZXR0aW5ncyB0byBldmVuIGJlIGNvbnNpZGVyZWQsIG9yIHRvIHdvcmsgY29ycmVjdGx5LiBJdCdzIHRoZSBiZXN0IGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MTIuOTM0MTcwNjE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG4gIDQxOlxcdFxcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xcbiAgNDI6XFx0XFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXFxuICA0MzpcXHRcXHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXFxuICA0NDpcXHRcXHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbid0IHN1cHBvcnQgaXQsXFxuICA0NTpcXHRcXHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0ICBUaGUgUFBQIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIChcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiLFxcbiAgNDg6XFx0XFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcXG4gIDQ5OlxcdFxcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgQlNEIGNvbXByZXNzaW9uIGNvZGUgd2lsbCBhbHdheXMgYmUgY29tcGlsZWQgYXMgYVxcbiAgNTI6XFx0XFx0ICBtb2R1bGU7IGl0IGlzIGNhbGxlZCBic2RfY29tcCBhbmQgd2lsbCBzaG93IHVwIGluIHRoZSBkaXJlY3RvcnlcXG4gIDUzOlxcdFxcdCAgbW9kdWxlcyBvbmNlIHlvdSBoYXZlIHNhaWQgXFxcIm1ha2UgbW9kdWxlc1xcXCIuIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1NDpcXHRcXG4gIDU1OlxcdGNvbmZpZyBQUFBfREVGTEFURVxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBEZWZsYXRlIGNvbXByZXNzaW9uXFxcIlxcbiAgNTc6XFx0XFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbiAgNTg6XFx0XFx0c2VsZWN0IFpMSUJfREVGTEFURVxcbiAgNTk6XFx0XFx0aGVscFxcbiAgNjA6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlcyB0aGVcXG4gIDYxOlxcdFxcdCAgRGVmbGF0ZSBhbGdvcml0aG0gKHRoZSBzYW1lIGFsZ29yaXRobSB0aGF0IGd6aXAgdXNlcykgdG8gY29tcHJlc3NcXG4gIDYyOlxcdFxcdCAgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpcyBzZW50IG92ZXIgdGhlIHdpcmUuICBUaGUgbWFjaGluZSBhdCB0aGVcXG4gIDYzOlxcdFxcdCAgb3RoZXIgZW5kIG9mIHRoZSBQUFAgbGluayAodXN1YWxseSB5b3VyIElTUCkgaGFzIHRvIHN1cHBvcnQgdGhlXFxuICA2NDpcXHRcXHQgIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiAgRXZlbiBpZlxcbiAgNjU6XFx0XFx0ICB0aGV5IGRvbid0IHN1cHBvcnQgaXQsIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgUFBQX0ZJTFRFUlxcbiAgNzA6XFx0XFx0Ym9vbCBcXFwiUFBQIGZpbHRlcmluZ1xcXCJcXG4gIDcxOlxcdFxcdGhlbHBcXG4gIDcyOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGUgcGFja2V0cyBwYXNzaW5nIG92ZXJcXG4gIDczOlxcdFxcdCAgUFBQIGludGVyZmFjZXMuICBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGljaCBwYWNrZXRzIGNvdW50IGFzXFxuICA3NDpcXHRcXHQgIGFjdGl2aXR5IChpLmUuIHdoaWNoIHBhY2tldHMgd2lsbCByZXNldCB0aGUgaWRsZSB0aW1lciBvciBicmluZyB1cFxcbiAgNzU6XFx0XFx0ICBhIGRlbWFuZC1kaWFsZWQgbGluaykgYW5kIHdoaWNoIHBhY2tldHMgYXJlIHRvIGJlIGRyb3BwZWQgZW50aXJlbHkuXFxuICA3NjpcXHRcXHQgIFlvdSBuZWVkIHRvIHNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBwYXNzLWZpbHRlciBhbmRcXG4gIDc3OlxcdFxcdCAgYWN0aXZlLWZpbHRlciBvcHRpb25zIHRvIHBwcGQuXFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDgwOlxcdFxcbiAgODE6XFx0Y29uZmlnIFBQUF9NUFBFXFxuICA4MjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIE1QUEUgY29tcHJlc3Npb24gKGVuY3J5cHRpb24pXFxcIlxcbiAgODM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgODQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgODU6XFx0XFx0aGVscFxcbiAgODY6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgTVBQRSBFbmNyeXB0aW9uIHByb3RvY29sLCBhcyBlbXBsb3llZCBieSB0aGVcXG4gIDg3OlxcdFxcdCAgTWljcm9zb2Z0IFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbC5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBTZWUgaHR0cDovL3BwdHBjbGllbnQuc291cmNlZm9yZ2UubmV0LyBmb3IgaW5mb3JtYXRpb24gb25cXG4gIDkwOlxcdFxcdCAgY29uZmlndXJpbmcgUFBUUCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHRvIHV0aWxpemUgdGhpcyBtZXRob2QuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBQUFBfTVVMVElMSU5LXFxuICA5MzpcXHRcXHRib29sIFxcXCJQUFAgbXVsdGlsaW5rIHN1cHBvcnRcXFwiXFxuICA5NDpcXHRcXHRoZWxwXFxuICA5NTpcXHRcXHQgIFBQUCBtdWx0aWxpbmsgaXMgYSBwcm90b2NvbCAoZGVmaW5lZCBpbiBSRkMgMTk5MCkgd2hpY2ggYWxsb3dzIHlvdVxcbiAgOTY6XFx0XFx0ICB0byBjb21iaW5lIHNldmVyYWwgKGxvZ2ljYWwgb3IgcGh5c2ljYWwpIGxpbmVzIGludG8gb25lIGxvZ2ljYWwgUFBQXFxuICA5NzpcXHRcXHQgIGNvbm5lY3Rpb24sIHNvIHRoYXQgeW91IGNhbiB1dGlsaXplIHlvdXIgZnVsbCBiYW5kd2lkdGguXFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdCAgVGhpcyBoYXMgdG8gYmUgc3VwcG9ydGVkIGF0IHRoZSBvdGhlciBlbmQgYXMgd2VsbCBhbmQgeW91IG5lZWQgYVxcbiAxMDA6XFx0XFx0ICB2ZXJzaW9uIG9mIHRoZSBwcHBkIGRhZW1vbiB3aGljaCB1bmRlcnN0YW5kcyB0aGUgbXVsdGlsaW5rIHByb3RvY29sLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoxMi45MzQzNTYyMzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0NDk4ODI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRlbHZpbmcgaW50byBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIFBQUCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHNldCB1cCwgd2hhdCB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgYW5kIGV4dGVuZGluZyB0aGUgbmV0d29ya2luZyBzdGFjay4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gdW5lYXJ0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjE1LjI3OTM0ODkyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuIDEyNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cXHUwMDNlLlxcbiAxMjY6XFx0XFxuIDEyNzpcXHRjaG9pY2VcXG4gMTI4OlxcdFxcdHByb21wdCBcXFwiTnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1xcXCJcXG4gMTI5OlxcdFxcdGRlZmF1bHQgUFBQT0VfSEFTSF9CSVRTXzRcXG4gMTMwOlxcdFxcdGRlcGVuZHMgb24gUFBQT0VcXG4gMTMxOlxcdFxcdGhlbHBcXG4gMTMyOlxcdFxcdFxcdFNlbGVjdCB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBmb3IgaGFzaGluZyBQUFBvRSBpbnRlcmZhY2VzLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRcXHRMYXJnZXIgc2l6ZXMgcmVkdWNlcyB0aGUgcmlzayBvZiBoYXNoIGNvbGxpc2lvbnMgYXQgdGhlIGNvc3RcXG4gMTM1OlxcdFxcdFxcdG9mIHNsaWdodGx5IGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UuXFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdFxcdFRoaXMgaGFzaCB0YWJsZSBpcyBvbiBhIHBlciBvdXRlciBldGhlcm5ldCBpbnRlcmZhY2UuXFxuIDEzODpcXHRcXG4gMTM5OlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxcbiAxNDA6XFx0XFx0Ym9vbCBcXFwiMSBiaXQgKDIgYnVja2V0cylcXFwiXFxuIDE0MTpcXHRcXG4gMTQyOlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxcbiAxNDM6XFx0XFx0Ym9vbCBcXFwiMiBiaXRzICg0IGJ1Y2tldHMpXFxcIlxcbiAxNDQ6XFx0XFxuIDE0NTpcXHRjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcXG4gMTQ2OlxcdFxcdGJvb2wgXFxcIjQgYml0cyAoMTYgYnVja2V0cylcXFwiXFxuIDE0NzpcXHRcXG4gMTQ4OlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxcbiAxNDk6XFx0XFx0Ym9vbCBcXFwiOCBiaXRzICgyNTYgYnVja2V0cylcXFwiXFxuIDE1MDpcXHRcXG4gMTUxOlxcdGVuZGNob2ljZVxcbiAxNTI6XFx0XFxuIDE1MzpcXHRjb25maWcgUFBQT0VfSEFTSF9CSVRTXFxuIDE1NDpcXHRcXHRpbnRcXG4gMTU1OlxcdFxcdGRlZmF1bHQgMSBpZiBQUFBPRV9IQVNIX0JJVFNfMVxcbiAxNTY6XFx0XFx0ZGVmYXVsdCAyIGlmIFBQUE9FX0hBU0hfQklUU18yXFxuIDE1NzpcXHRcXHRkZWZhdWx0IDQgaWYgUFBQT0VfSEFTSF9CSVRTXzRcXG4gMTU4OlxcdFxcdGRlZmF1bHQgOCBpZiBQUFBPRV9IQVNIX0JJVFNfOFxcbiAxNTk6XFx0XFx0ZGVmYXVsdCA0XFxuIDE2MDpcXHRcXG4gMTYxOlxcdGNvbmZpZyBQUFRQXFxuIDE2MjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgSVB2NCAoUFBUUClcXFwiXFxuIDE2MzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbiAxNjQ6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDE2NTpcXHRcXHRoZWxwXFxuIDE2NjpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIElQdjQuKFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbClcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBwcHBkIHBsdWdpbiB0byB3b3JrIGluIGNsaWVudCBtb2RlIG9yXFxuIDE2OTpcXHRcXHQgIG1vZGlmaWVkIHBwdHBkIChwb3B0b3ApIHRvIHdvcmsgaW4gc2VydmVyIG1vZGUuXFxuIDE3MDpcXHRcXHQgIFNlZSBodHRwOi8vYWNjZWwtcHB0cC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBob3cgdG9cXG4gMTcxOlxcdFxcdCAgdXRpbGl6ZSB0aGlzIG1vZHVsZS5cXG4gMTcyOlxcdFxcbiAxNzM6XFx0Y29uZmlnIFBQUE9MMlRQXFxuIDE3NDpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgTDJUUFxcXCJcXG4gMTc1OlxcdFxcdGRlcGVuZHMgb24gTDJUUFxcbiAxNzY6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDE3NzpcXHRcXHRoZWxwXFxuIDE3ODpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUC1vdmVyLUwyVFAgc29ja2V0IGZhbWlseS4gTDJUUCBpcyBhIHByb3RvY29sXFxuIDE3OTpcXHRcXHQgIHVzZWQgYnkgSVNQcyBhbmQgZW50ZXJwcmlzZXMgdG8gdHVubmVsIFBQUCB0cmFmZmljIG92ZXIgVURQXFxuIDE4MDpcXHRcXHQgIHR1bm5lbHMuIEwyVFAgaXMgcmVwbGFjaW5nIFBQVFAgZm9yIFZQTiB1c2VzLlxcbiAxODE6XFx0aWYgVFRZXFxuIDE4MjpcXHRcXG4gMTgzOlxcdGNvbmZpZyBQUFBfQVNZTkNcXG4gMTg0OlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIlxcbiAxODU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAxODY6XFx0XFx0aGVscFxcbiAxODc6XFx0XFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzdGFuZGFyZFxcbiAxODg6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzdWNoIGFzIENPTTEgb3IgQ09NMiBvbiBhIFBDLiAgSWYgeW91IHVzZVxcbiAxODk6XFx0XFx0ICBhIG1vZGVtIChub3QgYSBzeW5jaHJvbm91cyBvciBJU0ROIG1vZGVtKSB0byBjb250YWN0IHlvdXIgSVNQLCB5b3VcXG4gMTkwOlxcdFxcdCAgbmVlZCB0aGlzIG9wdGlvbi5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE5NTpcXHRcXG4gMTk2OlxcdGNvbmZpZyBQUFBfU1lOQ19UVFlcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcXFwiXFxuIDE5ODpcXHRcXHRoZWxwXFxuIDE5OTpcXHRcXHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN5bmNocm9ub3VzXFxuIDIwMDpcXHRcXHQgIChIRExDKSB0dHkgZGV2aWNlcy4gVGhlc2UgZGV2aWNlcyBhcmUgb2Z0ZW4gdXNlZCBmb3IgaGlnaC1zcGVlZCBsZWFzZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MTUuMjc5NDM4OTI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NjAyMTIxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUFBQIENoYW5uZWwgUmVmYWN0b3JpbmcgVmVyaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgUFBQIGNoYW5uZWwgcmVmYWN0b3JpbmcsIGVuc3VyaW5nIHRoZSBjaGFuZ2VzIGFyZSBzb3VuZCBhbmQgZG9uJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBGaXJzdCwgSSdsbCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYFBQUGAsIGBQUFBfQVNZTkNgLCBgUFBQX1NZTkNfVFRZYCwgYFBQUE9FYCwgYFBQVFBgLCBgUFBQT0FUTWAsIGBQUFBPTDJUUGAsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzIGxpa2UgYFRUWWAsIGBBVE1gLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBMMlRQYC5cblxuTmV4dCwgSSdsbCB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRob3NlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGxpbmcgdGhlIHJlZmFjdG9yZWQgb3BlcmF0aW9ucy4gSW4gYHBwcF9nZW5lcmljLmNgLCBJJ2xsIGxvb2sgYXQgYHBwcF9pb2N0bGAsIGBwcHBfZmlsbF9mb3J3YXJkX3BhdGhgLCBgcHBwX3B1c2hgLCBgcHBwX21wX2V4cGxvZGVgLCBgX19wcHBfY2hhbm5lbF9wdXNoYCwgYW5kIGBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRgLiBUaGVuLCBpbiBgcHBwX2FzeW5jLmNgLCBgcHBwX2FzeW5jX2lvY3RsYCBhbmQgYHBwcF9hc3luY19zZW5kYC4gU2ltaWxhcmx5LCBpbiBgcHBwX3N5bmN0dHkuY2AsIGBwcHBfc3luY19pb2N0bGAgYW5kIGBwcHBfc3luY19zZW5kYDsgaW4gYHBwcG9lLmNgLCBgcHBwb2VfeG1pdGAgYW5kIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGA7IGluIGBwcHRwLmNgLCBgcHB0cF94bWl0YCBhbmQgYHBwdHBfcHBwX2lvY3RsYDsgaW4gYHBwcG9hdG0uY2AsIGBwcHBvYXRtX3NlbmRgIGFuZCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgOyBhbmQgZmluYWxseSwgaW4gYGwydHBfcHBwLmNgLCBgcHBwb2wydHBfeG1pdGAuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBjaGFuZ2UsIGFuZCB0aGF0IHRoZSBjaGFuZ2UgaXMgYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQuIFRoZXNlIGFyZSBhbGwgc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcvaGFuZGxpbmcgdGhlIFBQUCBjaGFubmVsIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIHJlZmFjdG9yZWQuXG5cbkknbGwgdGhlbiByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3Mgb25jZSBtb3JlIHRvIGVuc3VyZSBhbGwgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGVuYWJsZWQuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZXMgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCB0byBjb25maXJtIHRoZXkncmUgYWNjdXJhdGUgYW5kIGNvbnNpc3RlbnQgd2l0aCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uXG5cbkknbGwgY29tcGlsZSBhIGNvbXBsZXRlIGxpc3Qgb2YgXCJGb2N1c1N5bWJvbHNcIiDigJMgYWxsIHRoZSBmdW5jdGlvbnMgaWRlbnRpZmllZCBhYm92ZSB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgcmVmYWN0b3Jpbmcg4oCTIHRvIGJlIHJldmlld2VkIGluIGRlcHRoOiBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9hc3luY19zZW5kYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwcF9zeW5jX3NlbmRgLCBgcHBwb2VfeG1pdGAsIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHRwX3htaXRgLCBgcHB0cF9wcHBfaW9jdGxgLCBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9sMnRwX3htaXRgLCBgcHBwX3B1c2hgLCBgcHBwX21wX2V4cGxvZGVgLCBgX19wcHBfY2hhbm5lbF9wdXNoYCwgYHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dGAsIGBwcHBfaW9jdGxgLCBhbmQgYHBwcF9maWxsX2ZvcndhcmRfcGF0aGAuXG5cbkNydWNpYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBpbiAuYyBmaWxlcyBhbmQgYXJlIG5vbi1zdGF0aWMgKG9yIGF0IGxlYXN0LCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCBoZW5jZSBuZWVkaW5nIGFkZHJlc3NlcykuXG5cbkluIGNvbmNsdXNpb24sIHRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGludm9sdmVzIHJlZmFjdG9yaW5nIHRoZSBgcHBwX2NoYW5uZWxfb3BzYCBpbnRlcmZhY2UgdG8gcGFzcyB0aGUgY2hhbm5lbCdzIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBjaGFubmVsIHN0cnVjdHVyZS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGBwcHBfZ2VuZXJpY2AsIGBwcHBfYXN5bmNgLCBgcHBwX3N5bmN0dHlgLCBgcHBwb2VgLCBgcHB0cGAsIGBwcHBvYXRtYCwgYW5kIGBsMnRwX3BwcGAuIFRoZXNlIGNvbXBvbmVudHMgYXJlIGtleSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIGV4cG9zZWQgdmlhIHNvY2tldHMgYW5kIGAvZGV2L3BwcGAgaW9jdGxzLiBUaGVyZWZvcmUsIHJpZ29yb3VzIGZ1enppbmcgaXMgcGFyYW1vdW50IHRvIGRldGVjdCB0eXBlIHNhZmV0eSBpc3N1ZXMsIHJlZ3Jlc3Npb25zLCBhbmQgZW5zdXJlIHRoYXQgbm8gdW5mb3Jlc2VlbiBiZWhhdmlvcnMgYXJlIGludHJvZHVjZWQgZHVlIHRvIHRoZSByZWZhY3RvcmluZy4gTm93IEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0MywiT3V0cHV0VG9rZW5zIjozNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoyMi43Mzk2NTM1NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk4MzY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfQVNZTkNcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiUFBQT0VcIixcbiAgICBcIlBQVFBcIixcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJBVE1cIixcbiAgICBcIkwyVFBcIixcbiAgICBcIk5FVF9JUEdSRV9ERU1VWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9hc3luY19pb2N0bFwiLFxuICAgIFwicHBwX2FzeW5jX3NlbmRcIixcbiAgICBcInBwcF9zeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBfc3luY19zZW5kXCIsXG4gICAgXCJwcHBvZV94bWl0XCIsXG4gICAgXCJwcHBvZV9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwicHB0cF94bWl0XCIsXG4gICAgXCJwcHRwX3BwcF9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2RldnBwcF9pb2N0bFwiLFxuICAgIFwicHBwb2wydHBfeG1pdFwiLFxuICAgIFwicHBwX3B1c2hcIixcbiAgICBcInBwcF9tcF9leHBsb2RlXCIsXG4gICAgXCJfX3BwcF9jaGFubmVsX3B1c2hcIixcbiAgICBcInBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dFwiLFxuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfZmlsbF9mb3J3YXJkX3BhdGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBwcF9jaGFubmVsX29wcyBpbnRlcmZhY2UgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgdG8gcGFzcyB0aGUgY2hhbm5lbCBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4gcHBwX2dlbmVyaWMgYXMgd2VsbCBhcyBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIFBQUCBjaGFubmVsIG1vZHVsZXMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBwcHBvbDJ0cCkuIFRoZXNlIG5ldHdvcmtpbmcgZHJpdmVycyBhbmQgcHJvdG9jb2xzIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldHMgYW5kIC9kZXYvcHBwIGlvY3RscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0FTWU5DXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUE9FXCIsXG4gICAgXCJQUFRQXCIsXG4gICAgXCJQUFBPQVRNXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJMMlRQXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfYXN5bmNfaW9jdGxcIixcbiAgICBcInBwcF9hc3luY19zZW5kXCIsXG4gICAgXCJwcHBfc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwb2VfeG1pdFwiLFxuICAgIFwicHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwdHBfeG1pdFwiLFxuICAgIFwicHB0cF9wcHBfaW9jdGxcIixcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9kZXZwcHBfaW9jdGxcIixcbiAgICBcInBwcG9sMnRwX3htaXRcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfbXBfZXhwbG9kZVwiLFxuICAgIFwiX19wcHBfY2hhbm5lbF9wdXNoXCIsXG4gICAgXCJwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRcIixcbiAgICBcInBwcF9pb2N0bFwiLFxuICAgIFwicHBwX2ZpbGxfZm9yd2FyZF9wYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwcHBfY2hhbm5lbF9vcHMgaW50ZXJmYWNlIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIHRvIHBhc3MgdGhlIGNoYW5uZWwgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHBwcF9nZW5lcmljIGFzIHdlbGwgYXMgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBQUFAgY2hhbm5lbCBtb2R1bGVzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgcHBwb2wydHApLiBUaGVzZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHByb3RvY29scyBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXRzIGFuZCAvZGV2L3BwcCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MjIuODI5NjQ2MTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0NTY1ODk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjIyLjgzMDI3Mjg2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDQ1MDI3MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZTI1MTg5YjZiODA2MGMwNDRlNTYyMThjMmE3N2E4M2UzZjVmMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMjo0Mjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuaW5kZXggZWE3ZmU5NjA4ZmZkNi4uZTczYjBmY2U4NmI5MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5AQCAtOTEsMTMgKzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19pbnB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIFxuIHN0YXRpYyB2b2lkIGFzeW5jX2xjcF9wZWVrKHN0cnVjdCBhc3luY3BwcCAqYXAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG5AQCAtMzIxLDkgKzMyMCw5IEBAIHBwcF9hc3luY19pbml0KHZvaWQpXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuK3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbiBcdGludCBfX3VzZXIgKnAgPSBhcmdwO1xuIFx0aW50IGVyciwgdmFsO1xuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfYXN5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uM2I4M2ZmOGNmNTg5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTc5MCw3ICs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0XHRlcnIgPSAtRU5PVFRZO1xuIFx0XHRcdGlmIChjaGFuIFx1MDAyNlx1MDAyNiBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bClcbi1cdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4sIGNtZCwgYXJnKTtcbitcdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4tXHUwMDNlcHJpdmF0ZSwgY21kLCBhcmcpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2gtXHUwMDNlY2hhbl9zZW0pO1xuIFx0XHR9XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE2MDMsNyArMTYwMyw3IEBAIHN0YXRpYyBpbnQgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRpZiAoIWNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTtcbitcdHJldHVybiBjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XG5AQCAtMTkzMiw3ICsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcbitcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIHNrYik7XG4gXG4gb3V0OlxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuQEAgLTIxNDIsNyArMjE0Miw3IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovXG4gXHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpIHx8XG4tXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgZnJhZykpXG4rXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBmcmFnKSlcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgZnJhZyk7XG4gXHRcdHBjaC1cdTAwM2VoYWRfZnJhZyA9IDE7XG4gXHRcdHAgKz0gZmxlbjtcbkBAIC0yMTc1LDcgKzIxNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF9jaGFubmVsX3B1c2goc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHBwcCAqcHBwKVxuIFx0aWYgKHBjaC1cdTAwM2VjaGFuKSB7XG4gXHRcdHdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSkge1xuIFx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKTtcbi1cdFx0XHRpZiAoIXBjaC1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaC1cdTAwM2VjaGFuLCBza2IpKSB7XG4rXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKSB7XG4gXHRcdFx0XHQvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiBcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtXHUwMDNlY2hhbl9uZXQsIHBjaGItXHUwMDNlY2hhbl9uZXQpKTtcbi1cdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbitcdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKVxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBvdXRsOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBzeW5jcHBwICphcCk7XG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0aW50IGVyciwgdmFsO1xuIFx0dTMyIGFjY21bOF07XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcbiBcdHBwcF9zeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC04NDEsOSArODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XG4gICpcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4rXHRcdFx0XHQgICB2b2lkICpwcml2YXRlKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXHUwMDNlcHBwb2VfZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG5pbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuQEAgLTE0Niw5ICsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLFxuIFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwdHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9IFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwdHA7XG5AQCAtNTczLDEwICs1NzMsOSBAQCBzdGF0aWMgaW50IHBwdHBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4pXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5pbmRleCAyZjYzZTlhNmNjODg5Li5kOWNmYjhlZjBmZmFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbkBAIC0yNywxMiArMjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsO1xuIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuIFx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4gXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cbi1cdGludFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4rXHRpbnRcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcdC8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqL1xuLVx0aW50XHQoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbitcdGludFx0KCppb2N0bCkodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xuIFx0aW50XHQoKmZpbGxfZm9yd2FyZF9wYXRoKShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICosXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbitcdFx0XHRcdCAgICAgdm9pZCAqKTtcbiB9O1xuIFxuIHN0cnVjdCBwcHBfY2hhbm5lbCB7XG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTkxLDExICs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxuIFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbi19XG4tXG4gLypcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXG4gICogZG9lc24ndCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbVxuQEAgLTI4Niw5ICsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxuICAqL1xuICNkZWZpbmUgRFJPUF9QQUNLRVQgMVxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbitcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4tc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHR1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuK1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuLVx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4tXHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuK1x0XHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHRjYXNlIFBQUElPQ1NGTEFHUzpcbi1cdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIGdldF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0fVxuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9wcHAuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XG4gXHRzdHJ1Y3Qgc29ja1x0XHQqX19zaztcdFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG4gXHQuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LFxuQEAgLTMyNyw5ICszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcbiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247XG4gXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDtcbiBcdGludCB1aGxlbiwgaGVhZHJvb207XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoyMi44MzAyNzM4MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkzNDY2MzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGZpcnN0LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHBhc3NlcyBgdm9pZCAqcHJpdmF0ZWAgaW5zdGVhZCBvZiBgc3RydWN0IHBwcF9jaGFubmVsICpgIHRvIGZ1bmN0aW9ucyBsaWtlIGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGAuIEl0IGFwcGVhcnMgdGhlIHJhdGlvbmFsZSBpcyB0byBzaW1wbGlmeSB0aGluZ3MgYnkgZGlyZWN0bHkgcHJvdmlkaW5nIHRoZSBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFubmVsLlxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byB1cGRhdGUgYWxsIHRoZSByZWxldmFudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIHRoZSB2YXJpb3VzIFBQUCBkcml2ZXJzOiBgcHBwX2FzeW5jLmNgLCBgcHBwX2dlbmVyaWMuY2AsIGBwcHBfc3luY3R0eS5jYCwgYHBwcG9lLmNgLCBgcHB0cC5jYCwgYHBwcG9hdG0uY2AsIGFuZCBgbDJ0cF9wcHAuY2AuIFdpdGhpbiBgcHBwX2dlbmVyaWMuY2AsIHRoZSBwYXRjaCBjb25zaXN0ZW50bHkgdXBkYXRlcyBjYWxscyBsaWtlIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZylgIHRvIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLVx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKWAgYW5kIHNpbWlsYXIgc3Vic3RpdHV0aW9ucyBmb3IgdGhlIG90aGVyIGZ1bmN0aW9uIHBvaW50ZXJzLCBpbmNsdWRpbmcgdGhlIGBzdGFydF94bWl0YCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbnMuIEVhY2ggY2hhbm5lbCBpbXBsZW1lbnRhdGlvbiBhbHNvIHVwZGF0ZXMgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgdG8gbWF0Y2ggdGhpcyBuZXcgYHZvaWQgKnByaXZhdGVgIGFyZ3VtZW50LlxuXG5Ob3csIG15IG1haW4gY29uY2VybiBpcyBtYWtpbmcgc3VyZSB0aGlzIGlzIGNvbXBsZXRlLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0ICpldmVyeSogc2luZ2xlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgdHJlZSBoYXMgYmVlbiB1cGRhdGVkIGNvcnJlY3RseS4gQW55IG1pc3NlZCBpbnN0YW5jZSBvciBhIG1pc2FwcGxpZWQgY2hhbmdlIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIGdyZXAgYWNyb3NzIHRoZSBrZXJuZWwgZm9yIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCB0byBlbnN1cmUgbm8gc3RyYXkgaW1wbGVtZW50YXRpb25zIGhhdmUgYmVlbiBvdmVybG9va2VkLCBhbmQgdGhhdCBhbGwgZnVuY3Rpb24gcHJvdG90eXBlcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgY2F0Y2hpbmcgcG90ZW50aWFsIGlzc3Vlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggY292ZXJzIHRoZSBlbnRpcmUgc3VyZmFjZSBhcmVhIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoyNy43NjQ5NDA0MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzM5MTMxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjI5LjQ5ODg2OTEyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzc2NDA5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gZm9yIFBQUCBDaGFubmVsIENhbGxiYWNrIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggYW5kIHVwZGF0ZWQgZXZlcnkgc2luZ2xlIGBwcHBfY2hhbm5lbF9vcHNgIGluc3RhbmNlIGluIHRoZSBrZXJuZWwuIE5vdywgbGV0J3MgY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMgYmFzZWQgb24gdGhlIEtNU0FOIGd1aWRlbGluZXMuIFJlbWVtYmVyLCB0aGUgcnVsZSBpcyBjbGVhcjogS01TQU4gaXMgYSByZXNvdXJjZSBob2cuIFdlIG9ubHkgdXNlIGl0IGlmIEtBU0FOIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMgKmNhbid0KiBjYXRjaCBhIHBvdGVudGlhbCBpc3N1ZS4gSXQncyBmb3IgdGhvc2UgaW5zaWRpb3VzLCBzaWxlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IuXG5cblRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IHNwZWNpZmljOiBpcyB0aGUgcGF0Y2ggdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzP1xuXG5JbiB0aGlzIGNhc2UsIHRoaXMgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiBQUFAgY2hhbm5lbCBjYWxsYmFjayBzaWduYXR1cmVzLiBXZSdyZSBjaGFuZ2luZyB0aGUgY2FsbCBzdHJ1Y3R1cmUgZnJvbSBgY2hhbi1cdTAwM2VvcHMtXHUwMDNlZnVuYyhjaGFuLCAuLi4pYCB3aXRoIHRoZSBpbnRlcm5hbCByZXRyaWV2YWwgb2YgYGFwID0gY2hhbi1cdTAwM2Vwcml2YXRlYCB0byBzaW1wbHkgcGFzc2luZyBgY2hhbi1cdTAwM2Vwcml2YXRlYCBkaXJlY3RseSB0byBgY2hhbi1cdTAwM2VvcHMtXHUwMDNlZnVuYyhjaGFuLVx1MDAzZXByaXZhdGUsIC4uLilgLiBUaGF0J3MgaXQuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bjpcblxuKiAgIEFyZSB3ZSBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vcGUuIFRoZSBgY2hhbi1cdTAwM2Vwcml2YXRlYCBkYXRhIGlzIGFscmVhZHkgYmVpbmcgcGFzc2VkIGFyb3VuZCBhbmQgdXNlZCBhcyBuZWVkZWQsIGFuZCB0aGVyZSdzIG5vIGNoYW5nZSB0byB3aGF0J3MgKnNlbnQqIHRvIHVzZXJzcGFjZS4gRm9yIGV4YW1wbGUsIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAgc3RpbGwgZnVuY3Rpb25zIGFzIGl0IGRpZC5cbiogICBBcmUgdGhlcmUgYW55IG5ldyBjb25kaXRpb25hbHMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4gYGNoYW4tXHUwMDNlcHJpdmF0ZWAgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBvbiBjaGFubmVsIHJlZ2lzdHJhdGlvbi4gSXQgd2FzIGFscmVhZHkgYmVpbmcgZGVyZWZlcmVuY2VkIGluc2lkZSBlYWNoIGNhbGxiYWNrIHByaW9yIHRvIHRoaXMgY2hhbmdlLlxuKiAgIEFyZSB3ZSBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBhdCBhbGwuXG4qICAgQXJlIHdlIG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8gYWdhaW4uXG5cbk9uIHRoZSBmbGlwIHNpZGUsIHdlIGtub3cgd2UgKmRvbid0KiBuZWVkIEtNU0FOIGlmIHRoZSBjaGFuZ2UgcHJpbWFyaWx5IHJpc2tzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgS0FTQU4gYW5kIGZyaWVuZHMgaGFuZGxlIHBlcmZlY3RseSB3ZWxsLiBUaGUgY29kZSBkb2Vzbid0IHRvdWNoIHRob3NlIGlzc3Vlcy4gV2UncmUgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdGhhdCBhcmVuJ3QgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkICh1c2luZyB0aGUgc3RhbmRhcmQgcHJhY3RpY2VzKS4gVGhlIHBhdGNoIGFic29sdXRlbHkgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS5cblxuT2theSwgbGV0J3MgZG8gYSBxdWljayBmaW5hbCBydW4tdGhyb3VnaCB0byBtYWtlIGl0IGFsbCBjcnlzdGFsIGNsZWFyOlxuMS4gIFRoZSBwYXRjaCByZWZhY3RvcnMgUFBQIGNoYW5uZWwgY2FsbGJhY2tzIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGBmaWxsX2ZvcndhcmRfcGF0aGApIHRvIHJlY2VpdmUgYGNoYW4tXHUwMDNlcHJpdmF0ZWAgKGB2b2lkICpgKSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuXG4yLiAgVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsL3NpZ25hdHVyZSByZWZhY3RvcmluZywgd2l0aCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgaW5pdGlhbGl6YXRpb24sIG1lbW9yeSBjb3B5IGJvdW5kcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS5cbjMuICBBbnkgcG90ZW50aWFsIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBwb2ludGVyIG1pc21hdGNoZXMgb3IgTlVMTCBwb2ludGVycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIChlLmcuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB0eXBlIGNvbmZ1c2lvbiBpZiBhbnkpLlxuNC4gIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwNywiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MzUuODc1MjgxNjM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 12:28:09 +0000 UTC FinishedAt: 2026-09-05 12:43:38 +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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP", "NET_IPGRE_DEMUX" ], "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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP", "NET_IPGRE_DEMUX" ], "series_id": "af95c1a0-949e-4c33-ad31-cef2b196924d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_async_ioctl", "ppp_async_send", "ppp_sync_ioctl", "ppp_sync_send", "pppoe_xmit", "pppoe_fill_forward_path", "pptp_xmit", "pptp_ppp_ioctl", "pppoatm_send", "pppoatm_devppp_ioctl", "pppol2tp_xmit", "ppp_push", "ppp_mp_explode", "__ppp_channel_push", "ppp_channel_bridge_input", "ppp_ioctl", "ppp_fill_forward_path" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2sgdmFyaWFibGVzLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocyBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGNyZWF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb2ludGVyLXJlbGF0ZWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcHBwX2NoYW5uZWxfb3BzIGludGVyZmFjZSAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSB0byBwYXNzIHRoZSBjaGFubmVsIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiBwcHBfZ2VuZXJpYyBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgUFBQIGNoYW5uZWwgbW9kdWxlcyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIHBwcG9sMnRwKS4gVGhlc2UgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBwcm90b2NvbHMgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgL2Rldi9wcHAgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZTI1MTg5YjZiODA2MGMwNDRlNTYyMThjMmE3N2E4M2UzZjVmMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMjo0Mjo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO3N0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19pbnB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpO1xuJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbiBcbiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuQEAgLTMyMSw5ICYjNDM7MzIwLDkgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbkBAIC01NTAsOSAmIzQzOzU0OSw5IEBAIHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcClcbiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7cHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX2FzeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbkBAIC03OTAsNyAmIzQzOzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdFx0Y2hhbiA9IHBjaC1cdTAwM2VjaGFuO1xuIFx0XHRcdGVyciA9IC1FTk9UVFk7XG4gXHRcdFx0aWYgKGNoYW4gXHUwMDI2XHUwMDI2IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKVxuLVx0XHRcdFx0ZXJyID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwoY2hhbiwgY21kLCBhcmcpO1xuJiM0MztcdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4tXHUwMDNlcHJpdmF0ZSwgY21kLCBhcmcpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2gtXHUwMDNlY2hhbl9zZW0pO1xuIFx0XHR9XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE2MDMsNyAmIzQzOzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0aWYgKCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7XG4mIzQzO1x0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi1cdTAwM2Vwcml2YXRlKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcHBfbmV0ZGV2X29wcyA9IHtcbkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcbiYjNDM7XHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpO1xuIFxuIG91dDpcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdC8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi9cbiBcdFx0Y2hhbiA9IHBjaC1cdTAwM2VjaGFuO1xuIFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkgfHxcbi1cdFx0XHQhY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcbiYjNDM7XHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBmcmFnKSlcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgZnJhZyk7XG4gXHRcdHBjaC1cdTAwM2VoYWRfZnJhZyA9IDE7XG4gXHRcdHAgJiM0Mzs9IGZsZW47XG5AQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXG4gXHRpZiAocGNoLVx1MDAzZWNoYW4pIHtcbiBcdFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpKSB7XG4gXHRcdFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpO1xuLVx0XHRcdGlmICghcGNoLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoLVx1MDAzZWNoYW4sIHNrYikpIHtcbiYjNDM7XHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKSB7XG4gXHRcdFx0XHQvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiBcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjMwMCw3ICYjNDM7MjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVx1MDAzZWNoYW5fbmV0LCBwY2hiLVx1MDAzZWNoYW5fbmV0KSk7XG4tXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4sIHNrYikpXG4mIzQzO1x0aWYgKCFwY2hiLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoYi1cdTAwM2VjaGFuLVx1MDAzZXByaXZhdGUsIHNrYikpXG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFxuIG91dGw6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZjg3ZDQzZmFlZWFiNS4uNTRkODQwMmUxOGM0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTgxLDkgJiM0Mzs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuJiM0MztzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbiBzdGF0aWMgaW50IHBwcF9zeW5jX3B1c2goc3RydWN0IHN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcbkBAIC0zMTIsOSAmIzQzOzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHRpbnQgZXJyLCB2YWw7XG4gXHR1MzIgYWNjbVs4XTtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuQEAgLTQ5MSw5ICYjNDM7NDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7cHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX3N5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuQEAgLTg0MSw5ICYjNDM7ODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XG4gICpcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXHUwMDNlcHBwb2VfZGV2O1xuIFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XG5AQCAtODk1LDkgJiM0Mzs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4mIzQzO1x0XHRcdFx0ICAgdm9pZCAqcHJpdmF0ZSlcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwdHAuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbmluZGV4IGE3OTdhMDYwNmY2YjQuLjhmNzE5MGQ3MDY3ZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG5AQCAtMTQ2LDkgJiM0MzsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLFxuIFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbkBAIC01NzMsMTAgJiM0Mzs1NzMsOSBAQCBzdGF0aWMgaW50IHBwdHBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4pXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9IFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwdHA7XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsO1xuIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuIFx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4gXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cbi1cdGludFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4mIzQzO1x0aW50XHQoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gXHQvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi9cbi1cdGludFx0KCppb2N0bCkoc3RydWN0IHBwcF9jaGFubmVsICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4mIzQzO1x0aW50XHQoKmlvY3RsKSh2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4gXHRpbnRcdCgqZmlsbF9mb3J3YXJkX3BhdGgpKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICosXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICopO1xuJiM0MztcdFx0XHRcdCAgICAgdm9pZCAqKTtcbiB9O1xuIFxuIHN0cnVjdCBwcHBfY2hhbm5lbCB7XG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbiBcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4te1xuLVx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4tfVxuLVxuIC8qXG4gICogV2UgY2FuJiMzOTt0IGRvIHRoaXMgZGlyZWN0bHkgZnJvbSBvdXIgX3BvcCBoYW5kbGVyLCBzaW5jZSB0aGUgcHBwIGNvZGVcbiAgKiBkb2VzbiYjMzk7dCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbVxuQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXG4gICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZG9pbmcuXG4gICovXG4gI2RlZmluZSBEUk9QX1BBQ0tFVCAxXG4tc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbiYjNDM7XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG5AQCAtMzY2LDE2ICYjNDM7MzYxLDE2IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB9XG4gXG4gLyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cbi1zdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdHVuc2lnbmVkIGxvbmcgYXJnKVxuJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuJiM0MztcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4mIzQzO1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuLVx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4tXHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuJiM0MztcdFx0cmV0dXJuIHB1dF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4tXHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4mIzQzO1x0XHRyZXR1cm4gZ2V0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHR9XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbmluZGV4IGVmOGZkZmFmMDUxZDQuLmMxY2RhMWQ3ZmJmNmIgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5AQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XG4gXHRzdHJ1Y3Qgc29ja1x0XHQqX19zaztcdFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xuIFx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbkBAIC0zMjcsOSAmIzQzOzMyNyw5IEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5c1xuICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuXG4gICovXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7XG4gXHRpbnQgdWhsZW4sIGhlYWRyb29tO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwcHBfY2hhbm5lbF9vcHMgaW50ZXJmYWNlIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIHRvIHBhc3MgdGhlIGNoYW5uZWwgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHBwcF9nZW5lcmljIGFzIHdlbGwgYXMgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBQUFAgY2hhbm5lbCBtb2R1bGVzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgcHBwb2wydHApLiBUaGVzZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHByb3RvY29scyBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXRzIGFuZCAvZGV2L3BwcCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlMjUxODliNmI4MDYwYzA0NGU1NjIxOGMyYTc3YTgzZTNmNWYwYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEyOjQyOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTsKICAqIFByb3RvdHlwZXMuCiAgKi8KIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogCiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLApAQCAtMzIxLDkgJiM0MzszMjAsOSBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJaW50IGVyciwgdmFsOwpAQCAtNTUwLDkgJiM0Mzs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9hc3luY19wdXNoKGFwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzkwLDcgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJCWVyciA9IC1FTk9UVFk7CiAJCQlpZiAoY2hhbiAmYW1wOyZhbXA7IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwpCi0JCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZyk7CiYjNDM7CQkJCWVyciA9IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwoY2hhbi0mZ3Q7cHJpdmF0ZSwgY21kLCBhcmcpOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGNoLSZndDtjaGFuX3NlbSk7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0xNjAzLDcgJiM0MzsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlpZiAoIWNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7CiYjNDM7CXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi0mZ3Q7cHJpdmF0ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7CkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKTsKJiM0MzsJCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBza2IpOwogCiBvdXQ6CiAJCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCS8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi8KIAkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtwY2gtJmd0O2ZpbGUueHEpIHx8Ci0JCQkhY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIGZyYWcpKQomIzQzOwkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbi0mZ3Q7cHJpdmF0ZSwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgZnJhZyk7CiAJCXBjaC0mZ3Q7aGFkX2ZyYWcgPSAxOwogCQlwICYjNDM7PSBmbGVuOwpAQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApCiAJaWYgKHBjaC0mZ3Q7Y2hhbikgewogCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkpIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cGNoLSZndDtmaWxlLnhxKTsKLQkJCWlmICghcGNoLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoLSZndDtjaGFuLCBza2IpKSB7CiYjNDM7CQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpIHsKIAkJCQkvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJCQlza2JfcXVldWVfaGVhZCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgc2tiKTsKIAkJCQlicmVhazsKQEAgLTIzMDAsNyAmIzQzOzIzMDAsNyBAQCBzdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtJmd0O2NoYW5fbmV0LCBwY2hiLSZndDtjaGFuX25ldCkpOwotCWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4sIHNrYikpCiYjNDM7CWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpCiAJCWtmcmVlX3NrYihza2IpOwogCiBvdXRsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAgewogICogUHJvdG90eXBlcy4KICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTsKQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC00OTEsOSAmIzQzOzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogICogYXQgc29tZSBsYXRlciB0aW1lLgogICovCiBzdGF0aWMgaW50Ci1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9zeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC04NDEsOSAmIzQzOzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tJmd0O3BwcG9lX2RldjsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKQEAgLTg5NSw5ICYjNDM7ODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsCi0JCQkJICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwppbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKQEAgLTE0Niw5ICYjNDM7MTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbywKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKIH0KIAotc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHB0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJmFtcDtwby0mZ3Q7cHJvdG8ucHB0cDsKQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybikKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsOwogc3RydWN0IHBwcF9jaGFubmVsX29wcyB7CiAJLyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuCiAJICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovCi0JaW50CSgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwomIzQzOwlpbnQJKCpzdGFydF94bWl0KSh2b2lkICosIHN0cnVjdCBza19idWZmICopOwogCS8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqLwotCWludAkoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKJiM0MzsJaW50CSgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAlpbnQJKCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKiwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKJiM0MzsJCQkJICAgICB2b2lkICopOwogfTsKIAogc3RydWN0IHBwcF9jaGFubmVsIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYykKIAlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLSZndDt1c2VyX2JhY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKLXsKLQlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi0mZ3Q7cHJpdmF0ZSk7Ci19Ci0KIC8qCiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZQogICogZG9lc24mIzM5O3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb20KQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpCiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy4KICAqLwogI2RlZmluZSBEUk9QX1BBQ0tFVCAxCi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7CiYjNDM7CXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgcmV0OwogCkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqLwotc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKJiM0MzsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUFBQSU9DR0ZMQUdTOgotCQlyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLSZndDtmbGFncywgKGludCBfX3VzZXIgKikgYXJnKQotCQkgICAgPyAtRUZBVUxUIDogMDsKJiM0MzsJCXJldHVybiBwdXRfdXNlcihwdmNjLSZndDtmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CiAJY2FzZSBQUFBJT0NTRkxBR1M6Ci0JCXJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIGdldF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gewogCXN0cnVjdCBzb2NrCQkqX19zazsJCS8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqLwogfTsKIAotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHsKIAkuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LApAQCAtMzI3LDkgJiM0MzszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwKICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5cwogICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci4KICAqLwotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7CiAJaW50IHVobGVuLCBoZWFkcm9vbTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGl0cyBmdXp6aW5nIHBvdGVudGlhbCBhbmQgaG93IHRvIGJlc3QgYXBwcm9hY2ggaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmcsIGFuZCBpZiBzbywgd2hhdCBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSBtb3N0IGVmZmVjdGl2ZS4KClRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgYHBwcGAgcmVsYXRlZCBmaWxlczogYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYGluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaGAsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNwcmVhZGluZyBhY3Jvc3MgdGhlIFBQUCBzdGFjay4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWx0ZXJpbmcgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYC4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBvZiBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBiZWluZyB0d2Vha2VkLiBUaGV5JiMzOTtyZSBjaGFuZ2luZyBmcm9tIHRha2luZyBhIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0byB0YWtpbmcgYSBgdm9pZCAqYCBpbnN0ZWFkLgoKVGhpcyBhbHNvIG1lYW5zIGNvcnJlc3BvbmRpbmcgdXBkYXRlcyBpbiB0aGUgY2FsbGVyIHNpdGVzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG5vdyBwYXNzaW5nIGBjaGFuLSZndDtwcml2YXRlYCB0byB0aGVzZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBgY2hhbmAgaXRzZWxmIGluIGBwcHBfZ2VuZXJpYy5jYC4gQWxyaWdodCwgc28gdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgYWxzbyB1cGRhdGVkOiBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9hc3luY19zZW5kYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwcF9zeW5jX3NlbmRgLCBgcHBwb2VfeG1pdGAsIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHRwX3htaXRgLCBgcHB0cF9wcHBfaW9jdGxgLCBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCBhbmQgYHBwcG9sMnRwX3htaXRgIGFyZSBhbGwgYmVpbmcgdG91Y2hlZC4KCk5vdywgYmVmb3JlIEkgZGVjaWRlIG9uIGEgZnV6emluZyBzdHJhdGVneSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGEgY29tcHJlaGVuc2l2ZSBjaGFuZ2UuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGVudGlyZSBjb2RlYmFzZSB0byB2ZXJpZnkgdGhhdCBubyBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgYHBwcF9jaGFubmVsX29wc2AgaGF2ZSBiZWVuIG1pc3NlZC4gR290dGEgdXNlIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgZWxzZSBwb3BzIHVwISBJJiMzOTttIGhvcGluZyB0aGlzIGlzIGEgY29tcGxldGUgYW5kIGNsZWFuIHJlZmFjdG9yLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgdGhvcm91Z2ggY2hlY2suIFRoZW4gaXQmIzM5O3MgdGltZSB0byBjb21waWxlIGl0IGFuZCBjb25maXJtIGl0IGFsbCB3b3JrcyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfY2hhbm5lbF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMj1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDYtXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTg5PXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDUtXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDctXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9MjU9c3RydWN0IHBwcF9jaGFubmVsO1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI2LVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI4LVx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTM4PXN0cnVjdCBwcHBfY2hhbm5lbCB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMzktXHR2b2lkXHRcdCpwcml2YXRlO1x0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo0MDpcdGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsgLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXHRpbnRcdFx0bXR1O1x0XHQvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNjQ9c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OS1cdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTI1PXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEyOC1cdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBQUFAvUFBQb0UgUHJvdG9jb2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZ3VpZGVsaW5lcyBjbGVhcmx5IHN0YXRlIEkgY2FuJiMzOTt0IGp1c3Qgd2F2ZSBvZmYgYW55IG1vZGlmaWNhdGlvbiwgZXZlbiBpZiBpdCYjMzk7cyBsYWJlbGVkICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciAmIzM0O3JlZmFjdG9yaW5nJiMzNDsuICBJZiB0aGUgY29kZSBpcyB0b3VjaGVkIGFuZCBleGVjdXRhYmxlLCBpdCAqbXVzdCogYmUgZnV6emVkLiBBbmQgdGhlc2UgUFBQIGFuZCBQUFBvRSBwcm90b2NvbHMsIGFsb25nIHdpdGggdGhlaXIgdmFyaWF0aW9ucyAoUFBUUCwgUFBQb0wyVFAsIFBQUG9BVE0sIHBwcF9hc3luYywgcHBwX3N5bmN0dHkpLCBhcmUgZGVmaW5pdGVseSB3aXRoaW4gc2NvcGUuIFRoZXkgYXJlIHN0YW5kYXJkIG5ldHdvcmtpbmcgcHJvdG9jb2xzL2RyaXZlcnMuICBUaGV5JiMzOTtyZSByZWFjaGFibGUgdmlhIHNvY2tldHMgYW5kIGAvZGV2L3BwcGAgaW9jdGxzIOKAkyB0aGF0JiMzOTtzIGEgZGlyZWN0IGVudHJ5IHBvaW50LCBzbyBXb3J0aEZ1enppbmcgaXMgYWJzb2x1dGVseSBgdHJ1ZWAuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBmdXp6aW5nLCBJIG5lZWQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudDogSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXNlIGZpbGVzIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyAoc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGVgLCBgbmV0L2F0bS9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvTWFrZWZpbGVgKSBhbmQgZ3JlcCBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYG5ldC9hdG0vcHBwb2F0bS5jYCwgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gT25jZSBJIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gcmVnYXJkaW5nIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIGZ1enphYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QUFApICYjNDM7PSBwcHBfZ2VuZXJpYy5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUFBQX0FTWU5DKSAmIzQzOz0gcHBwX2FzeW5jLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS04LW9iai0kKENPTkZJR19QUFBfQlNEQ09NUCkgJiM0Mzs9IGJzZF9jb21wLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19QUFBfREVGTEFURSkgJiM0Mzs9IHBwcF9kZWZsYXRlLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUFBQX01QUEUpICYjNDM7PSBwcHBfbXBwZS5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgJiM0Mzs9IHBwcF9zeW5jdHR5Lm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT1gpICYjNDM7PSBwcHBveC5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1BQUE9FKSAmIzQzOz0gcHBwb2Uub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19QUFRQKSAmIzQzOz0gcHB0cC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBCdWlsZCBDb25maWd1cmF0aW9ucyBmb3IgQVRNIGFuZCBMMlRQKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvYXRtL01ha2VmaWxlYCBhbmQgYG5ldC9sMnRwL01ha2VmaWxlYCBmaWxlcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgYmVpbmcgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwgdHJlZSwgYW5kLCBpbXBsaWNpdGx5LCBob3cgdGhleSYjMzk7cmUgKmludGVncmF0ZWQqLiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIHNwZWNpZmljIHRvIHRoZXNlIG5ldHdvcmsgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBhbnkgbnVhbmNlcyB0aGF0IGV4aXN0IGluIHRoZWlyIGJ1aWxkIHNldHVwLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2sgYnVpbGQgc3RyYXRlZ3kgdG9vLiBBbnkgaW50ZXJlc3RpbmcgZGlyZWN0aXZlcyB0aGVyZSB3aWxsIGJlIGEgYm9udXMhIEkgZXhwZWN0IHRoZXNlIGZpbGVzIHRvIHJldmVhbCBtdWNoIGFib3V0IG1vZHVsZSBvcHRpb25zLCBwZXJoYXBzIGV4cG9zaW5nIHdoZXRoZXIgcGFydGljdWxhciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgaG93IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcG9hdG0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTDJUUCBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvbDJ0cC9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgTDJUUCBtb2R1bGUgaXMgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBwdXQgdG9nZXRoZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucywgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCB2ZXJzaW9ucyBvciBjb25maWcgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBkZXBlbmRlbmNpZXMg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBUaW1lIHRvIGdldCBkb3duIGluIHRoZSB3ZWVkcyBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIE1ha2VmaWxlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL01ha2VmaWxlPTg9Q0ZMQUdTX2wydHBfY29yZS5vICYjNDM7PSAtSSQoc3JjKVxuLS1cbm5ldC9sMnRwL01ha2VmaWxlLTEwLSMgQnVpbGQgbDJ0cCBhcyBtb2R1bGVzIGlmIEwyVFAgaXMgTVxubmV0L2wydHAvTWFrZWZpbGU6MTE6b2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19QUFBPTDJUUCkpICYjNDM7PSBsMnRwX3BwcC5vXG5uZXQvbDJ0cC9NYWtlZmlsZS0xMi1vYmotJChzdWJzdCB5LCQoQ09ORklHX0wyVFApLCQoQ09ORklHX0wyVFBfSVApKSAmIzQzOz0gbDJ0cF9pcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTg5CgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZHMgYSBmZWxsb3cgZXhwZXJ0OgoKKipLY29uZmlnIERpdmUgZm9yIFBQUCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgUFBQIChQb2ludC10by1Qb2ludCBQcm90b2NvbCkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBwcm9qZWN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHZhcmlvdXMgUFBQIHN1Yi1wcm90b2NvbHMgYW5kIGltcGxlbWVudGF0aW9ucy4gTXkgdGFyZ2V0IGxpc3QgaXM6IGBQUFBgLCBgUFBQX0FTWU5DYCwgYFBQUF9TWU5DX1RUWWAsIGBQUFBPRWAsIGBQUFRQYCwgYFBQUE9BVE1gLCBhbmQgYFBQUE9MMlRQYC4KCk15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGVmZmljaWVudGx5IGRldGVybWluZSB3aGVyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBsaXZlIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHkuIE5vIG5lZWQgdG8gZ28gaHVudGluZyBtYW51YWxseSDigJMgYSBgZ3JlcGAgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggdG8gbG9jYXRlIGFuZCBwaW5wb2ludCB3aGVyZSBlYWNoIG9mIHRob3NlIHN5bWJvbHMgaXMgZGVmaW5lZC4gVGhhdCBzaG91bGQgcXVpY2tseSBleHBvc2UgYW55IGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvdGVudGlhbCBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlc2UgZGlmZmVyZW50IFBQUCB2YXJpYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIGVhY2ggZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGFmZmVjdHMgd2hldGhlciB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGVzZSBvcHRpb25zIGZpdCB0b2dldGhlciBhbmQgdWx0aW1hdGVseSBob3cgdGhlIHN5c3RlbSBzdXBwb3J0cyBhbmQgZW5hYmxlcyB0aGUgZGlmZmVyZW50IFBQUCBjb21tdW5pY2F0aW9uIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoUFBQfFBQUF9BU1lOQ3xQUFBfU1lOQ19UVFl8UFBQT0V8UFBUUHxQUFBPQVRNfFBQUE9MMlRQKVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTExMz1jb25maWcgUFBQT1hcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1Mz1jb25maWcgUFBQT0VfSEFTSF9CSVRTXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTYwLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYxOmNvbmZpZyBQUFRQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjItXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBJUHY0IChQUFRQKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3Mzpjb25maWcgUFBQT0wyVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODE9aWYgVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTg0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhlc2UgS2NvbmZpZyBlbnRyaWVzIGhpZ2hsaWdodGVkLCBhbmQgbXkgZmlyc3QgbW92ZSBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGVpciByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRyb2xzIHRoZXNlIHNldHRpbmdzLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvbnRleHQg4oCTIGEgZmV3IGxpbmVzIGFib3ZlIGFuZCBiZWxvdyBlYWNoIGhpZ2hsaWdodGVkIGVudHJ5IOKAkyBzcGVjaWZpY2FsbHkgc2VhcmNoaW5nIGZvciBhbnkgJiMzNDtkZXBlbmRzIG9uJiMzNDsgc3RhdGVtZW50cy4gVGhvc2UgZGVwZW5kZW5jaWVzIGFyZSB0aGUga2V5OyB0aGV5JiMzOTtsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgKG9yIGRpc2FibGVkKSBmb3IgdGhlc2UgcGFydGljdWxhciBzZXR0aW5ncyB0byBldmVuIGJlIGNvbnNpZGVyZWQsIG9yIHRvIHdvcmsgY29ycmVjdGx5LiBJdCYjMzk7cyB0aGUgYmVzdCBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBQUCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQUFBcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBTTEhDXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXG4gIDExOlx0XHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXG4gIDEyOlx0XHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXG4gIDEzOlx0XHQgIG90aGVyd2lzZSB5b3UgY2FuJiMzOTt0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXG4gIDE0Olx0XHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gdXNlIFBQUCwgeW91IG5lZWQgYW4gYWRkaXRpb25hbCBwcm9ncmFtIGNhbGxlZCBwcHBkLCBhdmFpbGFibGUgYXRcbiAgMTc6XHRcdCAgXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxuICAxODpcdFx0ICByZWNvbW1lbmRlZCBpbiBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1x1MDAzZS5cbiAgMTk6XHRcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIFRoZXJlIGFyZSBhY3R1YWxseSB0d28gdmVyc2lvbnMgb2YgUFBQOiB0aGUgdHJhZGl0aW9uYWwgUFBQIGZvclxuICAyMjpcdFx0ICBhc3luY2hyb25vdXMgbGluZXMsIHN1Y2ggYXMgcmVndWxhciBhbmFsb2cgcGhvbmUgbGluZXMsIGFuZFxuICAyMzpcdFx0ICBzeW5jaHJvbm91cyBQUFAgd2hpY2ggY2FuIGJlIHVzZWQgb3ZlciBkaWdpdGFsIElTRE4gbGluZXMgZm9yXG4gIDI0Olx0XHQgIGV4YW1wbGUuICBJZiB5b3Ugd2FudCB0byB1c2UgUFBQIG92ZXIgcGhvbmUgbGluZXMgb3Igb3RoZXJcbiAgMjU6XHRcdCAgYXN5bmNocm9ub3VzIHNlcmlhbCBsaW5lcywgeW91IG5lZWQgdG8gc2F5IFkgKG9yIE0pIGhlcmUgYW5kIGFsc28gdG9cbiAgMjY6XHRcdCAgdGhlIG5leHQgb3B0aW9uLCBcJiMzNDtQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXCYjMzQ7LiAgRm9yIFBQUCBvdmVyXG4gIDI3Olx0XHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcJiMzNDtTdXBwb3J0XG4gIDI4Olx0XHQgIHN5bmNocm9ub3VzIFBQUFwmIzM0OywgYmVsb3cuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHlvdSBzYWlkIFkgdG8gXCYjMzQ7VmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1wmIzM0OyBhYm92ZSwgdGhlblxuICAzMTpcdFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxuICAzMjpcdFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxuICAzMzpcdFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxuICAzNDpcdFxuICAzNTpcdGlmIFBQUFxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBQUFBfQlNEQ09NUFxuICAzODpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblwmIzM0O1xuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBTdXBwb3J0IGZvciB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzXG4gIDQxOlx0XHQgIHRoZSBMWlcgY29tcHJlc3Npb24gbWV0aG9kIHRvIGNvbXByZXNzIGVhY2ggUFBQIHBhY2tldCBiZWZvcmUgaXQgaXNcbiAgNDI6XHRcdCAgc2VudCBvdmVyIHRoZSB3aXJlLiBUaGUgbWFjaGluZSBhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBQUFAgbGlua1xuICA0MzpcdFx0ICAodXN1YWxseSB5b3VyIElTUCkgaGFzIHRvIHN1cHBvcnQgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxuICA0NDpcdFx0ICBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuIEV2ZW4gaWYgdGhleSBkb24mIzM5O3Qgc3VwcG9ydCBpdCxcbiAgNDU6XHRcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxuICA0NjpcdFxuICA0NzpcdFx0ICBUaGUgUFBQIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIChcJiMzNDtQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblwmIzM0OyxcbiAgNDg6XHRcdCAgYWJvdmUpIGlzIHByZWZlcmFibGUgdG8gQlNELUNvbXByZXNzLCBiZWNhdXNlIGl0IGNvbXByZXNzZXMgYmV0dGVyXG4gIDQ5Olx0XHQgIGFuZCBpcyBwYXRlbnQtZnJlZS5cbiAgNTA6XHRcbiAgNTE6XHRcdCAgTm90ZSB0aGF0IHRoZSBCU0QgY29tcHJlc3Npb24gY29kZSB3aWxsIGFsd2F5cyBiZSBjb21waWxlZCBhcyBhXG4gIDUyOlx0XHQgIG1vZHVsZTsgaXQgaXMgY2FsbGVkIGJzZF9jb21wIGFuZCB3aWxsIHNob3cgdXAgaW4gdGhlIGRpcmVjdG9yeVxuICA1MzpcdFx0ICBtb2R1bGVzIG9uY2UgeW91IGhhdmUgc2FpZCBcJiMzNDttYWtlIG1vZHVsZXNcJiMzNDsuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDU0Olx0XG4gIDU1Olx0Y29uZmlnIFBQUF9ERUZMQVRFXG4gIDU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblwmIzM0O1xuICA1NzpcdFx0c2VsZWN0IFpMSUJfSU5GTEFURVxuICA1ODpcdFx0c2VsZWN0IFpMSUJfREVGTEFURVxuICA1OTpcdFx0aGVscFxuICA2MDpcdFx0ICBTdXBwb3J0IGZvciB0aGUgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlcyB0aGVcbiAgNjE6XHRcdCAgRGVmbGF0ZSBhbGdvcml0aG0gKHRoZSBzYW1lIGFsZ29yaXRobSB0aGF0IGd6aXAgdXNlcykgdG8gY29tcHJlc3NcbiAgNjI6XHRcdCAgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpcyBzZW50IG92ZXIgdGhlIHdpcmUuICBUaGUgbWFjaGluZSBhdCB0aGVcbiAgNjM6XHRcdCAgb3RoZXIgZW5kIG9mIHRoZSBQUFAgbGluayAodXN1YWxseSB5b3VyIElTUCkgaGFzIHRvIHN1cHBvcnQgdGhlXG4gIDY0Olx0XHQgIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiAgRXZlbiBpZlxuICA2NTpcdFx0ICB0aGV5IGRvbiYjMzk7dCBzdXBwb3J0IGl0LCBpdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuXG4gIDY2Olx0XG4gIDY3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIFBQUF9GSUxURVJcbiAgNzA6XHRcdGJvb2wgXCYjMzQ7UFBQIGZpbHRlcmluZ1wmIzM0O1xuICA3MTpcdFx0aGVscFxuICA3MjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZSBwYWNrZXRzIHBhc3Npbmcgb3ZlclxuICA3MzpcdFx0ICBQUFAgaW50ZXJmYWNlcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoaWNoIHBhY2tldHMgY291bnQgYXNcbiAgNzQ6XHRcdCAgYWN0aXZpdHkgKGkuZS4gd2hpY2ggcGFja2V0cyB3aWxsIHJlc2V0IHRoZSBpZGxlIHRpbWVyIG9yIGJyaW5nIHVwXG4gIDc1Olx0XHQgIGEgZGVtYW5kLWRpYWxlZCBsaW5rKSBhbmQgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZHJvcHBlZCBlbnRpcmVseS5cbiAgNzY6XHRcdCAgWW91IG5lZWQgdG8gc2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHBhc3MtZmlsdGVyIGFuZFxuICA3NzpcdFx0ICBhY3RpdmUtZmlsdGVyIG9wdGlvbnMgdG8gcHBwZC5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODA6XHRcbiAgODE6XHRjb25maWcgUFBQX01QUEVcbiAgODI6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBNUFBFIGNvbXByZXNzaW9uIChlbmNyeXB0aW9uKVwmIzM0O1xuICA4MzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxuICA4NDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICA4NTpcdFx0aGVscFxuICA4NjpcdFx0ICBTdXBwb3J0IGZvciB0aGUgTVBQRSBFbmNyeXB0aW9uIHByb3RvY29sLCBhcyBlbXBsb3llZCBieSB0aGVcbiAgODc6XHRcdCAgTWljcm9zb2Z0IFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbC5cbiAgODg6XHRcbiAgODk6XHRcdCAgU2VlIGh0dHA6Ly9wcHRwY2xpZW50LnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIG9uXG4gIDkwOlx0XHQgIGNvbmZpZ3VyaW5nIFBQVFAgY2xpZW50cyBhbmQgc2VydmVycyB0byB1dGlsaXplIHRoaXMgbWV0aG9kLlxuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBQUFBfTVVMVElMSU5LXG4gIDkzOlx0XHRib29sIFwmIzM0O1BQUCBtdWx0aWxpbmsgc3VwcG9ydFwmIzM0O1xuICA5NDpcdFx0aGVscFxuICA5NTpcdFx0ICBQUFAgbXVsdGlsaW5rIGlzIGEgcHJvdG9jb2wgKGRlZmluZWQgaW4gUkZDIDE5OTApIHdoaWNoIGFsbG93cyB5b3VcbiAgOTY6XHRcdCAgdG8gY29tYmluZSBzZXZlcmFsIChsb2dpY2FsIG9yIHBoeXNpY2FsKSBsaW5lcyBpbnRvIG9uZSBsb2dpY2FsIFBQUFxuICA5NzpcdFx0ICBjb25uZWN0aW9uLCBzbyB0aGF0IHlvdSBjYW4gdXRpbGl6ZSB5b3VyIGZ1bGwgYmFuZHdpZHRoLlxuICA5ODpcdFxuICA5OTpcdFx0ICBUaGlzIGhhcyB0byBiZSBzdXBwb3J0ZWQgYXQgdGhlIG90aGVyIGVuZCBhcyB3ZWxsIGFuZCB5b3UgbmVlZCBhXG4gMTAwOlx0XHQgIHZlcnNpb24gb2YgdGhlIHBwcGQgZGFlbW9uIHdoaWNoIHVuZGVyc3RhbmRzIHRoZSBtdWx0aWxpbmsgcHJvdG9jb2wuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRlbHZpbmcgaW50byBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBQUFAgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHNldCB1cCwgd2hhdCB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgYW5kIGV4dGVuZGluZyB0aGUgbmV0d29ya2luZyBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTA1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMDM6XHRcbiAxMDQ6XHRjb25maWcgUFBQT0FUTVxuIDEwNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4gMTA2Olx0XHRkZXBlbmRzIG9uIEFUTVxuIDEwNzpcdFx0aGVscFxuIDEwODpcdFx0ICBTdXBwb3J0IFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGVuY2Fwc3VsYXRlZCBpbiBBVE0gZnJhbWVzLlxuIDEwOTpcdFx0ICBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCBjb21wbHkgd2l0aCBzZWN0aW9uIDggb2YgUkZDMjM2NCxcbiAxMTA6XHRcdCAgd2hpY2ggY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgaWYgdGhlIEFUTSBwZWVyIGxvc2VzIHN0YXRlIGFuZFxuIDExMTpcdFx0ICBjaGFuZ2VzIGl0cyBlbmNhcHN1bGF0aW9uIHVuaWxhdGVyYWxseS5cbiAxMTI6XHRcbiAxMTM6XHRjb25maWcgUFBQT1hcbiAxMTQ6XHRcdHRyaXN0YXRlXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIFBQUE9FXG4gMTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuIDExODpcdFx0c2VsZWN0IFBQUE9YXG4gMTE5Olx0XHRoZWxwXG4gMTIwOlx0XHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxuIDEyMTpcdFxuIDEyMjpcdFx0ICBUbyB3b3JrIGluIGNsaWVudCBtb2RlLCBwcHBkIHZlcnNpb24gMi40LjIgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuXG4gMTIzOlx0XHQgIFRvIHdvcmsgaW4gc2VydmVyIG1vZGUsIHRoZSBwcHBvZS1zZXJ2ZXIgY29tbWFuZCBmcm9tIHRoZSBSUC1QUFBvRVxuIDEyNDpcdFx0ICBwYWNrYWdlIGlzIGFsc28gcmVxdWlyZWQsIGF2YWlsYWJsZSBhdFxuIDEyNTpcdFx0ICBcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cdTAwM2UuXG4gMTI2Olx0XG4gMTI3Olx0Y2hvaWNlXG4gMTI4Olx0XHRwcm9tcHQgXCYjMzQ7TnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1wmIzM0O1xuIDEyOTpcdFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxuIDEzMDpcdFx0ZGVwZW5kcyBvbiBQUFBPRVxuIDEzMTpcdFx0aGVscFxuIDEzMjpcdFx0XHRTZWxlY3QgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIGhhc2hpbmcgUFBQb0UgaW50ZXJmYWNlcy5cbiAxMzM6XHRcbiAxMzQ6XHRcdFx0TGFyZ2VyIHNpemVzIHJlZHVjZXMgdGhlIHJpc2sgb2YgaGFzaCBjb2xsaXNpb25zIGF0IHRoZSBjb3N0XG4gMTM1Olx0XHRcdG9mIHNsaWdodGx5IGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UuXG4gMTM2Olx0XG4gMTM3Olx0XHRcdFRoaXMgaGFzaCB0YWJsZSBpcyBvbiBhIHBlciBvdXRlciBldGhlcm5ldCBpbnRlcmZhY2UuXG4gMTM4Olx0XG4gMTM5Olx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXG4gMTQwOlx0XHRib29sIFwmIzM0OzEgYml0ICgyIGJ1Y2tldHMpXCYjMzQ7XG4gMTQxOlx0XG4gMTQyOlx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXG4gMTQzOlx0XHRib29sIFwmIzM0OzIgYml0cyAoNCBidWNrZXRzKVwmIzM0O1xuIDE0NDpcdFxuIDE0NTpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxuIDE0NjpcdFx0Ym9vbCBcJiMzNDs0IGJpdHMgKDE2IGJ1Y2tldHMpXCYjMzQ7XG4gMTQ3Olx0XG4gMTQ4Olx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XG4gMTQ5Olx0XHRib29sIFwmIzM0OzggYml0cyAoMjU2IGJ1Y2tldHMpXCYjMzQ7XG4gMTUwOlx0XG4gMTUxOlx0ZW5kY2hvaWNlXG4gMTUyOlx0XG4gMTUzOlx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU1xuIDE1NDpcdFx0aW50XG4gMTU1Olx0XHRkZWZhdWx0IDEgaWYgUFBQT0VfSEFTSF9CSVRTXzFcbiAxNTY6XHRcdGRlZmF1bHQgMiBpZiBQUFBPRV9IQVNIX0JJVFNfMlxuIDE1NzpcdFx0ZGVmYXVsdCA0IGlmIFBQUE9FX0hBU0hfQklUU180XG4gMTU4Olx0XHRkZWZhdWx0IDggaWYgUFBQT0VfSEFTSF9CSVRTXzhcbiAxNTk6XHRcdGRlZmF1bHQgNFxuIDE2MDpcdFxuIDE2MTpcdGNvbmZpZyBQUFRQXG4gMTYyOlx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBJUHY0IChQUFRQKVwmIzM0O1xuIDE2MzpcdFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbiAxNjQ6XHRcdHNlbGVjdCBQUFBPWFxuIDE2NTpcdFx0aGVscFxuIDE2NjpcdFx0ICBTdXBwb3J0IGZvciBQUFAgb3ZlciBJUHY0LihQb2ludC10by1Qb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wpXG4gMTY3Olx0XG4gMTY4Olx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBwcGQgcGx1Z2luIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUgb3JcbiAxNjk6XHRcdCAgbW9kaWZpZWQgcHB0cGQgKHBvcHRvcCkgdG8gd29yayBpbiBzZXJ2ZXIgbW9kZS5cbiAxNzA6XHRcdCAgU2VlIGh0dHA6Ly9hY2NlbC1wcHRwLnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIGhvdyB0b1xuIDE3MTpcdFx0ICB1dGlsaXplIHRoaXMgbW9kdWxlLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBQUFBPTDJUUFxuIDE3NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgTDJUUFwmIzM0O1xuIDE3NTpcdFx0ZGVwZW5kcyBvbiBMMlRQXG4gMTc2Olx0XHRzZWxlY3QgUFBQT1hcbiAxNzc6XHRcdGhlbHBcbiAxNzg6XHRcdCAgU3VwcG9ydCBmb3IgUFBQLW92ZXItTDJUUCBzb2NrZXQgZmFtaWx5LiBMMlRQIGlzIGEgcHJvdG9jb2xcbiAxNzk6XHRcdCAgdXNlZCBieSBJU1BzIGFuZCBlbnRlcnByaXNlcyB0byB0dW5uZWwgUFBQIHRyYWZmaWMgb3ZlciBVRFBcbiAxODA6XHRcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXG4gMTgxOlx0aWYgVFRZXG4gMTgyOlx0XG4gMTgzOlx0Y29uZmlnIFBQUF9BU1lOQ1xuIDE4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuIDE4NTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzdGFuZGFyZFxuIDE4ODpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzdWNoIGFzIENPTTEgb3IgQ09NMiBvbiBhIFBDLiAgSWYgeW91IHVzZVxuIDE4OTpcdFx0ICBhIG1vZGVtIChub3QgYSBzeW5jaHJvbm91cyBvciBJU0ROIG1vZGVtKSB0byBjb250YWN0IHlvdXIgSVNQLCB5b3VcbiAxOTA6XHRcdCAgbmVlZCB0aGlzIG9wdGlvbi5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAxOTM6XHRcbiAxOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxOTU6XHRcbiAxOTY6XHRjb25maWcgUFBQX1NZTkNfVFRZXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcbiAyMDA6XHRcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0MwoJCQkJCQkJb3V0cHV0OiAzNjAKCQkJCQkJCXRob3VnaHRzOiA5NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUFBQIENoYW5uZWwgUmVmYWN0b3JpbmcgVmVyaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBQUFAgY2hhbm5lbCByZWZhY3RvcmluZywgZW5zdXJpbmcgdGhlIGNoYW5nZXMgYXJlIHNvdW5kIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBGaXJzdCwgSSYjMzk7bGwgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBQUFBgLCBgUFBQX0FTWU5DYCwgYFBQUF9TWU5DX1RUWWAsIGBQUFBPRWAsIGBQUFRQYCwgYFBQUE9BVE1gLCBgUFBQT0wyVFBgLCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcyBsaWtlIGBUVFlgLCBgQVRNYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgTDJUUGAuCgpOZXh0LCBJJiMzOTtsbCB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRob3NlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGxpbmcgdGhlIHJlZmFjdG9yZWQgb3BlcmF0aW9ucy4gSW4gYHBwcF9nZW5lcmljLmNgLCBJJiMzOTtsbCBsb29rIGF0IGBwcHBfaW9jdGxgLCBgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYHBwcF9wdXNoYCwgYHBwcF9tcF9leHBsb2RlYCwgYF9fcHBwX2NoYW5uZWxfcHVzaGAsIGFuZCBgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0YC4gVGhlbiwgaW4gYHBwcF9hc3luYy5jYCwgYHBwcF9hc3luY19pb2N0bGAgYW5kIGBwcHBfYXN5bmNfc2VuZGAuIFNpbWlsYXJseSwgaW4gYHBwcF9zeW5jdHR5LmNgLCBgcHBwX3N5bmNfaW9jdGxgIGFuZCBgcHBwX3N5bmNfc2VuZGA7IGluIGBwcHBvZS5jYCwgYHBwcG9lX3htaXRgIGFuZCBgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhgOyBpbiBgcHB0cC5jYCwgYHBwdHBfeG1pdGAgYW5kIGBwcHRwX3BwcF9pb2N0bGA7IGluIGBwcHBvYXRtLmNgLCBgcHBwb2F0bV9zZW5kYCBhbmQgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYDsgYW5kIGZpbmFsbHksIGluIGBsMnRwX3BwcC5jYCwgYHBwcG9sMnRwX3htaXRgLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXNlIGFyZSB0aGUgb25seSBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGUgY2hhbmdlLCBhbmQgdGhhdCB0aGUgY2hhbmdlIGlzIGFwcHJvcHJpYXRlbHkgbG9jYWxpemVkLiBUaGVzZSBhcmUgYWxsIHNwZWNpZmljLCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgaW1wbGVtZW50aW5nL2hhbmRsaW5nIHRoZSBQUFAgY2hhbm5lbCBvcGVyYXRpb25zIHRoYXQgd2VyZSByZWZhY3RvcmVkLgoKSSYjMzk7bGwgdGhlbiByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3Mgb25jZSBtb3JlIHRvIGVuc3VyZSBhbGwgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG5hbWVzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXggdG8gY29uZmlybSB0aGV5JiMzOTtyZSBhY2N1cmF0ZSBhbmQgY29uc2lzdGVudCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uCgpJJiMzOTtsbCBjb21waWxlIGEgY29tcGxldGUgbGlzdCBvZiAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IOKAkyBhbGwgdGhlIGZ1bmN0aW9ucyBpZGVudGlmaWVkIGFib3ZlIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIHBhcnQgb2YgdGhlIGludGVyZmFjZSByZWZhY3RvcmluZyDigJMgdG8gYmUgcmV2aWV3ZWQgaW4gZGVwdGg6IGBwcHBfYXN5bmNfaW9jdGxgLCBgcHBwX2FzeW5jX3NlbmRgLCBgcHBwX3N5bmNfaW9jdGxgLCBgcHBwX3N5bmNfc2VuZGAsIGBwcHBvZV94bWl0YCwgYHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYHBwdHBfeG1pdGAsIGBwcHRwX3BwcF9pb2N0bGAsIGBwcHBvYXRtX3NlbmRgLCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgLCBgcHBwb2wydHBfeG1pdGAsIGBwcHBfcHVzaGAsIGBwcHBfbXBfZXhwbG9kZWAsIGBfX3BwcF9jaGFubmVsX3B1c2hgLCBgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0YCwgYHBwcF9pb2N0bGAsIGFuZCBgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoYC4KCkNydWNpYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYWxsIHRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgaW4gLmMgZmlsZXMgYW5kIGFyZSBub24tc3RhdGljIChvciBhdCBsZWFzdCwgYXJlIHN0YXRpYyBmdW5jdGlvbnMgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgaGVuY2UgbmVlZGluZyBhZGRyZXNzZXMpLgoKSW4gY29uY2x1c2lvbiwgdGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIGludm9sdmVzIHJlZmFjdG9yaW5nIHRoZSBgcHBwX2NoYW5uZWxfb3BzYCBpbnRlcmZhY2UgdG8gcGFzcyB0aGUgY2hhbm5lbCYjMzk7cyBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBgcHBwX2dlbmVyaWNgLCBgcHBwX2FzeW5jYCwgYHBwcF9zeW5jdHR5YCwgYHBwcG9lYCwgYHBwdHBgLCBgcHBwb2F0bWAsIGFuZCBgbDJ0cF9wcHBgLiBUaGVzZSBjb21wb25lbnRzIGFyZSBrZXkgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBleHBvc2VkIHZpYSBzb2NrZXRzIGFuZCBgL2Rldi9wcHBgIGlvY3Rscy4gVGhlcmVmb3JlLCByaWdvcm91cyBmdXp6aW5nIGlzIHBhcmFtb3VudCB0byBkZXRlY3QgdHlwZSBzYWZldHkgaXNzdWVzLCByZWdyZXNzaW9ucywgYW5kIGVuc3VyZSB0aGF0IG5vIHVuZm9yZXNlZW4gYmVoYXZpb3JzIGFyZSBpbnRyb2R1Y2VkIGR1ZSB0byB0aGUgcmVmYWN0b3JpbmcuIE5vdyBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX0FTWU5DJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFBPRSYjMzQ7LAogICAgJiMzNDtQUFRQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7UFBQT0wyVFAmIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX2FzeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9hc3luY19zZW5kJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2VfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBvZV9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtwcHRwX3htaXQmIzM0OywKICAgICYjMzQ7cHB0cF9wcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fZGV2cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3htaXQmIzM0OywKICAgICYjMzQ7cHBwX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX21wX2V4cGxvZGUmIzM0OywKICAgICYjMzQ7X19wcHBfY2hhbm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9jaGFubmVsX2JyaWRnZV9pbnB1dCYjMzQ7LAogICAgJiMzNDtwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcHBwX2NoYW5uZWxfb3BzIGludGVyZmFjZSAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSB0byBwYXNzIHRoZSBjaGFubmVsIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiBwcHBfZ2VuZXJpYyBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgUFBQIGNoYW5uZWwgbW9kdWxlcyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIHBwcG9sMnRwKS4gVGhlc2UgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBwcm90b2NvbHMgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgL2Rldi9wcHAgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwcHBfY2hhbm5lbF9vcHMgaW50ZXJmYWNlIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIHRvIHBhc3MgdGhlIGNoYW5uZWwgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHBwcF9nZW5lcmljIGFzIHdlbGwgYXMgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBQUFAgY2hhbm5lbCBtb2R1bGVzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgcHBwb2wydHApLiBUaGVzZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHByb3RvY29scyBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXRzIGFuZCAvZGV2L3BwcCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgc2lnbmF0dXJlIHJlZmFjdG9yaW5nIGFjcm9zcyB0aGUgUFBQIHN1YnN5c3RlbTogYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrcyAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYXJlIHVwZGF0ZWQgdG8gYWNjZXB0IHRoZSBjaGFubmVsJiMzOTtzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlMjUxODliNmI4MDYwYzA0NGU1NjIxOGMyYTc3YTgzZTNmNWYwYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEyOjQyOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTsKICAqIFByb3RvdHlwZXMuCiAgKi8KIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogCiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLApAQCAtMzIxLDkgJiM0MzszMjAsOSBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJaW50IGVyciwgdmFsOwpAQCAtNTUwLDkgJiM0Mzs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9hc3luY19wdXNoKGFwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzkwLDcgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJCWVyciA9IC1FTk9UVFk7CiAJCQlpZiAoY2hhbiAmYW1wOyZhbXA7IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwpCi0JCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZyk7CiYjNDM7CQkJCWVyciA9IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwoY2hhbi0mZ3Q7cHJpdmF0ZSwgY21kLCBhcmcpOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGNoLSZndDtjaGFuX3NlbSk7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0xNjAzLDcgJiM0MzsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlpZiAoIWNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7CiYjNDM7CXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi0mZ3Q7cHJpdmF0ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7CkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKTsKJiM0MzsJCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBza2IpOwogCiBvdXQ6CiAJCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCS8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi8KIAkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtwY2gtJmd0O2ZpbGUueHEpIHx8Ci0JCQkhY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIGZyYWcpKQomIzQzOwkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbi0mZ3Q7cHJpdmF0ZSwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgZnJhZyk7CiAJCXBjaC0mZ3Q7aGFkX2ZyYWcgPSAxOwogCQlwICYjNDM7PSBmbGVuOwpAQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApCiAJaWYgKHBjaC0mZ3Q7Y2hhbikgewogCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkpIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cGNoLSZndDtmaWxlLnhxKTsKLQkJCWlmICghcGNoLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoLSZndDtjaGFuLCBza2IpKSB7CiYjNDM7CQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpIHsKIAkJCQkvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJCQlza2JfcXVldWVfaGVhZCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgc2tiKTsKIAkJCQlicmVhazsKQEAgLTIzMDAsNyAmIzQzOzIzMDAsNyBAQCBzdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtJmd0O2NoYW5fbmV0LCBwY2hiLSZndDtjaGFuX25ldCkpOwotCWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4sIHNrYikpCiYjNDM7CWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpCiAJCWtmcmVlX3NrYihza2IpOwogCiBvdXRsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAgewogICogUHJvdG90eXBlcy4KICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTsKQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC00OTEsOSAmIzQzOzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogICogYXQgc29tZSBsYXRlciB0aW1lLgogICovCiBzdGF0aWMgaW50Ci1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9zeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC04NDEsOSAmIzQzOzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tJmd0O3BwcG9lX2RldjsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKQEAgLTg5NSw5ICYjNDM7ODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsCi0JCQkJICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwppbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKQEAgLTE0Niw5ICYjNDM7MTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbywKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKIH0KIAotc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHB0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJmFtcDtwby0mZ3Q7cHJvdG8ucHB0cDsKQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybikKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsOwogc3RydWN0IHBwcF9jaGFubmVsX29wcyB7CiAJLyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuCiAJICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovCi0JaW50CSgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwomIzQzOwlpbnQJKCpzdGFydF94bWl0KSh2b2lkICosIHN0cnVjdCBza19idWZmICopOwogCS8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqLwotCWludAkoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKJiM0MzsJaW50CSgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAlpbnQJKCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKiwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKJiM0MzsJCQkJICAgICB2b2lkICopOwogfTsKIAogc3RydWN0IHBwcF9jaGFubmVsIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYykKIAlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLSZndDt1c2VyX2JhY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKLXsKLQlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi0mZ3Q7cHJpdmF0ZSk7Ci19Ci0KIC8qCiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZQogICogZG9lc24mIzM5O3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb20KQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpCiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy4KICAqLwogI2RlZmluZSBEUk9QX1BBQ0tFVCAxCi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7CiYjNDM7CXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgcmV0OwogCkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqLwotc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKJiM0MzsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUFBQSU9DR0ZMQUdTOgotCQlyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLSZndDtmbGFncywgKGludCBfX3VzZXIgKikgYXJnKQotCQkgICAgPyAtRUZBVUxUIDogMDsKJiM0MzsJCXJldHVybiBwdXRfdXNlcihwdmNjLSZndDtmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CiAJY2FzZSBQUFBJT0NTRkxBR1M6Ci0JCXJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIGdldF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gewogCXN0cnVjdCBzb2NrCQkqX19zazsJCS8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqLwogfTsKIAotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHsKIAkuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LApAQCAtMzI3LDkgJiM0MzszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwKICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5cwogICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci4KICAqLwotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7CiAJaW50IHVobGVuLCBoZWFkcm9vbTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgQ2hhbm5lbCBPcGVyYXRpb25zIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGZpcnN0LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHBhc3NlcyBgdm9pZCAqcHJpdmF0ZWAgaW5zdGVhZCBvZiBgc3RydWN0IHBwcF9jaGFubmVsICpgIHRvIGZ1bmN0aW9ucyBsaWtlIGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGAuIEl0IGFwcGVhcnMgdGhlIHJhdGlvbmFsZSBpcyB0byBzaW1wbGlmeSB0aGluZ3MgYnkgZGlyZWN0bHkgcHJvdmlkaW5nIHRoZSBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFubmVsLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gdXBkYXRlIGFsbCB0aGUgcmVsZXZhbnQgaW1wbGVtZW50YXRpb25zIGFjcm9zcyB0aGUgdmFyaW91cyBQUFAgZHJpdmVyczogYHBwcF9hc3luYy5jYCwgYHBwcF9nZW5lcmljLmNgLCBgcHBwX3N5bmN0dHkuY2AsIGBwcHBvZS5jYCwgYHBwdHAuY2AsIGBwcHBvYXRtLmNgLCBhbmQgYGwydHBfcHBwLmNgLiBXaXRoaW4gYHBwcF9nZW5lcmljLmNgLCB0aGUgcGF0Y2ggY29uc2lzdGVudGx5IHVwZGF0ZXMgY2FsbHMgbGlrZSBgY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZylgIHRvIGBjaGFuLSZndDtvcHMtJmd0O2lvY3RsKGNoYW4tJmd0O3ByaXZhdGUsIGNtZCwgYXJnKWAgYW5kIHNpbWlsYXIgc3Vic3RpdHV0aW9ucyBmb3IgdGhlIG90aGVyIGZ1bmN0aW9uIHBvaW50ZXJzLCBpbmNsdWRpbmcgdGhlIGBzdGFydF94bWl0YCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbnMuIEVhY2ggY2hhbm5lbCBpbXBsZW1lbnRhdGlvbiBhbHNvIHVwZGF0ZXMgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgdG8gbWF0Y2ggdGhpcyBuZXcgYHZvaWQgKnByaXZhdGVgIGFyZ3VtZW50LgoKTm93LCBteSBtYWluIGNvbmNlcm4gaXMgbWFraW5nIHN1cmUgdGhpcyBpcyBjb21wbGV0ZS4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCAqZXZlcnkqIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIHRyZWUgaGFzIGJlZW4gdXBkYXRlZCBjb3JyZWN0bHkuIEFueSBtaXNzZWQgaW5zdGFuY2Ugb3IgYSBtaXNhcHBsaWVkIGNoYW5nZSBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBncmVwIGFjcm9zcyB0aGUga2VybmVsIGZvciBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgdG8gZW5zdXJlIG5vIHN0cmF5IGltcGxlbWVudGF0aW9ucyBoYXZlIGJlZW4gb3Zlcmxvb2tlZCwgYW5kIHRoYXQgYWxsIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIFRoaXMgaXMgY3JpdGljYWwgZm9yIGNhdGNoaW5nIHBvdGVudGlhbCBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGNvdmVycyB0aGUgZW50aXJlIHN1cmZhY2UgYXJlYSBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfY2hhbm5lbF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMj1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDYtXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTg5PXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDUtXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDctXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9MjU9c3RydWN0IHBwcF9jaGFubmVsO1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI2LVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI4LVx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTM4PXN0cnVjdCBwcHBfY2hhbm5lbCB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMzktXHR2b2lkXHRcdCpwcml2YXRlO1x0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo0MDpcdGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsgLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXHRpbnRcdFx0bXR1O1x0XHQvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNjQ9c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OS1cdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTI1PXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEyOC1cdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDcKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogNzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gZm9yIFBQUCBDaGFubmVsIENhbGxiYWNrIFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCBhbmQgdXBkYXRlZCBldmVyeSBzaW5nbGUgYHBwcF9jaGFubmVsX29wc2AgaW5zdGFuY2UgaW4gdGhlIGtlcm5lbC4gTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMgYmFzZWQgb24gdGhlIEtNU0FOIGd1aWRlbGluZXMuIFJlbWVtYmVyLCB0aGUgcnVsZSBpcyBjbGVhcjogS01TQU4gaXMgYSByZXNvdXJjZSBob2cuIFdlIG9ubHkgdXNlIGl0IGlmIEtBU0FOIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMgKmNhbiYjMzk7dCogY2F0Y2ggYSBwb3RlbnRpYWwgaXNzdWUuIEl0JiMzOTtzIGZvciB0aG9zZSBpbnNpZGlvdXMsIHNpbGVudCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvci4KClRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IHNwZWNpZmljOiBpcyB0aGUgcGF0Y2ggdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzPwoKSW4gdGhpcyBjYXNlLCB0aGlzIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3Jpbmcgb2YgUFBQIGNoYW5uZWwgY2FsbGJhY2sgc2lnbmF0dXJlcy4gV2UmIzM5O3JlIGNoYW5naW5nIHRoZSBjYWxsIHN0cnVjdHVyZSBmcm9tIGBjaGFuLSZndDtvcHMtJmd0O2Z1bmMoY2hhbiwgLi4uKWAgd2l0aCB0aGUgaW50ZXJuYWwgcmV0cmlldmFsIG9mIGBhcCA9IGNoYW4tJmd0O3ByaXZhdGVgIHRvIHNpbXBseSBwYXNzaW5nIGBjaGFuLSZndDtwcml2YXRlYCBkaXJlY3RseSB0byBgY2hhbi0mZ3Q7b3BzLSZndDtmdW5jKGNoYW4tJmd0O3ByaXZhdGUsIC4uLilgLiBUaGF0JiMzOTtzIGl0LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bjoKCiogICBBcmUgd2UgaW50cm9kdWNpbmcgb3IgbW9kaWZ5aW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLiBUaGUgYGNoYW4tJmd0O3ByaXZhdGVgIGRhdGEgaXMgYWxyZWFkeSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCB1c2VkIGFzIG5lZWRlZCwgYW5kIHRoZXJlJiMzOTtzIG5vIGNoYW5nZSB0byB3aGF0JiMzOTtzICpzZW50KiB0byB1c2Vyc3BhY2UuIEZvciBleGFtcGxlLCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgIHN0aWxsIGZ1bmN0aW9ucyBhcyBpdCBkaWQuCiogICBBcmUgdGhlcmUgYW55IG5ldyBjb25kaXRpb25hbHMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4gYGNoYW4tJmd0O3ByaXZhdGVgIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb24gY2hhbm5lbCByZWdpc3RyYXRpb24uIEl0IHdhcyBhbHJlYWR5IGJlaW5nIGRlcmVmZXJlbmNlZCBpbnNpZGUgZWFjaCBjYWxsYmFjayBwcmlvciB0byB0aGlzIGNoYW5nZS4KKiAgIEFyZSB3ZSBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBhdCBhbGwuCiogICBBcmUgd2UgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBObyBhZ2Fpbi4KCk9uIHRoZSBmbGlwIHNpZGUsIHdlIGtub3cgd2UgKmRvbiYjMzk7dCogbmVlZCBLTVNBTiBpZiB0aGUgY2hhbmdlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSDigJMgdGhpbmdzIEtBU0FOIGFuZCBmcmllbmRzIGhhbmRsZSBwZXJmZWN0bHkgd2VsbC4gVGhlIGNvZGUgZG9lc24mIzM5O3QgdG91Y2ggdGhvc2UgaXNzdWVzLiBXZSYjMzk7cmUgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdGhhdCBhcmVuJiMzOTt0IGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAodXNpbmcgdGhlIHN0YW5kYXJkIHByYWN0aWNlcykuIFRoZSBwYXRjaCBhYnNvbHV0ZWx5IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLgoKT2theSwgbGV0JiMzOTtzIGRvIGEgcXVpY2sgZmluYWwgcnVuLXRocm91Z2ggdG8gbWFrZSBpdCBhbGwgY3J5c3RhbCBjbGVhcjoKMS4gIFRoZSBwYXRjaCByZWZhY3RvcnMgUFBQIGNoYW5uZWwgY2FsbGJhY2tzIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGBmaWxsX2ZvcndhcmRfcGF0aGApIHRvIHJlY2VpdmUgYGNoYW4tJmd0O3ByaXZhdGVgIChgdm9pZCAqYCkgaW5zdGVhZCBvZiBgc3RydWN0IHBwcF9jaGFubmVsICpgLgoyLiAgVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsL3NpZ25hdHVyZSByZWZhY3RvcmluZywgd2l0aCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgaW5pdGlhbGl6YXRpb24sIG1lbW9yeSBjb3B5IGJvdW5kcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS4KMy4gIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlc3VsdGluZyBmcm9tIHBvaW50ZXIgbWlzbWF0Y2hlcyBvciBOVUxMIHBvaW50ZXJzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHR5cGUgY29uZnVzaW9uIGlmIGFueSkuCjQuICBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2sgdmFyaWFibGVzLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocyBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGNyZWF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb2ludGVyLXJlbGF0ZWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2sgdmFyaWFibGVzLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocyBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGNyZWF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb2ludGVyLXJlbGF0ZWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQyOjUwLjI5NDgwNTcxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTgwNTEwMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0FTWU5DXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUE9FXCIsXG4gICAgXCJQUFRQXCIsXG4gICAgXCJQUFBPQVRNXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJMMlRQXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfYXN5bmNfaW9jdGxcIixcbiAgICBcInBwcF9hc3luY19zZW5kXCIsXG4gICAgXCJwcHBfc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwb2VfeG1pdFwiLFxuICAgIFwicHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwdHBfeG1pdFwiLFxuICAgIFwicHB0cF9wcHBfaW9jdGxcIixcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9kZXZwcHBfaW9jdGxcIixcbiAgICBcInBwcG9sMnRwX3htaXRcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfbXBfZXhwbG9kZVwiLFxuICAgIFwiX19wcHBfY2hhbm5lbF9wdXNoXCIsXG4gICAgXCJwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRcIixcbiAgICBcInBwcF9pb2N0bFwiLFxuICAgIFwicHBwX2ZpbGxfZm9yd2FyZF9wYXRoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBwcF9jaGFubmVsX29wcyBpbnRlcmZhY2UgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgdG8gcGFzcyB0aGUgY2hhbm5lbCBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4gcHBwX2dlbmVyaWMgYXMgd2VsbCBhcyBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIFBQUCBjaGFubmVsIG1vZHVsZXMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBwcHBvbDJ0cCkuIFRoZXNlIG5ldHdvcmtpbmcgZHJpdmVycyBhbmQgcHJvdG9jb2xzIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldHMgYW5kIC9kZXYvcHBwIGlvY3RscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0Mjo1MC4yOTQ4MjE1MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzg5OTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJlMjUxODliNmI4MDYwYzA0NGU1NjIxOGMyYTc3YTgzZTNmNWYwYjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxMjo0Mjo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lNzNiMGZjZTg2YjkxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbkBAIC05MSwxMyArOTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcXG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xcbitzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxcbiBcXHRcXHRcXHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG4rc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbiBcXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG5AQCAtMzIxLDkgKzMyMCw5IEBAIHBwcF9hc3luY19pbml0KHZvaWQpXFxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxcbiAgKi9cXG4gc3RhdGljIGludFxcbi1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4rcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuLVxcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XFxuIFxcdGludCBfX3VzZXIgKnAgPSBhcmdwO1xcbiBcXHRpbnQgZXJyLCB2YWw7XFxuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFxuIFxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtNzkwLDcgKzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdFxcdGNoYW4gPSBwY2gtXFx1MDAzZWNoYW47XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9UVFk7XFxuIFxcdFxcdFxcdGlmIChjaGFuIFxcdTAwMjZcXHUwMDI2IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpXFxuLVxcdFxcdFxcdFxcdGVyciA9IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwoY2hhbiwgY21kLCBhcmcpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWlvY3RsKGNoYW4tXFx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWNoYW5fc2VtKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTYwMyw3ICsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0aWYgKCFjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4pO1xcbitcXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xcbkBAIC0xOTMyLDcgKzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXQgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcXG4rXFx0XFx0cmV0ID0gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYik7XFxuIFxcbiBvdXQ6XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWRvd25sKTtcXG5AQCAtMjE0Miw3ICsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdC8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi9cXG4gXFx0XFx0Y2hhbiA9IHBjaC1cXHUwMDNlY2hhbjtcXG4gXFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkgfHxcXG4tXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcXG4rXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLVxcdTAwM2Vwcml2YXRlLCBmcmFnKSlcXG4gXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSwgZnJhZyk7XFxuIFxcdFxcdHBjaC1cXHUwMDNlaGFkX2ZyYWcgPSAxO1xcbiBcXHRcXHRwICs9IGZsZW47XFxuQEAgLTIxNzUsNyArMjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdGlmIChwY2gtXFx1MDAzZWNoYW4pIHtcXG4gXFx0XFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkpIHtcXG4gXFx0XFx0XFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSk7XFxuLVxcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLCBza2IpKSB7XFxuK1xcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLVxcdTAwM2Vwcml2YXRlLCBza2IpKSB7XFxuIFxcdFxcdFxcdFxcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xcbiBcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2cGNoLVxcdTAwM2VmaWxlLnhxLCBza2IpO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC1cXHUwMDNlY2hhbl9uZXQsIHBjaGItXFx1MDAzZWNoYW5fbmV0KSk7XFxuLVxcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4sIHNrYikpXFxuK1xcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYikpXFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXG4gb3V0bDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XFxuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcXG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuK3BwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuLVxcdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuK1xcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XFxuIFxcdGludCBlcnIsIHZhbDtcXG4gXFx0dTMyIGFjY21bOF07XFxuIFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuK3BwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xcbiBcXG4gXFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuQEAgLTg0MSw5ICs4NDEsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XFxuICAqXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XFxuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxcbi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgKnByaXZhdGUpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcXG4gXFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcXHUwMDI2cG8tXFx1MDAzZXByb3RvLnBwdHA7XFxuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXFx1MDAyNnBvLVxcdTAwM2Vwcm90by5wcHRwO1xcbiBcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcXG4gc3RydWN0IHBwcF9jaGFubmVsX29wcyB7XFxuIFxcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxcbiBcXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cXG4tXFx0aW50XFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxuK1xcdGludFxcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG4gXFx0LyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgdGhhdCBoYXMgY29tZSBpbiB2aWEgL2Rldi9wcHAuICovXFxuLVxcdGludFxcdCgqaW9jdGwpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xcbitcXHRpbnRcXHQoKmlvY3RsKSh2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XFxuIFxcdGludFxcdCgqZmlsbF9mb3J3YXJkX3BhdGgpKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICosXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcXG4rXFx0XFx0XFx0XFx0ICAgICB2b2lkICopO1xcbiB9O1xcbiBcXG4gc3RydWN0IHBwcF9jaGFubmVsIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLXtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXFxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cXG5AQCAtMjg2LDkgKzI4MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxcbiAgKi9cXG4gI2RlZmluZSBEUk9QX1BBQ0tFVCAxXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XFxuK1xcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XFxuIFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbitcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xcbitcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuLVxcdFxcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuLVxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbitcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xcbiBcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4tXFx0XFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4tXFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuK1xcdFxcdHJldHVybiBnZXRfdXNlcihwdmNjLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NFxcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XFxuIFxcdHN0cnVjdCBzb2NrXFx0XFx0Kl9fc2s7XFx0XFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XFxuIFxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuQEAgLTMyNyw5ICszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4gICogdGhlIHNrYiBpdCBzdXBwbGllZCwgbm90IG91ciBjbG9uZWQgc2tiLiBTbyB3ZSB0YWtlIGNhcmUgdG8gYWx3YXlzXFxuICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuXFxuICAqL1xcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xcbiBcXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDtcXG4gXFx0aW50IHVobGVuLCBoZWFkcm9vbTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDI6NTAuNzI5NzIwOTc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA5OTkyMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9BU1lOQ1wiLFxuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBPRVwiLFxuICAgIFwiUFBUUFwiLFxuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiUFBQT0wyVFBcIixcbiAgICBcIkFUTVwiLFxuICAgIFwiTDJUUFwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX2FzeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBfYXN5bmNfc2VuZFwiLFxuICAgIFwicHBwX3N5bmNfaW9jdGxcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIixcbiAgICBcInBwcG9lX3htaXRcIixcbiAgICBcInBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHRwX3htaXRcIixcbiAgICBcInBwdHBfcHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fZGV2cHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvbDJ0cF94bWl0XCIsXG4gICAgXCJwcHBfcHVzaFwiLFxuICAgIFwicHBwX21wX2V4cGxvZGVcIixcbiAgICBcIl9fcHBwX2NoYW5uZWxfcHVzaFwiLFxuICAgIFwicHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0XCIsXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9maWxsX2ZvcndhcmRfcGF0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcHBwX2NoYW5uZWxfb3BzIGludGVyZmFjZSAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSB0byBwYXNzIHRoZSBjaGFubmVsIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiBwcHBfZ2VuZXJpYyBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgUFBQIGNoYW5uZWwgbW9kdWxlcyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIHBwcG9sMnRwKS4gVGhlc2UgbmV0d29ya2luZyBkcml2ZXJzIGFuZCBwcm90b2NvbHMgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgL2Rldi9wcHAgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmUyNTE4OWI2YjgwNjBjMDQ0ZTU2MjE4YzJhNzdhODNlM2Y1ZjBiMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTI6NDI6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbmluZGV4IGVhN2ZlOTYwOGZmZDYuLmU3M2IwZmNlODZiOTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuQEAgLTkxLDEzICs5MSwxMiBAQCBNT0RVTEVfQUxJQVNfTERJU0MoTl9QUFApO1xuICAqIFByb3RvdHlwZXMuXG4gICovXG4gc3RhdGljIGludCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApO1xuLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxuIFx0XHRcdCAgICBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbiBcbiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuQEAgLTMyMSw5ICszMjAsOSBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKVxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbkBAIC01NTAsOSArNTQ5LDkgQEAgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3BwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX2FzeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbkBAIC03OTAsNyArNzkwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdFx0ZXJyID0gLUVOT1RUWTtcbiBcdFx0XHRpZiAoY2hhbiBcdTAwMjZcdTAwMjYgY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpXG4tXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZyk7XG4rXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLVx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWNoYW5fc2VtKTtcbiBcdFx0fVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0aWYgKCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7XG4rXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuQEAgLTE5MzIsNyArMTkzMiw3IEBAIHBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyZXQgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYik7XG4rXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpO1xuIFxuIG91dDpcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbkBAIC0yMTQyLDcgKzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqL1xuIFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuLVx0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxuK1x0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4tXHUwMDNlcHJpdmF0ZSwgZnJhZykpXG4gXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIGZyYWcpO1xuIFx0XHRwY2gtXHUwMDNlaGFkX2ZyYWcgPSAxO1xuIFx0XHRwICs9IGZsZW47XG5AQCAtMjE3NSw3ICsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbiBcdGlmIChwY2gtXHUwMDNlY2hhbikge1xuIFx0XHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkpIHtcbiBcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSk7XG4tXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuK1x0XHRcdGlmICghcGNoLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSkge1xuIFx0XHRcdFx0LyogcHV0IHRoZSBwYWNrZXQgYmFjayBhbmQgdHJ5IGFnYWluIGxhdGVyICovXG4gXHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgc2tiKTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTIzMDAsNyArMjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVx1MDAzZWNoYW5fbmV0LCBwY2hiLVx1MDAzZWNoYW5fbmV0KSk7XG4tXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4sIHNrYikpXG4rXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSlcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gb3V0bDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtODEsOSArODEsOCBAQCBzdHJ1Y3Qgc3luY3BwcCB7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuQEAgLTMxMiw5ICszMTEsOSBAQCBwcHBfc3luY19pbml0KHZvaWQpXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4rcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5AQCAtNDkxLDkgKzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfc3luY19wdXNoKGFwKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCBiZjc0MTRiNDZhMjYwLi43NTg0NTM1MDM1MjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtODQxLDkgKzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHNlbmRzIFBQUCBmcmFtZSBvdmVyIFBQUG9FIHNvY2tldFxuICAqXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLXN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXHRzdHJ1Y3QgcHBwb2VfaGRyICpwaDtcbkBAIC04OTUsOSArODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuK1x0XHRcdFx0ICAgdm9pZCAqcHJpdmF0ZSlcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcbiBcdHJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfcHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcbiBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHtcbiBcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxuIFx0ICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovXG4tXHRpbnRcdCgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopO1xuK1x0aW50XHQoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gXHQvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi9cbi1cdGludFx0KCppb2N0bCkoc3RydWN0IHBwcF9jaGFubmVsICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4rXHRpbnRcdCgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiBcdGludFx0KCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4rXHRcdFx0XHQgICAgIHZvaWQgKik7XG4gfTtcbiBcbiBzdHJ1Y3QgcHBwX2NoYW5uZWwge1xuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbiBcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4te1xuLVx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4tfVxuLVxuIC8qXG4gICogV2UgY2FuJ3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cbkBAIC0yODYsOSArMjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXG4gICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJ3JlIHJlYWxseSBkb2luZy5cbiAgKi9cbiAjZGVmaW5lIERST1BfUEFDS0VUIDFcbi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG5AQCAtMzY2LDE2ICszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuK1x0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbitcbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFBQUElPQ0dGTEFHUzpcbi1cdFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIHB1dF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4tXHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4rXHRcdHJldHVybiBnZXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDtcbiBcdH1cbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZWY4ZmRmYWYwNTFkNC4uYzFjZGExZDdmYmY2YiAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbisrKyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24ge1xuIFx0c3RydWN0IHNvY2tcdFx0Kl9fc2s7XHRcdC8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqL1xuIH07XG4gXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xuIFx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbkBAIC0zMjcsOSArMzI3LDkgQEAgc3RhdGljIGludCBwcHBvbDJ0cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogdGhlIHNrYiBpdCBzdXBwbGllZCwgbm90IG91ciBjbG9uZWQgc2tiLiBTbyB3ZSB0YWtlIGNhcmUgdG8gYWx3YXlzXG4gICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci5cbiAgKi9cbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7XG4gXHRpbnQgdWhsZW4sIGhlYWRyb29tO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDI6NTAuNzI5NzIyODU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3MzMyMTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpdHMgZnV6emluZyBwb3RlbnRpYWwgYW5kIGhvdyB0byBiZXN0IGFwcHJvYWNoIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLCBhbmQgaWYgc28sIHdoYXQgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMgd291bGQgYmUgbW9zdCBlZmZlY3RpdmUuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgYHBwcGAgcmVsYXRlZCBmaWxlczogYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYGluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaGAsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFNvLCBpdCdzIGRlZmluaXRlbHkgc3ByZWFkaW5nIGFjcm9zcyB0aGUgUFBQIHN0YWNrLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGFsdGVyaW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2YgYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgYmVpbmcgdHdlYWtlZC4gVGhleSdyZSBjaGFuZ2luZyBmcm9tIHRha2luZyBhIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0byB0YWtpbmcgYSBgdm9pZCAqYCBpbnN0ZWFkLlxuXG5UaGlzIGFsc28gbWVhbnMgY29ycmVzcG9uZGluZyB1cGRhdGVzIGluIHRoZSBjYWxsZXIgc2l0ZXMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBub3cgcGFzc2luZyBgY2hhbi1cdTAwM2Vwcml2YXRlYCB0byB0aGVzZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBgY2hhbmAgaXRzZWxmIGluIGBwcHBfZ2VuZXJpYy5jYC4gQWxyaWdodCwgc28gdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgYWxzbyB1cGRhdGVkOiBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9hc3luY19zZW5kYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwcF9zeW5jX3NlbmRgLCBgcHBwb2VfeG1pdGAsIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHRwX3htaXRgLCBgcHB0cF9wcHBfaW9jdGxgLCBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCBhbmQgYHBwcG9sMnRwX3htaXRgIGFyZSBhbGwgYmVpbmcgdG91Y2hlZC5cblxuTm93LCBiZWZvcmUgSSBkZWNpZGUgb24gYSBmdXp6aW5nIHN0cmF0ZWd5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYSBjb21wcmVoZW5zaXZlIGNoYW5nZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgZW50aXJlIGNvZGViYXNlIHRvIHZlcmlmeSB0aGF0IG5vIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiBgcHBwX2NoYW5uZWxfb3BzYCBoYXZlIGJlZW4gbWlzc2VkLiBHb3R0YSB1c2UgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBlbHNlIHBvcHMgdXAhIEknbSBob3BpbmcgdGhpcyBpcyBhIGNvbXBsZXRlIGFuZCBjbGVhbiByZWZhY3RvciwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgdGhvcm91Z2ggY2hlY2suIFRoZW4gaXQncyB0aW1lIHRvIGNvbXBpbGUgaXQgYW5kIGNvbmZpcm0gaXQgYWxsIHdvcmtzIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjAxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDI6NTUuMDAzMDQ5NjE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzM2ODA3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQyOjU2Ljg3NjczNjM5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NzI2NDM0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgUFBQL1BQUG9FIFByb3RvY29scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBndWlkZWxpbmVzIGNsZWFybHkgc3RhdGUgSSBjYW4ndCBqdXN0IHdhdmUgb2ZmIGFueSBtb2RpZmljYXRpb24sIGV2ZW4gaWYgaXQncyBsYWJlbGVkIFwibm8gZnVuY3Rpb25hbCBjaGFuZ2VcIiBvciBcInJlZmFjdG9yaW5nXCIuICBJZiB0aGUgY29kZSBpcyB0b3VjaGVkIGFuZCBleGVjdXRhYmxlLCBpdCAqbXVzdCogYmUgZnV6emVkLiBBbmQgdGhlc2UgUFBQIGFuZCBQUFBvRSBwcm90b2NvbHMsIGFsb25nIHdpdGggdGhlaXIgdmFyaWF0aW9ucyAoUFBUUCwgUFBQb0wyVFAsIFBQUG9BVE0sIHBwcF9hc3luYywgcHBwX3N5bmN0dHkpLCBhcmUgZGVmaW5pdGVseSB3aXRoaW4gc2NvcGUuIFRoZXkgYXJlIHN0YW5kYXJkIG5ldHdvcmtpbmcgcHJvdG9jb2xzL2RyaXZlcnMuICBUaGV5J3JlIHJlYWNoYWJsZSB2aWEgc29ja2V0cyBhbmQgYC9kZXYvcHBwYCBpb2N0bHMg4oCTIHRoYXQncyBhIGRpcmVjdCBlbnRyeSBwb2ludCwgc28gV29ydGhGdXp6aW5nIGlzIGFic29sdXRlbHkgYHRydWVgLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBmdXp6aW5nLCBJIG5lZWQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudDogSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXNlIGZpbGVzIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyAoc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGVgLCBgbmV0L2F0bS9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvTWFrZWZpbGVgKSBhbmQgZ3JlcCBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgYGRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIGBkcml2ZXJzL25ldC9wcHAvcHB0cC5jYCwgYG5ldC9hdG0vcHBwb2F0bS5jYCwgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gT25jZSBJIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gcmVnYXJkaW5nIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjAwLjY0OTM4MjAxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM1OTQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QUFApICs9IHBwcF9nZW5lcmljLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUFBQX0FTWU5DKSArPSBwcHBfYXN5bmMub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS04LW9iai0kKENPTkZJR19QUFBfQlNEQ09NUCkgKz0gYnNkX2NvbXAub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19QUFBfREVGTEFURSkgKz0gcHBwX2RlZmxhdGUub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUFBQX01QUEUpICs9IHBwcF9tcHBlLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgKz0gcHBwX3N5bmN0dHkub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT1gpICs9IHBwcG94Lm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1BQUE9FKSArPSBwcHBvZS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19QUFRQKSArPSBwcHRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MDAuNzAxNzQ4MDc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4MzM5NTY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgQnVpbGQgQ29uZmlndXJhdGlvbnMgZm9yIEFUTSBhbmQgTDJUUCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYG5ldC9hdG0vTWFrZWZpbGVgIGFuZCBgbmV0L2wydHAvTWFrZWZpbGVgIGZpbGVzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLCBhbmQsIGltcGxpY2l0bHksIGhvdyB0aGV5J3JlICppbnRlZ3JhdGVkKi4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBuZXR3b3JrIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgYW55IG51YW5jZXMgdGhhdCBleGlzdCBpbiB0aGVpciBidWlsZCBzZXR1cC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2sgYnVpbGQgc3RyYXRlZ3kgdG9vLiBBbnkgaW50ZXJlc3RpbmcgZGlyZWN0aXZlcyB0aGVyZSB3aWxsIGJlIGEgYm9udXMhIEkgZXhwZWN0IHRoZXNlIGZpbGVzIHRvIHJldmVhbCBtdWNoIGFib3V0IG1vZHVsZSBvcHRpb25zLCBwZXJoYXBzIGV4cG9zaW5nIHdoZXRoZXIgcGFydGljdWxhciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgaG93IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHRpbWUgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTA5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MDIuODg1MTQ2MjExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDM0NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzowMi45MzUxODY5MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjMyMjY4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTDJUUCBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgbmV0L2wydHAvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIEwyVFAgbW9kdWxlIGlzIGRlZmluZWQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgcHV0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWxkIG9wdGlvbnMsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgdmVyc2lvbnMgb3IgY29uZmlnIGZsYWdzLCBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYXJlYXMgcmlwZSBmb3Igb3B0aW1pemF0aW9uIG9yIHJlZmFjdG9yaW5nLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBkZXBlbmRlbmNpZXMg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBUaW1lIHRvIGdldCBkb3duIGluIHRoZSB3ZWVkcyBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIE1ha2VmaWxlIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjA3LjU2NzQ1OTQ3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzIxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibDJ0cF9wcHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvTWFrZWZpbGU9OD1DRkxBR1NfbDJ0cF9jb3JlLm8gKz0gLUkkKHNyYylcXG4tLVxcbm5ldC9sMnRwL01ha2VmaWxlLTEwLSMgQnVpbGQgbDJ0cCBhcyBtb2R1bGVzIGlmIEwyVFAgaXMgTVxcbm5ldC9sMnRwL01ha2VmaWxlOjExOm9iai0kKHN1YnN0IHksJChDT05GSUdfTDJUUCksJChDT05GSUdfUFBQT0wyVFApKSArPSBsMnRwX3BwcC5vXFxubmV0L2wydHAvTWFrZWZpbGUtMTItb2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19MMlRQX0lQKSkgKz0gbDJ0cF9pcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjA3LjYxNDMwMDM5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDAwMjIwMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZHMgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKktjb25maWcgRGl2ZSBmb3IgUFBQIENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFBQUCAoUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wpIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMgcHJvamVjdC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHZhcmlvdXMgUFBQIHN1Yi1wcm90b2NvbHMgYW5kIGltcGxlbWVudGF0aW9ucy4gTXkgdGFyZ2V0IGxpc3QgaXM6IGBQUFBgLCBgUFBQX0FTWU5DYCwgYFBQUF9TWU5DX1RUWWAsIGBQUFBPRWAsIGBQUFRQYCwgYFBQUE9BVE1gLCBhbmQgYFBQUE9MMlRQYC5cblxuTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZWZmaWNpZW50bHkgZGV0ZXJtaW5lIHdoZXJlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGxpdmUgd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gTm8gbmVlZCB0byBnbyBodW50aW5nIG1hbnVhbGx5IOKAkyBhIGBncmVwYCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGlzIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCB0byBsb2NhdGUgYW5kIHBpbnBvaW50IHdoZXJlIGVhY2ggb2YgdGhvc2Ugc3ltYm9scyBpcyBkZWZpbmVkLiBUaGF0IHNob3VsZCBxdWlja2x5IGV4cG9zZSBhbnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG90ZW50aWFsIGJ1aWxkIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBkaWZmZXJlbnQgUFBQIHZhcmlhdGlvbnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBhZmZlY3RzIHdoZXRoZXIgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyBob3cgdGhlc2Ugb3B0aW9ucyBmaXQgdG9nZXRoZXIgYW5kIHVsdGltYXRlbHkgaG93IHRoZSBzeXN0ZW0gc3VwcG9ydHMgYW5kIGVuYWJsZXMgdGhlIGRpZmZlcmVudCBQUFAgY29tbXVuaWNhdGlvbiBtZXRob2RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OSwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjExLjAxNDUyMzE5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0Njc2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChQUFB8UFBQX0FTWU5DfFBQUF9TWU5DX1RUWXxQUFBPRXxQUFRQfFBQUE9BVE18UFBQT0wyVFApXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTExMz1jb25maWcgUFBQT1hcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBFdGhlcm5ldFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1Mz1jb25maWcgUFBQT0VfSEFTSF9CSVRTXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjAtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYxOmNvbmZpZyBQUFRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTYyLVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBJUHY0IChQUFRQKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgxPWlmIFRUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoxMS4wNjk5OTU2NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2NDE3Mjc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGVzZSBLY29uZmlnIGVudHJpZXMgaGlnaGxpZ2h0ZWQsIGFuZCBteSBmaXJzdCBtb3ZlIGlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgdGhlc2Ugc2V0dGluZ3MuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBhbHdheXMgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb250ZXh0IOKAkyBhIGZldyBsaW5lcyBhYm92ZSBhbmQgYmVsb3cgZWFjaCBoaWdobGlnaHRlZCBlbnRyeSDigJMgc3BlY2lmaWNhbGx5IHNlYXJjaGluZyBmb3IgYW55IFwiZGVwZW5kcyBvblwiIHN0YXRlbWVudHMuIFRob3NlIGRlcGVuZGVuY2llcyBhcmUgdGhlIGtleTsgdGhleSdsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgKG9yIGRpc2FibGVkKSBmb3IgdGhlc2UgcGFydGljdWxhciBzZXR0aW5ncyB0byBldmVuIGJlIGNvbnNpZGVyZWQsIG9yIHRvIHdvcmsgY29ycmVjdGx5LiBJdCdzIHRoZSBiZXN0IGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MTIuOTM0MTcwNjE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG4gIDQxOlxcdFxcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xcbiAgNDI6XFx0XFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXFxuICA0MzpcXHRcXHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXFxuICA0NDpcXHRcXHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbid0IHN1cHBvcnQgaXQsXFxuICA0NTpcXHRcXHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0ICBUaGUgUFBQIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIChcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiLFxcbiAgNDg6XFx0XFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcXG4gIDQ5OlxcdFxcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgQlNEIGNvbXByZXNzaW9uIGNvZGUgd2lsbCBhbHdheXMgYmUgY29tcGlsZWQgYXMgYVxcbiAgNTI6XFx0XFx0ICBtb2R1bGU7IGl0IGlzIGNhbGxlZCBic2RfY29tcCBhbmQgd2lsbCBzaG93IHVwIGluIHRoZSBkaXJlY3RvcnlcXG4gIDUzOlxcdFxcdCAgbW9kdWxlcyBvbmNlIHlvdSBoYXZlIHNhaWQgXFxcIm1ha2UgbW9kdWxlc1xcXCIuIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1NDpcXHRcXG4gIDU1OlxcdGNvbmZpZyBQUFBfREVGTEFURVxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBEZWZsYXRlIGNvbXByZXNzaW9uXFxcIlxcbiAgNTc6XFx0XFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbiAgNTg6XFx0XFx0c2VsZWN0IFpMSUJfREVGTEFURVxcbiAgNTk6XFx0XFx0aGVscFxcbiAgNjA6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlcyB0aGVcXG4gIDYxOlxcdFxcdCAgRGVmbGF0ZSBhbGdvcml0aG0gKHRoZSBzYW1lIGFsZ29yaXRobSB0aGF0IGd6aXAgdXNlcykgdG8gY29tcHJlc3NcXG4gIDYyOlxcdFxcdCAgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpcyBzZW50IG92ZXIgdGhlIHdpcmUuICBUaGUgbWFjaGluZSBhdCB0aGVcXG4gIDYzOlxcdFxcdCAgb3RoZXIgZW5kIG9mIHRoZSBQUFAgbGluayAodXN1YWxseSB5b3VyIElTUCkgaGFzIHRvIHN1cHBvcnQgdGhlXFxuICA2NDpcXHRcXHQgIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiAgRXZlbiBpZlxcbiAgNjU6XFx0XFx0ICB0aGV5IGRvbid0IHN1cHBvcnQgaXQsIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgUFBQX0ZJTFRFUlxcbiAgNzA6XFx0XFx0Ym9vbCBcXFwiUFBQIGZpbHRlcmluZ1xcXCJcXG4gIDcxOlxcdFxcdGhlbHBcXG4gIDcyOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGUgcGFja2V0cyBwYXNzaW5nIG92ZXJcXG4gIDczOlxcdFxcdCAgUFBQIGludGVyZmFjZXMuICBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGljaCBwYWNrZXRzIGNvdW50IGFzXFxuICA3NDpcXHRcXHQgIGFjdGl2aXR5IChpLmUuIHdoaWNoIHBhY2tldHMgd2lsbCByZXNldCB0aGUgaWRsZSB0aW1lciBvciBicmluZyB1cFxcbiAgNzU6XFx0XFx0ICBhIGRlbWFuZC1kaWFsZWQgbGluaykgYW5kIHdoaWNoIHBhY2tldHMgYXJlIHRvIGJlIGRyb3BwZWQgZW50aXJlbHkuXFxuICA3NjpcXHRcXHQgIFlvdSBuZWVkIHRvIHNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBwYXNzLWZpbHRlciBhbmRcXG4gIDc3OlxcdFxcdCAgYWN0aXZlLWZpbHRlciBvcHRpb25zIHRvIHBwcGQuXFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDgwOlxcdFxcbiAgODE6XFx0Y29uZmlnIFBQUF9NUFBFXFxuICA4MjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIE1QUEUgY29tcHJlc3Npb24gKGVuY3J5cHRpb24pXFxcIlxcbiAgODM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgODQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgODU6XFx0XFx0aGVscFxcbiAgODY6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgTVBQRSBFbmNyeXB0aW9uIHByb3RvY29sLCBhcyBlbXBsb3llZCBieSB0aGVcXG4gIDg3OlxcdFxcdCAgTWljcm9zb2Z0IFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbC5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBTZWUgaHR0cDovL3BwdHBjbGllbnQuc291cmNlZm9yZ2UubmV0LyBmb3IgaW5mb3JtYXRpb24gb25cXG4gIDkwOlxcdFxcdCAgY29uZmlndXJpbmcgUFBUUCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHRvIHV0aWxpemUgdGhpcyBtZXRob2QuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBQUFBfTVVMVElMSU5LXFxuICA5MzpcXHRcXHRib29sIFxcXCJQUFAgbXVsdGlsaW5rIHN1cHBvcnRcXFwiXFxuICA5NDpcXHRcXHRoZWxwXFxuICA5NTpcXHRcXHQgIFBQUCBtdWx0aWxpbmsgaXMgYSBwcm90b2NvbCAoZGVmaW5lZCBpbiBSRkMgMTk5MCkgd2hpY2ggYWxsb3dzIHlvdVxcbiAgOTY6XFx0XFx0ICB0byBjb21iaW5lIHNldmVyYWwgKGxvZ2ljYWwgb3IgcGh5c2ljYWwpIGxpbmVzIGludG8gb25lIGxvZ2ljYWwgUFBQXFxuICA5NzpcXHRcXHQgIGNvbm5lY3Rpb24sIHNvIHRoYXQgeW91IGNhbiB1dGlsaXplIHlvdXIgZnVsbCBiYW5kd2lkdGguXFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdCAgVGhpcyBoYXMgdG8gYmUgc3VwcG9ydGVkIGF0IHRoZSBvdGhlciBlbmQgYXMgd2VsbCBhbmQgeW91IG5lZWQgYVxcbiAxMDA6XFx0XFx0ICB2ZXJzaW9uIG9mIHRoZSBwcHBkIGRhZW1vbiB3aGljaCB1bmRlcnN0YW5kcyB0aGUgbXVsdGlsaW5rIHByb3RvY29sLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoxMi45MzQzNTYyMzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0NDk4ODI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRlbHZpbmcgaW50byBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIFBQUCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHNldCB1cCwgd2hhdCB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgYW5kIGV4dGVuZGluZyB0aGUgbmV0d29ya2luZyBzdGFjay4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gdW5lYXJ0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjE1LjI3OTM0ODkyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuIDEyNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cXHUwMDNlLlxcbiAxMjY6XFx0XFxuIDEyNzpcXHRjaG9pY2VcXG4gMTI4OlxcdFxcdHByb21wdCBcXFwiTnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1xcXCJcXG4gMTI5OlxcdFxcdGRlZmF1bHQgUFBQT0VfSEFTSF9CSVRTXzRcXG4gMTMwOlxcdFxcdGRlcGVuZHMgb24gUFBQT0VcXG4gMTMxOlxcdFxcdGhlbHBcXG4gMTMyOlxcdFxcdFxcdFNlbGVjdCB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBmb3IgaGFzaGluZyBQUFBvRSBpbnRlcmZhY2VzLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRcXHRMYXJnZXIgc2l6ZXMgcmVkdWNlcyB0aGUgcmlzayBvZiBoYXNoIGNvbGxpc2lvbnMgYXQgdGhlIGNvc3RcXG4gMTM1OlxcdFxcdFxcdG9mIHNsaWdodGx5IGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UuXFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdFxcdFRoaXMgaGFzaCB0YWJsZSBpcyBvbiBhIHBlciBvdXRlciBldGhlcm5ldCBpbnRlcmZhY2UuXFxuIDEzODpcXHRcXG4gMTM5OlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxcbiAxNDA6XFx0XFx0Ym9vbCBcXFwiMSBiaXQgKDIgYnVja2V0cylcXFwiXFxuIDE0MTpcXHRcXG4gMTQyOlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxcbiAxNDM6XFx0XFx0Ym9vbCBcXFwiMiBiaXRzICg0IGJ1Y2tldHMpXFxcIlxcbiAxNDQ6XFx0XFxuIDE0NTpcXHRjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcXG4gMTQ2OlxcdFxcdGJvb2wgXFxcIjQgYml0cyAoMTYgYnVja2V0cylcXFwiXFxuIDE0NzpcXHRcXG4gMTQ4OlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxcbiAxNDk6XFx0XFx0Ym9vbCBcXFwiOCBiaXRzICgyNTYgYnVja2V0cylcXFwiXFxuIDE1MDpcXHRcXG4gMTUxOlxcdGVuZGNob2ljZVxcbiAxNTI6XFx0XFxuIDE1MzpcXHRjb25maWcgUFBQT0VfSEFTSF9CSVRTXFxuIDE1NDpcXHRcXHRpbnRcXG4gMTU1OlxcdFxcdGRlZmF1bHQgMSBpZiBQUFBPRV9IQVNIX0JJVFNfMVxcbiAxNTY6XFx0XFx0ZGVmYXVsdCAyIGlmIFBQUE9FX0hBU0hfQklUU18yXFxuIDE1NzpcXHRcXHRkZWZhdWx0IDQgaWYgUFBQT0VfSEFTSF9CSVRTXzRcXG4gMTU4OlxcdFxcdGRlZmF1bHQgOCBpZiBQUFBPRV9IQVNIX0JJVFNfOFxcbiAxNTk6XFx0XFx0ZGVmYXVsdCA0XFxuIDE2MDpcXHRcXG4gMTYxOlxcdGNvbmZpZyBQUFRQXFxuIDE2MjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgSVB2NCAoUFBUUClcXFwiXFxuIDE2MzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbiAxNjQ6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDE2NTpcXHRcXHRoZWxwXFxuIDE2NjpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIElQdjQuKFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbClcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBwcHBkIHBsdWdpbiB0byB3b3JrIGluIGNsaWVudCBtb2RlIG9yXFxuIDE2OTpcXHRcXHQgIG1vZGlmaWVkIHBwdHBkIChwb3B0b3ApIHRvIHdvcmsgaW4gc2VydmVyIG1vZGUuXFxuIDE3MDpcXHRcXHQgIFNlZSBodHRwOi8vYWNjZWwtcHB0cC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBob3cgdG9cXG4gMTcxOlxcdFxcdCAgdXRpbGl6ZSB0aGlzIG1vZHVsZS5cXG4gMTcyOlxcdFxcbiAxNzM6XFx0Y29uZmlnIFBQUE9MMlRQXFxuIDE3NDpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgTDJUUFxcXCJcXG4gMTc1OlxcdFxcdGRlcGVuZHMgb24gTDJUUFxcbiAxNzY6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDE3NzpcXHRcXHRoZWxwXFxuIDE3ODpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUC1vdmVyLUwyVFAgc29ja2V0IGZhbWlseS4gTDJUUCBpcyBhIHByb3RvY29sXFxuIDE3OTpcXHRcXHQgIHVzZWQgYnkgSVNQcyBhbmQgZW50ZXJwcmlzZXMgdG8gdHVubmVsIFBQUCB0cmFmZmljIG92ZXIgVURQXFxuIDE4MDpcXHRcXHQgIHR1bm5lbHMuIEwyVFAgaXMgcmVwbGFjaW5nIFBQVFAgZm9yIFZQTiB1c2VzLlxcbiAxODE6XFx0aWYgVFRZXFxuIDE4MjpcXHRcXG4gMTgzOlxcdGNvbmZpZyBQUFBfQVNZTkNcXG4gMTg0OlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIlxcbiAxODU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAxODY6XFx0XFx0aGVscFxcbiAxODc6XFx0XFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzdGFuZGFyZFxcbiAxODg6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzdWNoIGFzIENPTTEgb3IgQ09NMiBvbiBhIFBDLiAgSWYgeW91IHVzZVxcbiAxODk6XFx0XFx0ICBhIG1vZGVtIChub3QgYSBzeW5jaHJvbm91cyBvciBJU0ROIG1vZGVtKSB0byBjb250YWN0IHlvdXIgSVNQLCB5b3VcXG4gMTkwOlxcdFxcdCAgbmVlZCB0aGlzIG9wdGlvbi5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE5NTpcXHRcXG4gMTk2OlxcdGNvbmZpZyBQUFBfU1lOQ19UVFlcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcXFwiXFxuIDE5ODpcXHRcXHRoZWxwXFxuIDE5OTpcXHRcXHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN5bmNocm9ub3VzXFxuIDIwMDpcXHRcXHQgIChIRExDKSB0dHkgZGV2aWNlcy4gVGhlc2UgZGV2aWNlcyBhcmUgb2Z0ZW4gdXNlZCBmb3IgaGlnaC1zcGVlZCBsZWFzZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MTUuMjc5NDM4OTI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NjAyMTIxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUFBQIENoYW5uZWwgUmVmYWN0b3JpbmcgVmVyaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgUFBQIGNoYW5uZWwgcmVmYWN0b3JpbmcsIGVuc3VyaW5nIHRoZSBjaGFuZ2VzIGFyZSBzb3VuZCBhbmQgZG9uJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBGaXJzdCwgSSdsbCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYFBQUGAsIGBQUFBfQVNZTkNgLCBgUFBQX1NZTkNfVFRZYCwgYFBQUE9FYCwgYFBQVFBgLCBgUFBQT0FUTWAsIGBQUFBPTDJUUGAsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzIGxpa2UgYFRUWWAsIGBBVE1gLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBMMlRQYC5cblxuTmV4dCwgSSdsbCB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRob3NlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGxpbmcgdGhlIHJlZmFjdG9yZWQgb3BlcmF0aW9ucy4gSW4gYHBwcF9nZW5lcmljLmNgLCBJJ2xsIGxvb2sgYXQgYHBwcF9pb2N0bGAsIGBwcHBfZmlsbF9mb3J3YXJkX3BhdGhgLCBgcHBwX3B1c2hgLCBgcHBwX21wX2V4cGxvZGVgLCBgX19wcHBfY2hhbm5lbF9wdXNoYCwgYW5kIGBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRgLiBUaGVuLCBpbiBgcHBwX2FzeW5jLmNgLCBgcHBwX2FzeW5jX2lvY3RsYCBhbmQgYHBwcF9hc3luY19zZW5kYC4gU2ltaWxhcmx5LCBpbiBgcHBwX3N5bmN0dHkuY2AsIGBwcHBfc3luY19pb2N0bGAgYW5kIGBwcHBfc3luY19zZW5kYDsgaW4gYHBwcG9lLmNgLCBgcHBwb2VfeG1pdGAgYW5kIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGA7IGluIGBwcHRwLmNgLCBgcHB0cF94bWl0YCBhbmQgYHBwdHBfcHBwX2lvY3RsYDsgaW4gYHBwcG9hdG0uY2AsIGBwcHBvYXRtX3NlbmRgIGFuZCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgOyBhbmQgZmluYWxseSwgaW4gYGwydHBfcHBwLmNgLCBgcHBwb2wydHBfeG1pdGAuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBjaGFuZ2UsIGFuZCB0aGF0IHRoZSBjaGFuZ2UgaXMgYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQuIFRoZXNlIGFyZSBhbGwgc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcvaGFuZGxpbmcgdGhlIFBQUCBjaGFubmVsIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIHJlZmFjdG9yZWQuXG5cbkknbGwgdGhlbiByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3Mgb25jZSBtb3JlIHRvIGVuc3VyZSBhbGwgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGVuYWJsZWQuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZXMgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCB0byBjb25maXJtIHRoZXkncmUgYWNjdXJhdGUgYW5kIGNvbnNpc3RlbnQgd2l0aCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uXG5cbkknbGwgY29tcGlsZSBhIGNvbXBsZXRlIGxpc3Qgb2YgXCJGb2N1c1N5bWJvbHNcIiDigJMgYWxsIHRoZSBmdW5jdGlvbnMgaWRlbnRpZmllZCBhYm92ZSB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgcmVmYWN0b3Jpbmcg4oCTIHRvIGJlIHJldmlld2VkIGluIGRlcHRoOiBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9hc3luY19zZW5kYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwcF9zeW5jX3NlbmRgLCBgcHBwb2VfeG1pdGAsIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHRwX3htaXRgLCBgcHB0cF9wcHBfaW9jdGxgLCBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9sMnRwX3htaXRgLCBgcHBwX3B1c2hgLCBgcHBwX21wX2V4cGxvZGVgLCBgX19wcHBfY2hhbm5lbF9wdXNoYCwgYHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dGAsIGBwcHBfaW9jdGxgLCBhbmQgYHBwcF9maWxsX2ZvcndhcmRfcGF0aGAuXG5cbkNydWNpYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBpbiAuYyBmaWxlcyBhbmQgYXJlIG5vbi1zdGF0aWMgKG9yIGF0IGxlYXN0LCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCBoZW5jZSBuZWVkaW5nIGFkZHJlc3NlcykuXG5cbkluIGNvbmNsdXNpb24sIHRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGludm9sdmVzIHJlZmFjdG9yaW5nIHRoZSBgcHBwX2NoYW5uZWxfb3BzYCBpbnRlcmZhY2UgdG8gcGFzcyB0aGUgY2hhbm5lbCdzIHByaXZhdGUgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBjaGFubmVsIHN0cnVjdHVyZS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGBwcHBfZ2VuZXJpY2AsIGBwcHBfYXN5bmNgLCBgcHBwX3N5bmN0dHlgLCBgcHBwb2VgLCBgcHB0cGAsIGBwcHBvYXRtYCwgYW5kIGBsMnRwX3BwcGAuIFRoZXNlIGNvbXBvbmVudHMgYXJlIGtleSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIGV4cG9zZWQgdmlhIHNvY2tldHMgYW5kIGAvZGV2L3BwcGAgaW9jdGxzLiBUaGVyZWZvcmUsIHJpZ29yb3VzIGZ1enppbmcgaXMgcGFyYW1vdW50IHRvIGRldGVjdCB0eXBlIHNhZmV0eSBpc3N1ZXMsIHJlZ3Jlc3Npb25zLCBhbmQgZW5zdXJlIHRoYXQgbm8gdW5mb3Jlc2VlbiBiZWhhdmlvcnMgYXJlIGludHJvZHVjZWQgZHVlIHRvIHRoZSByZWZhY3RvcmluZy4gTm93IEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0MywiT3V0cHV0VG9rZW5zIjozNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoyMi43Mzk2NTM1NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk4MzY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfQVNZTkNcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiUFBQT0VcIixcbiAgICBcIlBQVFBcIixcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJBVE1cIixcbiAgICBcIkwyVFBcIixcbiAgICBcIk5FVF9JUEdSRV9ERU1VWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9hc3luY19pb2N0bFwiLFxuICAgIFwicHBwX2FzeW5jX3NlbmRcIixcbiAgICBcInBwcF9zeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBfc3luY19zZW5kXCIsXG4gICAgXCJwcHBvZV94bWl0XCIsXG4gICAgXCJwcHBvZV9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwicHB0cF94bWl0XCIsXG4gICAgXCJwcHRwX3BwcF9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2RldnBwcF9pb2N0bFwiLFxuICAgIFwicHBwb2wydHBfeG1pdFwiLFxuICAgIFwicHBwX3B1c2hcIixcbiAgICBcInBwcF9tcF9leHBsb2RlXCIsXG4gICAgXCJfX3BwcF9jaGFubmVsX3B1c2hcIixcbiAgICBcInBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dFwiLFxuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfZmlsbF9mb3J3YXJkX3BhdGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBwcF9jaGFubmVsX29wcyBpbnRlcmZhY2UgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgdG8gcGFzcyB0aGUgY2hhbm5lbCBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4gcHBwX2dlbmVyaWMgYXMgd2VsbCBhcyBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIFBQUCBjaGFubmVsIG1vZHVsZXMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBwcHBvbDJ0cCkuIFRoZXNlIG5ldHdvcmtpbmcgZHJpdmVycyBhbmQgcHJvdG9jb2xzIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldHMgYW5kIC9kZXYvcHBwIGlvY3RscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0FTWU5DXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUE9FXCIsXG4gICAgXCJQUFRQXCIsXG4gICAgXCJQUFBPQVRNXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJMMlRQXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfYXN5bmNfaW9jdGxcIixcbiAgICBcInBwcF9hc3luY19zZW5kXCIsXG4gICAgXCJwcHBfc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwb2VfeG1pdFwiLFxuICAgIFwicHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwdHBfeG1pdFwiLFxuICAgIFwicHB0cF9wcHBfaW9jdGxcIixcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9kZXZwcHBfaW9jdGxcIixcbiAgICBcInBwcG9sMnRwX3htaXRcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfbXBfZXhwbG9kZVwiLFxuICAgIFwiX19wcHBfY2hhbm5lbF9wdXNoXCIsXG4gICAgXCJwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRcIixcbiAgICBcInBwcF9pb2N0bFwiLFxuICAgIFwicHBwX2ZpbGxfZm9yd2FyZF9wYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwcHBfY2hhbm5lbF9vcHMgaW50ZXJmYWNlIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIHRvIHBhc3MgdGhlIGNoYW5uZWwgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHBwcF9nZW5lcmljIGFzIHdlbGwgYXMgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBQUFAgY2hhbm5lbCBtb2R1bGVzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgcHBwb2wydHApLiBUaGVzZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHByb3RvY29scyBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXRzIGFuZCAvZGV2L3BwcCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MjIuODI5NjQ2MTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0NTY1ODk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjIyLjgzMDI3Mjg2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDQ1MDI3MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZTI1MTg5YjZiODA2MGMwNDRlNTYyMThjMmE3N2E4M2UzZjVmMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMjo0Mjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuaW5kZXggZWE3ZmU5NjA4ZmZkNi4uZTczYjBmY2U4NmI5MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5AQCAtOTEsMTMgKzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19pbnB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIFxuIHN0YXRpYyB2b2lkIGFzeW5jX2xjcF9wZWVrKHN0cnVjdCBhc3luY3BwcCAqYXAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG5AQCAtMzIxLDkgKzMyMCw5IEBAIHBwcF9hc3luY19pbml0KHZvaWQpXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuK3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbiBcdGludCBfX3VzZXIgKnAgPSBhcmdwO1xuIFx0aW50IGVyciwgdmFsO1xuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfYXN5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uM2I4M2ZmOGNmNTg5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTc5MCw3ICs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0XHRlcnIgPSAtRU5PVFRZO1xuIFx0XHRcdGlmIChjaGFuIFx1MDAyNlx1MDAyNiBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bClcbi1cdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4sIGNtZCwgYXJnKTtcbitcdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4tXHUwMDNlcHJpdmF0ZSwgY21kLCBhcmcpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2gtXHUwMDNlY2hhbl9zZW0pO1xuIFx0XHR9XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE2MDMsNyArMTYwMyw3IEBAIHN0YXRpYyBpbnQgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRpZiAoIWNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTtcbitcdHJldHVybiBjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XG5AQCAtMTkzMiw3ICsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcbitcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIHNrYik7XG4gXG4gb3V0OlxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuQEAgLTIxNDIsNyArMjE0Miw3IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovXG4gXHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpIHx8XG4tXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgZnJhZykpXG4rXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBmcmFnKSlcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgZnJhZyk7XG4gXHRcdHBjaC1cdTAwM2VoYWRfZnJhZyA9IDE7XG4gXHRcdHAgKz0gZmxlbjtcbkBAIC0yMTc1LDcgKzIxNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF9jaGFubmVsX3B1c2goc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHBwcCAqcHBwKVxuIFx0aWYgKHBjaC1cdTAwM2VjaGFuKSB7XG4gXHRcdHdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSkge1xuIFx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKTtcbi1cdFx0XHRpZiAoIXBjaC1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaC1cdTAwM2VjaGFuLCBza2IpKSB7XG4rXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKSB7XG4gXHRcdFx0XHQvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiBcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtXHUwMDNlY2hhbl9uZXQsIHBjaGItXHUwMDNlY2hhbl9uZXQpKTtcbi1cdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbitcdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKVxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBvdXRsOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBzeW5jcHBwICphcCk7XG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0aW50IGVyciwgdmFsO1xuIFx0dTMyIGFjY21bOF07XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcbiBcdHBwcF9zeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC04NDEsOSArODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XG4gICpcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4rXHRcdFx0XHQgICB2b2lkICpwcml2YXRlKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXHUwMDNlcHBwb2VfZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG5pbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuQEAgLTE0Niw5ICsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLFxuIFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwdHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9IFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwdHA7XG5AQCAtNTczLDEwICs1NzMsOSBAQCBzdGF0aWMgaW50IHBwdHBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4pXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5pbmRleCAyZjYzZTlhNmNjODg5Li5kOWNmYjhlZjBmZmFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbkBAIC0yNywxMiArMjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsO1xuIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuIFx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4gXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cbi1cdGludFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4rXHRpbnRcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcdC8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqL1xuLVx0aW50XHQoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbitcdGludFx0KCppb2N0bCkodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xuIFx0aW50XHQoKmZpbGxfZm9yd2FyZF9wYXRoKShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICosXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbitcdFx0XHRcdCAgICAgdm9pZCAqKTtcbiB9O1xuIFxuIHN0cnVjdCBwcHBfY2hhbm5lbCB7XG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTkxLDExICs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxuIFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbi19XG4tXG4gLypcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXG4gICogZG9lc24ndCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbVxuQEAgLTI4Niw5ICsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxuICAqL1xuICNkZWZpbmUgRFJPUF9QQUNLRVQgMVxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbitcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4tc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHR1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuK1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuLVx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4tXHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuK1x0XHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHRjYXNlIFBQUElPQ1NGTEFHUzpcbi1cdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIGdldF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0fVxuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li5jMWNkYTFkN2ZiZjZiIDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9wcHAuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XG4gXHRzdHJ1Y3Qgc29ja1x0XHQqX19zaztcdFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG4gXHQuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LFxuQEAgLTMyNyw5ICszMjcsOSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcbiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247XG4gXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDtcbiBcdGludCB1aGxlbiwgaGVhZHJvb207XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoyMi44MzAyNzM4MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkzNDY2MzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGZpcnN0LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHBhc3NlcyBgdm9pZCAqcHJpdmF0ZWAgaW5zdGVhZCBvZiBgc3RydWN0IHBwcF9jaGFubmVsICpgIHRvIGZ1bmN0aW9ucyBsaWtlIGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGAuIEl0IGFwcGVhcnMgdGhlIHJhdGlvbmFsZSBpcyB0byBzaW1wbGlmeSB0aGluZ3MgYnkgZGlyZWN0bHkgcHJvdmlkaW5nIHRoZSBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFubmVsLlxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byB1cGRhdGUgYWxsIHRoZSByZWxldmFudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIHRoZSB2YXJpb3VzIFBQUCBkcml2ZXJzOiBgcHBwX2FzeW5jLmNgLCBgcHBwX2dlbmVyaWMuY2AsIGBwcHBfc3luY3R0eS5jYCwgYHBwcG9lLmNgLCBgcHB0cC5jYCwgYHBwcG9hdG0uY2AsIGFuZCBgbDJ0cF9wcHAuY2AuIFdpdGhpbiBgcHBwX2dlbmVyaWMuY2AsIHRoZSBwYXRjaCBjb25zaXN0ZW50bHkgdXBkYXRlcyBjYWxscyBsaWtlIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZylgIHRvIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLVx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKWAgYW5kIHNpbWlsYXIgc3Vic3RpdHV0aW9ucyBmb3IgdGhlIG90aGVyIGZ1bmN0aW9uIHBvaW50ZXJzLCBpbmNsdWRpbmcgdGhlIGBzdGFydF94bWl0YCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbnMuIEVhY2ggY2hhbm5lbCBpbXBsZW1lbnRhdGlvbiBhbHNvIHVwZGF0ZXMgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgdG8gbWF0Y2ggdGhpcyBuZXcgYHZvaWQgKnByaXZhdGVgIGFyZ3VtZW50LlxuXG5Ob3csIG15IG1haW4gY29uY2VybiBpcyBtYWtpbmcgc3VyZSB0aGlzIGlzIGNvbXBsZXRlLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0ICpldmVyeSogc2luZ2xlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgdHJlZSBoYXMgYmVlbiB1cGRhdGVkIGNvcnJlY3RseS4gQW55IG1pc3NlZCBpbnN0YW5jZSBvciBhIG1pc2FwcGxpZWQgY2hhbmdlIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIGdyZXAgYWNyb3NzIHRoZSBrZXJuZWwgZm9yIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCB0byBlbnN1cmUgbm8gc3RyYXkgaW1wbGVtZW50YXRpb25zIGhhdmUgYmVlbiBvdmVybG9va2VkLCBhbmQgdGhhdCBhbGwgZnVuY3Rpb24gcHJvdG90eXBlcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgY2F0Y2hpbmcgcG90ZW50aWFsIGlzc3Vlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggY292ZXJzIHRoZSBlbnRpcmUgc3VyZmFjZSBhcmVhIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjo0MzoyNy43NjQ5NDA0MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzM5MTMxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjQzOjI5LjQ5ODg2OTEyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzc2NDA5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gZm9yIFBQUCBDaGFubmVsIENhbGxiYWNrIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggYW5kIHVwZGF0ZWQgZXZlcnkgc2luZ2xlIGBwcHBfY2hhbm5lbF9vcHNgIGluc3RhbmNlIGluIHRoZSBrZXJuZWwuIE5vdywgbGV0J3MgY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMgYmFzZWQgb24gdGhlIEtNU0FOIGd1aWRlbGluZXMuIFJlbWVtYmVyLCB0aGUgcnVsZSBpcyBjbGVhcjogS01TQU4gaXMgYSByZXNvdXJjZSBob2cuIFdlIG9ubHkgdXNlIGl0IGlmIEtBU0FOIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMgKmNhbid0KiBjYXRjaCBhIHBvdGVudGlhbCBpc3N1ZS4gSXQncyBmb3IgdGhvc2UgaW5zaWRpb3VzLCBzaWxlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IuXG5cblRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IHNwZWNpZmljOiBpcyB0aGUgcGF0Y2ggdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzP1xuXG5JbiB0aGlzIGNhc2UsIHRoaXMgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiBQUFAgY2hhbm5lbCBjYWxsYmFjayBzaWduYXR1cmVzLiBXZSdyZSBjaGFuZ2luZyB0aGUgY2FsbCBzdHJ1Y3R1cmUgZnJvbSBgY2hhbi1cdTAwM2VvcHMtXHUwMDNlZnVuYyhjaGFuLCAuLi4pYCB3aXRoIHRoZSBpbnRlcm5hbCByZXRyaWV2YWwgb2YgYGFwID0gY2hhbi1cdTAwM2Vwcml2YXRlYCB0byBzaW1wbHkgcGFzc2luZyBgY2hhbi1cdTAwM2Vwcml2YXRlYCBkaXJlY3RseSB0byBgY2hhbi1cdTAwM2VvcHMtXHUwMDNlZnVuYyhjaGFuLVx1MDAzZXByaXZhdGUsIC4uLilgLiBUaGF0J3MgaXQuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bjpcblxuKiAgIEFyZSB3ZSBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vcGUuIFRoZSBgY2hhbi1cdTAwM2Vwcml2YXRlYCBkYXRhIGlzIGFscmVhZHkgYmVpbmcgcGFzc2VkIGFyb3VuZCBhbmQgdXNlZCBhcyBuZWVkZWQsIGFuZCB0aGVyZSdzIG5vIGNoYW5nZSB0byB3aGF0J3MgKnNlbnQqIHRvIHVzZXJzcGFjZS4gRm9yIGV4YW1wbGUsIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAgc3RpbGwgZnVuY3Rpb25zIGFzIGl0IGRpZC5cbiogICBBcmUgdGhlcmUgYW55IG5ldyBjb25kaXRpb25hbHMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4gYGNoYW4tXHUwMDNlcHJpdmF0ZWAgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBvbiBjaGFubmVsIHJlZ2lzdHJhdGlvbi4gSXQgd2FzIGFscmVhZHkgYmVpbmcgZGVyZWZlcmVuY2VkIGluc2lkZSBlYWNoIGNhbGxiYWNrIHByaW9yIHRvIHRoaXMgY2hhbmdlLlxuKiAgIEFyZSB3ZSBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBhdCBhbGwuXG4qICAgQXJlIHdlIG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8gYWdhaW4uXG5cbk9uIHRoZSBmbGlwIHNpZGUsIHdlIGtub3cgd2UgKmRvbid0KiBuZWVkIEtNU0FOIGlmIHRoZSBjaGFuZ2UgcHJpbWFyaWx5IHJpc2tzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgS0FTQU4gYW5kIGZyaWVuZHMgaGFuZGxlIHBlcmZlY3RseSB3ZWxsLiBUaGUgY29kZSBkb2Vzbid0IHRvdWNoIHRob3NlIGlzc3Vlcy4gV2UncmUgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdGhhdCBhcmVuJ3QgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkICh1c2luZyB0aGUgc3RhbmRhcmQgcHJhY3RpY2VzKS4gVGhlIHBhdGNoIGFic29sdXRlbHkgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS5cblxuT2theSwgbGV0J3MgZG8gYSBxdWljayBmaW5hbCBydW4tdGhyb3VnaCB0byBtYWtlIGl0IGFsbCBjcnlzdGFsIGNsZWFyOlxuMS4gIFRoZSBwYXRjaCByZWZhY3RvcnMgUFBQIGNoYW5uZWwgY2FsbGJhY2tzIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGBmaWxsX2ZvcndhcmRfcGF0aGApIHRvIHJlY2VpdmUgYGNoYW4tXHUwMDNlcHJpdmF0ZWAgKGB2b2lkICpgKSBpbnN0ZWFkIG9mIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuXG4yLiAgVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsL3NpZ25hdHVyZSByZWZhY3RvcmluZywgd2l0aCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgaW5pdGlhbGl6YXRpb24sIG1lbW9yeSBjb3B5IGJvdW5kcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS5cbjMuICBBbnkgcG90ZW50aWFsIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBwb2ludGVyIG1pc21hdGNoZXMgb3IgTlVMTCBwb2ludGVycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIChlLmcuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB0eXBlIGNvbmZ1c2lvbiBpZiBhbnkpLlxuNC4gIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwNywiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6NDM6MzUuODc1MjgxNjM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHNpZ25hdHVyZSByZWZhY3RvcmluZyBhY3Jvc3MgdGhlIFBQUCBzdWJzeXN0ZW06IGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBjYWxsYmFja3MgKGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGApIGFyZSB1cGRhdGVkIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgYHN0cnVjdCBwcHBfY2hhbm5lbCAqYC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzIG9yIGluZm8tbGVhayByaXNrcyBhcmUgY3JlYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvaW50ZXItcmVsYXRlZCByZWdyZXNzaW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[1] Phase: Succeeded StartedAt: 2026-09-05 12:43:47 +0000 UTC FinishedAt: 2026-09-05 12:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 12:43:47 +0000 UTC FinishedAt: 2026-09-05 12:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2] Phase: Succeeded StartedAt: 2026-09-05 12:43:47 +0000 UTC FinishedAt: 2026-09-05 16:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 12:43:47 +0000 UTC FinishedAt: 2026-09-05 16:23:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 12:43:47 +0000 UTC FinishedAt: 2026-09-05 12:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 12:43:47 +0000 UTC FinishedAt: 2026-09-05 12:43:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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-workflow4nrjb/series-workflow4nrjb-convert-artifact-2258512510/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 12:43:57 +0000 UTC FinishedAt: 2026-09-05 13:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 12:43:57 +0000 UTC FinishedAt: 2026-09-05 13:01:17 +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:*cef22ca6-109b-446c-8a81-3eb11d7ac43e,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-workflow4nrjb/series-workflow4nrjb-convert-artifact-2258512510/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": "77b5231c-ed73-49e8-8246-9572063aefed", "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-workflow4nrjb/series-workflow4nrjb-build-action-1527583332/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 12:43:57 +0000 UTC FinishedAt: 2026-09-05 13:01:07 +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:*cef22ca6-109b-446c-8a81-3eb11d7ac43e,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-workflow4nrjb/series-workflow4nrjb-convert-artifact-2258512510/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": "77b5231c-ed73-49e8-8246-9572063aefed", "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-workflow4nrjb/series-workflow4nrjb-build-action-1527583332/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:01:17 +0000 UTC FinishedAt: 2026-09-05 13:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:01:17 +0000 UTC FinishedAt: 2026-09-05 13:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:01:17 +0000 UTC FinishedAt: 2026-09-05 13:01:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:01:17 +0000 UTC FinishedAt: 2026-09-05 13:01:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-workflow4nrjb/series-workflow4nrjb-convert-artifact-2033991345/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:01:27 +0000 UTC FinishedAt: 2026-09-05 13:03:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:01:27 +0000 UTC FinishedAt: 2026-09-05 13:03:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77b5231c-ed73-49e8-8246-9572063aefed,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-workflow4nrjb/series-workflow4nrjb-build-action-1527583332/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-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:03:37 +0000 UTC FinishedAt: 2026-09-05 13:03:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:03:37 +0000 UTC FinishedAt: 2026-09-05 13:03:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:03:37 +0000 UTC FinishedAt: 2026-09-05 13:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:03:37 +0000 UTC FinishedAt: 2026-09-05 13:20:19 +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:*cef22ca6-109b-446c-8a81-3eb11d7ac43e,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-workflow4nrjb/series-workflow4nrjb-convert-artifact-2033991345/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": "fea048ea-8658-42f1-a299-f1164fb048e1", "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-workflow4nrjb/series-workflow4nrjb-build-action-4169104509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:03:37 +0000 UTC FinishedAt: 2026-09-05 13:20:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cef22ca6-109b-446c-8a81-3eb11d7ac43e,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-workflow4nrjb/series-workflow4nrjb-convert-artifact-2033991345/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": "fea048ea-8658-42f1-a299-f1164fb048e1", "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-workflow4nrjb/series-workflow4nrjb-build-action-4169104509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:20:19 +0000 UTC FinishedAt: 2026-09-05 13:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:20:19 +0000 UTC FinishedAt: 2026-09-05 13:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:20:19 +0000 UTC FinishedAt: 2026-09-05 13:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:20:19 +0000 UTC FinishedAt: 2026-09-05 13:22:00 +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:*fea048ea-8658-42f1-a299-f1164fb048e1,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-workflow4nrjb/series-workflow4nrjb-build-action-4169104509/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-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:09 +0000 UTC FinishedAt: 2026-09-05 16:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:09 +0000 UTC FinishedAt: 2026-09-05 16:23:54 +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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"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:*77b5231c-ed73-49e8-8246-9572063aefed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fea048ea-8658-42f1-a299-f1164fb048e1,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-workflow4nrjb/series-workflow4nrjb-build-action-1527583332/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-workflow4nrjb/series-workflow4nrjb-build-action-4169104509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:09 +0000 UTC FinishedAt: 2026-09-05 13:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:09 +0000 UTC FinishedAt: 2026-09-05 13:22:16 +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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"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-workflow4nrjb/series-workflow4nrjb-convert-artifact-1178129510/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:09 +0000 UTC FinishedAt: 2026-09-05 13:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:09 +0000 UTC FinishedAt: 2026-09-05 13:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:10 +0000 UTC FinishedAt: 2026-09-05 13:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:20 +0000 UTC FinishedAt: 2026-09-05 16:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nrjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"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":["ppp_async_ioctl","ppp_async_send","ppp_sync_ioctl","ppp_sync_send","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit","ppp_push","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_ioctl","ppp_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP","NET_IPGRE_DEMUX"],"series_id":"af95c1a0-949e-4c33-ad31-cef2b196924d","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-09-05 13:22:20 +0000 UTC FinishedAt: 2026-09-05 16:23:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77b5231c-ed73-49e8-8246-9572063aefed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fea048ea-8658-42f1-a299-f1164fb048e1,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-workflow4nrjb/series-workflow4nrjb-build-action-1527583332/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-workflow4nrjb/series-workflow4nrjb-build-action-4169104509/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-workflow4nrjb/series-workflow4nrjb-convert-artifact-1178129510/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,}