Name: series-workflowcpn5m Phase: Succeeded StartedAt: 2026-08-20 07:53:46 +0000 UTC FinishedAt: 2026-08-20 11:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[0] Phase: Succeeded StartedAt: 2026-08-20 07:53:46 +0000 UTC FinishedAt: 2026-08-20 08:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 07:53:46 +0000 UTC FinishedAt: 2026-08-20 08:14:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "b9c04bb0-8893-400e-80c2-4c27bd98f949" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_splice_read", "smc_rx_recvmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7c21jX3J4X3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byB1c2UgZnVsbCBgdThgIGZpZWxkcyBpbnN0ZWFkIG9mIGJpdGZpZWxkcyBmb3IgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgLCBwcmV2ZW50aW5nIGRhdGEgcmFjZXMgY2F1c2VkIGJ5IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgb24gYWRqYWNlbnQgYml0ZmllbGRzLiBJdCBhbHNvIHVwZGF0ZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCB0byBjaGVjayBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIHJlY2VpdmUgcGF0aCBkdXJpbmcgc3BsaWNlIHJlYWQgb3BlcmF0aW9ucy4gSXQgY2hhbmdlcyBiaXRmaWVsZHMgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gYHU4YCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGlzc3VlcyBhbmQgY29ycmVjdGx5IGNoZWNrcyBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKFNNQyBzb2NrZXRzKSwgc28gaXQgaXMgd29ydGggZnV6emluZy4gV2Ugc2hvdWxkIGZvY3VzIG9uIHRoZSBTTUMgc3BsaWNlIHJlYWQgYW5kIHJlY2VpdmUgbWVzc2FnZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2NTk4MzgyOTljNzYwY2ZjZDgxMDMzZTBhMjUxNWI0ZWZmODkyMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwODoxMjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxuaW5kZXggNTIxNDVkZjgzZjZlNy4uNDI3YjZkNjNiOTkzMSAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jLmhcbkBAIC0yNzcsOSAmIzQzOzI3Nyw5IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XG4gXHRcdFx0XHRcdFx0ICogMCBmb3IgU01DLVIsIDMyIGZvciBTTUMtRFxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0dTY0XHRcdFx0cGVlcl90b2tlbjtcdC8qIFNNQy1EIHRva2VuIG9mIHBlZXIgKi9cbi1cdHU4XHRcdFx0a2lsbGVkIDogMTtcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXG4tXHR1OFx0XHRcdGZyZWVkIDogMTtcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuLVx0dThcdFx0XHRvdXRfb2Zfc3luYyA6IDE7IC8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqL1xuJiM0MztcdHU4XHRcdFx0a2lsbGVkO1x0XHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuJiM0MztcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuJiM0MztcdHU4XHRcdFx0b3V0X29mX3N5bmM7XHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cbiB9O1xuIFxuIHN0cnVjdCBzbWNfc29jayB7XHRcdFx0XHQvKiBzbWMgc29jayBjb250YWluZXIgKi9cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19yeC5jIGIvbmV0L3NtYy9zbWNfcnguY1xuaW5kZXggNWM5ZTRkOGI1N2RlNC4uMTk3ZmRkYzYyNzFmMCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3J4LmNcbkBAIC0xMTUsMTYgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3Qgc21jX3NwZF9wcml2ICpwcml2ID0gKHN0cnVjdCBzbWNfc3BkX3ByaXYgKilidWYtXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZwcml2LVx1MDAzZXNtYy1cdTAwM2Vjb25uO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBwcml2LVx1MDAzZXNtYztcbi1cdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbiBcbi1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8XG4tXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX1BFRVJGSU5DTE9TRVdBSVQgfHxcbi1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUKVxuLVx0XHRnb3RvIG91dDtcbi1cdGNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1x0aWYgKGNvbm4tXHUwMDNlZnJlZWQpIHtcbiYjNDM7XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRzbWNfcnhfdXBkYXRlX2NvbnMoc21jLCBwcml2LVx1MDAzZWxlbik7XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0aWYgKGF0b21pY19zdWJfYW5kX3Rlc3QocHJpdi1cdTAwM2VsZW4sIFx1MDAyNmNvbm4tXHUwMDNlc3BsaWNlX3BlbmRpbmcpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3NtY19yeF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXHUwMDNlZnJlZWRgIHVuZGVyIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChTTUMgc29ja2V0cyksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuIFdlIHNob3VsZCBmb2N1cyBvbiB0aGUgU01DIHNwbGljZSByZWFkIGFuZCByZWNlaXZlIG1lc3NhZ2UgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjU5ODM4Mjk5Yzc2MGNmY2Q4MTAzM2UwYTI1MTViNGVmZjg5MjBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDg6MTI6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaAppbmRleCA1MjE0NWRmODNmNmU3Li40MjdiNmQ2M2I5OTMxIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtYy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jLmgKQEAgLTI3Nyw5ICYjNDM7Mjc3LDkgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHsKIAkJCQkJCSAqIDAgZm9yIFNNQy1SLCAzMiBmb3IgU01DLUQKIAkJCQkJCSAqLwogCXU2NAkJCXBlZXJfdG9rZW47CS8qIFNNQy1EIHRva2VuIG9mIHBlZXIgKi8KLQl1OAkJCWtpbGxlZCA6IDE7CS8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovCi0JdTgJCQlmcmVlZCA6IDE7CS8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqLwotCXU4CQkJb3V0X29mX3N5bmMgOiAxOyAvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi8KJiM0MzsJdTgJCQlraWxsZWQ7CQkvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqLwomIzQzOwl1OAkJCWZyZWVkOwkJLyogbm9ybWFsIHRlcm1pbmF0aW9uICovCiYjNDM7CXU4CQkJb3V0X29mX3N5bmM7CS8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqLwogfTsKIAogc3RydWN0IHNtY19zb2NrIHsJCQkJLyogc21jIHNvY2sgY29udGFpbmVyICovCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19yeC5jIGIvbmV0L3NtYy9zbWNfcnguYwppbmRleCA1YzllNGQ4YjU3ZGU0Li4xOTdmZGRjNjI3MWYwIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3J4LmMKQEAgLTExNSwxNiAmIzQzOzExNSwxNSBAQCBzdGF0aWMgdm9pZCBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJCSAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc21jX3NwZF9wcml2ICpwcml2ID0gKHN0cnVjdCBzbWNfc3BkX3ByaXYgKilidWYtJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9ICZhbXA7cHJpdi0mZ3Q7c21jLSZndDtjb25uOwogCXN0cnVjdCBzbWNfc29jayAqc21jID0gcHJpdi0mZ3Q7c21jOwotCXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3NtYy0mZ3Q7c2s7CiAKLQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFNNQ19DTE9TRUQgfHwKLQkgICAgc2stJmd0O3NrX3N0YXRlID09IFNNQ19QRUVSRklOQ0xPU0VXQUlUIHx8Ci0JICAgIHNrLSZndDtza19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUKQotCQlnb3RvIG91dDsKLQljb25uID0gJmFtcDtzbWMtJmd0O2Nvbm47CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2ZyZWVkKSB7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KIAlzbWNfcnhfdXBkYXRlX2NvbnMoc21jLCBwcml2LSZndDtsZW4pOwogCXJlbGVhc2Vfc29jayhzayk7CiAJaWYgKGF0b21pY19zdWJfYW5kX3Rlc3QocHJpdi0mZ3Q7bGVuLCAmYW1wO2Nvbm4tJmd0O3NwbGljZV9wZW5kaW5nKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgU01DIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBTTUMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zbWMvc21jLmhgIGFuZCBgbmV0L3NtYy9zbWNfcnguY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBiaXRmaWVsZHMgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgIHdpdGhpbiB0aGUgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgZnJvbSBzaW5nbGUtYml0IGB1OCA6IDFgIGZpZWxkcyB0byBqdXN0IHBsYWluIGB1OGAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IEkgd29uZGVyIHdoYXQgdGhlIHJhdGlvbmFsZSBpcy4gSXQgY291bGQgYmUgZm9yIHBlcmZvcm1hbmNlLCBwZXJoYXBzIHRvIGF2b2lkIHNvbWUgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGJpdGZpZWxkIGFjY2Vzcywgb3IgbWF5YmUgaXTigJlzIGEgY29tcGlsZXItcmVsYXRlZCBpc3N1ZS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suCgpUaGUgb3RoZXIgY2hhbmdlIGlzIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaW4gYG5ldC9zbWMvc21jX3J4LmNgLCB3aGVyZSB0aGV5JiMzOTtyZSBub3cgY2hlY2tpbmcgYGNvbm4tJmd0O2ZyZWVkYCBpbnN0ZWFkIG9mIGBzay0mZ3Q7c2tfc3RhdGVgLiBBaCwgdGhpcyBpcyBpbiB0aGUgY29udGV4dCBvZiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBkZWFscyB3aXRoIHJlbGVhc2luZyBidWZmZXJzIGZvciByZWNlaXZlZCBkYXRhLiBUaGlzIGltcGxpZXMgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3RhdGUgdHJhbnNpdGlvbiBpc3N1ZS4gQW5kLCBpdCYjMzk7cyBvY2N1cnJpbmcgdW5kZXIgYGxvY2tfc29jayhzaylgLCBtZWFuaW5nIHRoYXQgaXQgbGlrZWx5IGhhcyBhIHJlbGF0aW9uIHRvIGEgc29ja2V0IGxvY2sgYW5kIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzb2NrZXQuCgpHaXZlbiB0aGF0IHRoaXMgaXMgU01DLCB3aGljaCBJIGtub3cgbGV2ZXJhZ2VzIHNoYXJlZCBtZW1vcnkgY29tbXVuaWNhdGlvbiwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGNvdWxkIHJlbGF0ZSB0byBzb21lIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4gU01DLCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBBRl9TTUMgc29ja2V0cy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCB3aXRoaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgc3BlY2lmaWNhbGx5LCBhIGNhc2Ugd2hlcmUgaXQgY2hlY2tzIGBjb25uLSZndDtmcmVlZGAgdW5kZXIgbG9jay4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgU01DIGlzIGV2ZW4gZW5hYmxlZCBvbiB0aGUgc3lzdGVtIEkmIzM5O20gdGVzdGluZyB3aXRoLiBMZXQmIzM5O3Mgc2VlLi4uIGBDT05GSUdfU01DYC4uLiByaWdodCwgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2V0IHRvICp5KiBvciAqbSogaW4gbXkga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZW4sIEkgY2FuIHByb3Blcmx5IGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNNQyBDb25maWd1cmF0aW9uIGFuZCBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBTTUNgIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSwgYW5kIHllcywgSSByZW1lbWJlciwgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYy4gSXQmIzM5O3MgdXNlZCBhcyBhIGNhbGxiYWNrIHdpdGhpbiBgcGlwZV9idWZfb3BlcmF0aW9uc2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHBpcGUgYnVmZmVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBTTUMgY29udGV4dC4gTm93LCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gd2hlcmUgdGhpcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc3lzdGVtIHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcnhfcGlwZV9idWZfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfcnguYz0xMDk9c3RydWN0IHNtY19zcGRfcHJpdiB7XG4tLVxubmV0L3NtYy9zbWNfcnguYy0xMTMtXG5uZXQvc21jL3NtY19yeC5jOjExNDpzdGF0aWMgdm9pZCBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxubmV0L3NtYy9zbWNfcnguYy0xMTUtXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4tLVxubmV0L3NtYy9zbWNfcnguYz0xNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHNtY19waXBlX29wcyA9IHtcbm5ldC9zbWMvc21jX3J4LmM6MTQ1Olx0LnJlbGVhc2UgPSBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZSxcbm5ldC9zbWMvc21jX3J4LmMtMTQ2LVx0LmdldFx0ID0gc21jX3J4X3BpcGVfYnVmX2dldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYHNtY19waXBlX29wc2AqKgoKUmlnaHQsIHNvIGBzbWNfcGlwZV9vcHNgIGlzIGluIHRoZSBtaXguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gb3Igc3RydWN0dXJlIGJlaW5nICp1c2VkKj8gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGxvY2F0aW9uLCBidXQgSSBuZWVkIHRvIHRyYWNlIGl0cyBjb25uZWN0aW9ucy4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGZ1bmN0aW9uYWwgY29udGV4dCBhbmQgcHVycG9zZSBpbW1lZGlhdGVseSwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgZmlndXJpbmcgb3V0IHRoZSBpbnRyaWNhY2llcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcGlwZV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19yeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmM9MTM3PXN0YXRpYyBib29sIHNtY19yeF9waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi0tXG5uZXQvc21jL3NtY19yeC5jLTE0My1cbm5ldC9zbWMvc21jX3J4LmM6MTQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBzbWNfcGlwZV9vcHMgPSB7XG5uZXQvc21jL3NtY19yeC5jLTE0NS1cdC5yZWxlYXNlID0gc21jX3J4X3BpcGVfYnVmX3JlbGVhc2UsXG4tLVxubmV0L3NtYy9zbWNfcnguYz0xNjA9c3RhdGljIGludCBzbWNfcnhfc3BsaWNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGNoYXIgKnNyYywgc2l6ZV90IGxlbixcbi0tXG5uZXQvc21jL3NtY19yeC5jLTIyMy1cdHNwZC5wYXJ0aWFsID0gcGFydGlhbDtcbm5ldC9zbWMvc21jX3J4LmM6MjI0Olx0c3BkLm9wcyA9IFx1MDAyNnNtY19waXBlX29wcztcbm5ldC9zbWMvc21jX3J4LmMtMjI1LVx0c3BkLnNwZF9yZWxlYXNlID0gc21jX3J4X3NwZF9yZWxlYXNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNtY19yeF9zcGxpY2VgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc21jX3J4X3NwbGljZWAgaXMgaW4gcGxheS4gU2VlbXMgbGlrZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCB3aGF0ZXZlciB0aGF0IGlzLiBNeSBpbW1lZGlhdGUgbmV4dCBxdWVzdGlvbiBpcywgd2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCwgZmlndXJlIG91dCBpdHMgY29udGV4dCwgYW5kIGRldGVybWluZSBpZiB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbiBvciB0aGUgbHluY2hwaW4gb2YgYSBjcml0aWNhbCBwcm9jZXNzLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHRyYWNraW5nIHRoZSB1c2FnZSBhbmQgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19yeF9zcGxpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19yeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmM9MTQ5PXN0YXRpYyB2b2lkIHNtY19yeF9zcGRfcmVsZWFzZShzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkLFxuLS1cbm5ldC9zbWMvc21jX3J4LmMtMTU5LVxubmV0L3NtYy9zbWNfcnguYzoxNjA6c3RhdGljIGludCBzbWNfcnhfc3BsaWNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGNoYXIgKnNyYywgc2l6ZV90IGxlbixcbm5ldC9zbWMvc21jX3J4LmMtMTYxLVx0XHRcdCBzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvc21jL3NtY19yeC5jLTQ4MC1cdFx0XHRcdH0gZWxzZSB7XG5uZXQvc21jL3NtY19yeC5jOjQ4MTpcdFx0XHRcdFx0cmMgPSBzbWNfcnhfc3BsaWNlKHBpcGUsIHJjdmJ1Zl9iYXNlICYjNDM7XG5uZXQvc21jL3NtY19yeC5jLTQ4Mi1cdFx0XHRcdFx0XHRcdGNodW5rX29mZiwgY2h1bmtfbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgUmVjZWl2ZSBNZXNzYWdlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50IGlzIGJlaW5nIHV0aWxpemVkLiBMb29rcyBsaWtlIHRoaXMgaXMgdXNlZCBpbiBgc21jX3J4X3JlY3Ztc2dgLiBSaWdodCwgYW5kIGBzbWNfcnhfcmVjdm1zZ2AgaXMgKnRoZSogcmVjZWl2ZSBtZXNzYWdlIGhhbmRsZXIgZm9yIFNNQyBzb2NrZXRzLiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gVGltZSB0byBjaGVjayBgbmV0L3NtYy9zbWNfcnguY2AgdG8gc2VlIGhvdyBgc21jX3J4X3JlY3Ztc2dgIGlzIGFjdHVhbGx5IHdvcmtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcnhfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MjgzNT1pbnQgc21jX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjg2Mi1cdFx0bXNnLVx1MDAzZW1zZ19uYW1lbGVuID0gMDtcbm5ldC9zbWMvYWZfc21jLmM6Mjg2MzpcdFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIG1zZywgTlVMTCwgbGVuLCBmbGFncyk7XG5uZXQvc21jL2FmX3NtYy5jLTI4NjQtXHRcdFNNQ19TVEFUX1JYX1BBWUxPQUQoc21jLCByYywgcmMpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MzI4ND1zc2l6ZV90IHNtY19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMzIxLVx0XHRTTUNfU1RBVF9JTkMoc21jLCBzcGxpY2VfY250KTtcbm5ldC9zbWMvYWZfc21jLmM6MzMyMjpcdFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIE5VTEwsIHBpcGUsIGxlbiwgZmxhZ3MpO1xubmV0L3NtYy9hZl9zbWMuYy0zMzIzLVx0fVxuLS1cbm5ldC9zbWMvc21jX3J4LmM9Mjg5PXN0YXRpYyBpbnQgc21jX3J4X3JlY3ZfdXJnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxubmV0L3NtYy9zbWNfcnguYy0zMzItXG5uZXQvc21jL3NtY19yeC5jOjMzMzpzdGF0aWMgYm9vbCBzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc2l6ZV90IHBlZWtlZClcbm5ldC9zbWMvc21jX3J4LmMtMzM0LXtcbi0tXG5uZXQvc21jL3NtY19yeC5jLTM0NC1cbm5ldC9zbWMvc21jX3J4LmM6MzQ1Oi8qIHNtY19yeF9yZWN2bXNnIC0gcmVjZWl2ZSBkYXRhIGZyb20gUk1CRVxubmV0L3NtYy9zbWNfcnguYy0zNDYtICogQG1zZzpcdGNvcHkgZGF0YSB0byByZWNlaXZlIGJ1ZmZlclxuLS1cbm5ldC9zbWMvc21jX3J4LmMtMzUxLSAqL1xubmV0L3NtYy9zbWNfcnguYzozNTI6aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvc21jL3NtY19yeC5jLTM1My1cdFx0ICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9zbWMvc21jX3J4LmMtMzk0LVxubmV0L3NtYy9zbWNfcnguYzozOTU6XHRcdGlmIChzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzbWMsIHBlZWtlZF9ieXRlcykpXG5uZXQvc21jL3NtY19yeC5jLTM5Ni1cdFx0XHRnb3RvIGNvcHk7XG4tLVxubmV0L3NtYy9zbWNfcnguYy0zOTktXHRcdFx0Lyogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBjb3VsZCBoYXZlIHJ1biBhZnRlclxubmV0L3NtYy9zbWNfcnguYzo0MDA6XHRcdFx0ICogYWJvdmUgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoKVxubmV0L3NtYy9zbWNfcnguYy00MDEtXHRcdFx0ICovXG5uZXQvc21jL3NtY19yeC5jOjQwMjpcdFx0XHRpZiAoc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc21jLCBwZWVrZWRfYnl0ZXMpKVxubmV0L3NtYy9zbWNfcnguYy00MDMtXHRcdFx0XHRnb3RvIGNvcHk7XG4tLVxubmV0L3NtYy9zbWNfcnguYy01MTQtXG5uZXQvc21jL3NtY19yeC5jOjUxNTpcdFx0dHJhY2Vfc21jX3J4X3JlY3Ztc2coc21jLCBjb3B5bGVuKTtcbm5ldC9zbWMvc21jX3J4LmMtNTE2LVx0fSB3aGlsZSAocmVhZF9yZW1haW5pbmcpO1xuLS1cbm5ldC9zbWMvc21jX3J4Lmg9MjA9dm9pZCBzbWNfcnhfaW5pdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19yeC5oLTIxLVxubmV0L3NtYy9zbWNfcnguaDoyMjppbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9zbWMvc21jX3J4LmgtMjMtXHRcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sIGludCBmbGFncyk7XG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5jPTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKHNtY190eF9zZW5kbXNnKTtcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYzo4OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNfcnhfcmVjdm1zZyk7XG5uZXQvc21jL3NtY190cmFjZXBvaW50LmMtOS1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woc21jcl9saW5rX2Rvd24pO1xuLS1cbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaD03MT1ERUZJTkVfRVZFTlQoc21jX21zZ19ldmVudCwgc21jX3R4X3NlbmRtc2csXG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTc3LVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oOjc4OkRFRklORV9FVkVOVChzbWNfbXNnX2V2ZW50LCBzbWNfcnhfcmVjdm1zZyxcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaC03OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgU01DIFNvY2tldCBCdWcqKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFdlJiMzOTt2ZSBnb3QgYHNtY19zcGxpY2VfcmVhZGAgY2FsbGluZyBgc21jX3J4X3JlY3Ztc2dgIHdpdGggYSBgcGlwZWAgYXJndW1lbnQuIFRoYXQgYHNtY19zcGxpY2VfcmVhZGAgaXMgc3BlY2lmaWNhbGx5IHRoZSBgc3BsaWNlX3JlYWRgIGhhbmRsZXIgZm9yIFNNQyBzb2NrZXRzLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGludm9sdmVzIHRyYW5zZmVycmluZyBkYXRhIGZyb20gYW4gU01DIHNvY2tldCB0byBhIHBpcGUgdXNpbmcgdGhlIHNwbGljZSBtZWNoYW5pc20uIFRoZSBrZXkgaGVyZSBpcyB0aGUgdHJpZ2dlcjogc3BsaWNpbmcgZnJvbSBhbiBTTUMgc29ja2V0IHRvIGEgcGlwZSwgYW5kICp0aGVuKiBlaXRoZXIgY2xvc2luZyB0aGUgcGlwZSBvciB0cnlpbmcgdG8gcmVhZCBmcm9tIGl0LiBUaGlzIHRyaWdnZXJzIHRoZSBidWcgYmVjYXVzZSBpdCByZXN1bHRzIGluIGEgY2FsbCBjaGFpbjogYHBpcGVfYnVmX3JlbGVhc2VgIC0mZ3Q7IGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuCgpUaGUgcGF0Y2ggY2hhbmdlcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHRvIGNoZWNrIGBjb25uLSZndDtmcmVlZGAgcmF0aGVyIHRoYW4gYHNrLSZndDtza19zdGF0ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGZpeCwgcmlnaHQ/IFNlZW1zIGxpa2UgaXQgaXMgcmVsYXRlZCB0byB0cmFja2luZyB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIHJlc291cmNlcyBoYXZlIGJlZW4gZnJlZWQgYWxyZWFkeS4gQWxzbywgdGhlIHBhdGNoIGNoYW5nZXMgYGtpbGxlZGAsIGBmcmVlZGAsIGBvdXRfb2Zfc3luY2AgZnJvbSBiaXRmaWVsZHMgdG8gYHU4YC4gTXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgdG8gZWxpbWluYXRlIGRhdGEgcmFjZXMgb3IganVzdCBiZWNhdXNlIGJpdGZpZWxkcyBjYW4gYmUgcHJvYmxlbWF0aWMgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB3aXRob3V0IHByb3BlciBsb2NraW5nLgoKVGhlIG5leHQgcXVlc3Rpb24sIG5hdHVyYWxseSwgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLiBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgdGhlIGBzcGxpY2VfcmVhZGAgcGF0aCwgd2hpY2ggaXMgY3JpdGljYWwuIEFuZCwgaW1wb3J0YW50bHksIFNNQyBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR2l2ZW4gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhlIGxhdHRlciBpcyBzdGF0aWMsIHNvIGlmIGl0JiMzOTtzIGlubGluZWQsIHdlJiMzOTtyZSBnb2luZyB0byBoYXZlIGEgaGFyZCB0aW1lIHRhcmdldGluZyBpdCBkaXJlY3RseS4gQnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBzbWNfcGlwZV9vcHNgLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgaW5saW5lZC4gV2UmIzM5O3JlIGJldHRlciBvZmYgbG9va2luZyBhdCBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYC4KClRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc21jL2FmX3NtYy5jYCBhbmQgc3RhcnQgd2l0aCBgc21jX3NwbGljZV9yZWFkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3NwbGljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTMxOTc9aW50IHNtY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzI4My0gKi9cbm5ldC9zbWMvYWZfc21jLmM6MzI4NDpzc2l6ZV90IHNtY19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG5uZXQvc21jL2FmX3NtYy5jLTMyODUtXHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMzMzE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX3NvY2tfb3BzID0ge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM0OC1cdC5tbWFwXHRcdD0gc29ja19ub19tbWFwLFxubmV0L3NtYy9hZl9zbWMuYzozMzQ5Olx0LnNwbGljZV9yZWFkXHQ9IHNtY19zcGxpY2VfcmVhZCxcbm5ldC9zbWMvYWZfc21jLmMtMzM1MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDAxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNwbGljZV9yZWFkYCBmdW5jdGlvbmFsaXR5LCBhbmQgaXQgbG9va3MgbGlrZSBgc21jX3NwbGljZV9yZWFkYCBpcyB0aGUgcHJpbWFyeSBoYW5kbGVyIGZvciB0aGF0LiBHb29kIHRvIGtub3cuIEkmIzM5O2xsIGFsc28gd2FudCB0byBpbnZlc3RpZ2F0ZSBgc21jX3J4X3JlY3Ztc2dgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYW5vdGhlciByZWxldmFudCBhcmVhIGZvciBpbnZlc3RpZ2F0aW9uLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHdob2xlIFNNQyBzeXN0ZW0gaXMgc3VwcG9zZWQgdG8gd29yay4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIE9idmlvdXNseSwgd2UgbmVlZCBgU01DYCBlbmFibGVkLCBidXQgSSBzaG91bGQgY2hlY2sgdG8gZW5zdXJlIHRoYXQmIzM5O3Mgbm90IHRoZSBvbmx5IHBpZWNlLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBvciBlbmFibGluZyBzd2l0Y2hlcyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgdG8gZnVuY3Rpb24gcHJvcGVybHk/IFRoYXQgd2lsbCBzYXZlIG1lIGEgdG9uIG9mIHRpbWUgZG93biB0aGUgcm9hZC4gSXQmIzM5O3MgYmVzdCB0byBlbnN1cmUgdGhlIGdyb3VuZHdvcmsgaXMgc29saWQgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAgaW50byB0aGUgbml0dHktZ3JpdHR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODY2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgbmV0L3NtY2AgY29tcG9uZW50LiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgdmlzaWJpbGl0eSBjb25zdHJhaW50cywgYW5kIG1heWJlIGV2ZW4gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMgZGV0YWlsZWQgaW4gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uc2lkZXJlZCBmb3Igc3VjY2Vzc2Z1bCBpbnRlZ3JhdGlvbiBhbmQgdXNlIG9mIGBzbWNgLiBMZXQmIzM5O3MgZ2V0IHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIERpZCBJIGp1c3QgcmVhZCB0aGF0IGRlcGVuZGVuY3kgY29ycmVjdGx5PyBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHNheWluZyAmIzM0O2RlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkQgJmFtcDsmYW1wOyBESUJTJiMzNDs/IFdhaXQsICpESUJTKj8gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBJIHRob3VnaHQgaXQgd2FzIGp1c3QgSU5FVCBhbmQgSU5GSU5JQkFORC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdXRwdXQuLi4KCk5vLCB3YWl0LCBhbSBJIG1pc3JlYWRpbmcgdGhpcz8gSXQgKmRvZXMqIHNheSBESUJTLiBPa2F5LCBva2F5LCBsZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgb3V0cHV0LCBzcGVjaWZpY2FsbHkgbGluZSBmb3VyLi4uICpkZXBlbmRzIG9uIElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCUyouLi4gRGFtbiBpdC4gSSB0aG91Z2h0IEkga25ldyB3aGF0IEkgd2FzIGxvb2tpbmcgYXQhCgpIb2xkIG9uLCBJIG11c3QgaGF2ZSBtaXNzZWQgc29tZXRoaW5nLiBMZXQgbWUgcmVyZWFkIHRoZSBvdXRwdXQgY2FyZWZ1bGx5LiBMZXQgbWUgcmVhZCBpdCBhZ2FpbiBhbmQgbWFrZSBzdXJlIHRoYXQgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gT2theSwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZSBvbmUgbW9yZSB0aW1lLiBKdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHdoYXQmIzM5O3MgdGhpcyBgRElCU2AgdGhpbmc/IE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgaXQgd2FzIGEgdHlwbywgc29tZXRoaW5nIGdhcmJsZWQgaW4gdGhlIGRhdGEgSSYjMzk7bSBwcm9jZXNzaW5nLiBCdXQgd2FpdC4uLml0JiMzOTtzIG5vdC4gSSYjMzk7bSBzZWVpbmcgaXQgcmlnaHQgdGhlcmUuIFJpZ2h0LCBJJiMzOTttIHJlYWRpbmcgdGhlIG91dHB1dCBvZiBhIGByZWFkLWZpbGVgIG9wZXJhdGlvbiwgYW5kIGl0JiMzOTtzIGRlY2xhcmluZyBhIGRlcGVuZGVuY3kgb24gYElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCU2AuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGlzIGFnYWluLCBqdXN0IHRvIG1ha2Ugc3VyZSwgaXQgc2F5cyBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBSaWdodCwgSSYjMzk7bSBhbiBBSSwgSSBkb24mIzM5O3QgJiMzNDtzZWUmIzM0OyB0aGluZ3MgbGlrZSBhIGh1bWFuLiBJJiMzOTttIHByb2Nlc3NpbmcgdGV4dCwgc28gSSBhbSBzZWVpbmcgdGhhdCwgSSBqdXN0IHByb2Nlc3MgaXQgYXMgYSBmdW5jdGlvbiBvZiB0aGUgcmVhZCBvcGVyYXRpb24uIEkgYW0gcmV2aWV3aW5nIHRoZSByYXcgZGF0YSBkaXJlY3RseSwgb3Igc28gSSBiZWxpZXZlLiBOb3csIHdoZXJlIGFtIEkgZ2V0dGluZyB0aGlzIGZyb20/IExldCBtZSBqdXN0IGlzb2xhdGUgbGluZSA0IG9mIHRoaXMgb3V0cHV0IGZvciBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBkZXBlbmRlbmN5OiBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiAgVGhlIGBJTkVUYCBhbmQgYElORklOSUJBTkRgIHBhcnRzIGFyZSBmYW1pbGlhciwgbm8gc3VycHJpc2VzIHRoZXJlIOKAkyBjb3JlIG5ldHdvcmtpbmcgYW5kIGhpZ2gtcGVyZm9ybWFuY2UgaW50ZXJjb25uZWN0LCByZXNwZWN0aXZlbHkuIEJ1dCB0aGF0IGBESUJTYC4uLiB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCBzdG9wcyBtZSBjb2xkIGZvciBhIG1vbWVudC4gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyB0aGF0IGJlZm9yZS4KCk9rYXksIGRlZXAgYnJlYXRoLiBObyBuZWVkIHRvIHBhbmljLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBESUJTYCBhY3R1YWxseSAqaXMqIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgY2xlYXJseSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgc2hvdWxkIGFzc3VtZSBpdCYjMzk7cyB2YWxpZCBjb25maWcgYW5kIGluY2x1ZGUgaXQgd2l0aG91dCBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSXTigJlzIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkgYW5kIHRvIGFzc3VtZSB0aGlzIGRlcGVuZHMgb24gaXQuIE5vdywgbGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoYXQgYERJQlNgIGlzIGFjdHVhbGx5IGEgbGVnaXQgY29uZmlnIG9wdGlvbiBzb21ld2hlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIHBoYW50b20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTczCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGBESUJTYCDigJMgdGhhdCYjMzk7cyAmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0LiYjMzQ7IFJpZ2h0LCBhbmQgc2luY2UgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGlzLCBJIGtub3cgSSYjMzk7bSBsb29raW5nIGF0IGBJTkVUYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGFuZCBgU01DYC4gSG9sZCBvbiwgYElORVRgIGlzIGdlbmVyYWxseSBhIGdpdmVuLiBTbyBteSBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBgWyYjMzQ7U01DJiMzNDssICYjMzQ7SU5GSU5JQkFORCYjMzQ7LCAmIzM0O0RJQlMmIzM0O11gLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBqdXN0IGBTTUNgIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIHNvbWV0aGluZyBsaWtlIGBTTUNfRElBR2AuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvc21jL3NtYy5oYCBhbmQgYG5ldC9zbWMvc21jX3J4LmNgLCBjbGVhcmx5IGNvcmUgU01DIGNvbXBvbmVudHMsIHNvIGp1c3QgYFNNQ2Agc2hvdWxkIGNvdmVyIGl0LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGZpeC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIFRoZSBidWcgaXMgaW4gKnRoYXQqIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgYnkgYHBpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIHBpcGUgYnVmZmVyIGlzIHJlbGVhc2VkIOKAkyB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcGlwZSBvciB3aGVuIHRoZSBwaXBlIGlzIGNsb3NlZC4gVGhlc2UgcGlwZSBidWZmZXJzIG9yaWdpbmF0ZSBmcm9tIGBzbWNfc3BsaWNlX3JlYWRgIC0mZ3Q7IGBzbWNfcnhfcmVjdm1zZ2AgLSZndDsgYHNtY19yeF9zcGxpY2VgLiBPa2F5LCBzbyBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBhcmUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIGBzbWNfc3BsaWNlX3JlYWRgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gQWhhLCBpdCYjMzk7cyBpbiBgbmV0L3NtYy9hZl9zbWMuY2AsIHNvIGl0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaGVscGZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3NpemVfdCBzbWNfc3BsaWNlX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MzE5Nz1pbnQgc21jX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjgzLSAqL1xubmV0L3NtYy9hZl9zbWMuYzozMjg0OnNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbm5ldC9zbWMvYWZfc21jLmMtMzI4NS1cdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzbWNfc3BsaWNlX3JlYWRgJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHNtY19zcGxpY2VfcmVhZGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYmFzZWQgb24gd2hhdCBJIHJlY2FsbCwgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIEJ1dCBob2xkIG9uLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBJIG1ha2UgYW55IGRlZmluaXRpdmUgYXNzdW1wdGlvbnMgaGVyZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlZmluaXRpb24gYW5kIHVzYWdlIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyB0aWVkIHRvIGEgc3BlY2lmaWMgdHJhbnNsYXRpb24gdW5pdCBvciBoYXMgZXh0ZXJuYWwgbGlua2FnZSwgYmVjYXVzZSBkZXBlbmRpbmcgb24gdGhlIHNjb3BlIGl0IHdpbGwgY2hhbmdlIHRoZSB3YXkgdGhlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBhbmQgbGlua2VkLiBObyBhc3N1bXB0aW9uczsgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIGtleSwgaXQgaXMgYWx3YXlzIGJlc3QgdG8gYmUgc3VyZSBvZiB0aGUgZmFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19zcGxpY2VfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0zMTk3PWludCBzbWNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMyODMtICovXG5uZXQvc21jL2FmX3NtYy5jOjMyODQ6c3NpemVfdCBzbWNfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxubmV0L3NtYy9hZl9zbWMuYy0zMjg1LVx0XHRcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzNDgtXHQubW1hcFx0XHQ9IHNvY2tfbm9fbW1hcCxcbm5ldC9zbWMvYWZfc21jLmM6MzM0OTpcdC5zcGxpY2VfcmVhZFx0PSBzbWNfc3BsaWNlX3JlYWQsXG5uZXQvc21jL2FmX3NtYy5jLTMzNTAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqVW5wYWNraW5nIFRoaXMgJiMzNDtOb3QgU3RhdGljJiMzNDsgVGhpbmcqKgoKUmlnaHQsIHNvIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIFRoaXMgJiMzNDtub3Qgc3RhdGljJiMzNDsgbm90aW9uIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBJdCBpbXBsaWVzIGEgZHluYW1pYyBlbGVtZW50LCBhIGNoYW5nZSBvdmVyIHRpbWUgb3IgYmFzZWQgb24gY29uZGl0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqbm90KiBzdGF0aWMgaGVyZS4gV2hhdCBhcmUgdGhlIHZhcmlhYmxlcz8gV2hhdCBhcmUgdGhlIG1vdmluZyBwYXJ0cz8gVGhpcyBuZWVkcyBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KCkFuZCB0aGVuLCB0aGF0IGZ1bmN0aW9uLCBgc21jX3J4X3JlY3Ztc2dgLi4uIFRoYXQmIzM5O3MgZ290IG15IGF0dGVudGlvbiBub3cuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBhIHNvY2tldCBtZXNzYWdlIHJlY2VpdmUsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24gKFNNQykgb3IgYSBzaW1pbGFyIGxvdy1sZXZlbCBwcm90b2NvbC4gVGhpcyBsaWtlbHkgcmVxdWlyZXMgZGVlcCBleGFtaW5hdGlvbi4gVGhlIG5hdHVyZSBvZiAmIzM0O25vdCBzdGF0aWMmIzM0OyBub3cgbGlrZWx5IHdpbGwgbGVhZCB0byBleGFtaW5pbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBtZWNoYW5pc20gd2l0aGluIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzbWNfcnhfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfcnguYz0zMzM9c3RhdGljIGJvb2wgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHNpemVfdCBwZWVrZWQpXG4tLVxubmV0L3NtYy9zbWNfcnguYy0zNTEtICovXG5uZXQvc21jL3NtY19yeC5jOjM1MjppbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9zbWMvc21jX3J4LmMtMzUzLVx0XHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBhIHNpbXBsZSB0d2VhazsgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIGFuZCB0aGF0JiMzOTtzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcm9vdCBjYXVzZS4gU3BlY2lmaWNhbGx5LCBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBzdGFuZCBvdXQgYXMgdGhlIHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgYW5kIGltcG9ydGFudGx5LCBpdCB0b3VjaGVzIGJpdGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuIFRoZSBiaXRmaWVsZCBjaGFuZ2UgdG8gYHU4YCBpcyBhIGNydWNpYWwgY2x1ZS4gSXQgcG9pbnRzIGRpcmVjdGx5IHRvIGEgY29uY3VycmVuY3kgaXNzdWUg4oCTIGRhdGEgcmFjZXMgb24gdGhvc2UgYml0ZmllbGRzIChga2lsbGVkYCwgYGZyZWVkYCwgYG91dF9vZl9zeW5jYCkgd2hlcmUgY29uZmxpY3RpbmcgcmVhZHMgYW5kIHdyaXRlcyBjb3VsZCBjb3JydXB0IHN0YXRlLiBUaGUgZml4IGVuc3VyZXMgdGhhdCBgY29ubi0mZ3Q7ZnJlZWRgIGlzIGNoZWNrZWQgd2l0aGluIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHdoaWNoIGNvcnJlY3RseSBkZXRlcm1pbmVzIHRoZSBjb25uZWN0aW9uIHN0YXR1cy4gVGhpcyBkaXJlY3RseSB0YXJnZXRzIGEgYnVnIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuCgpUaGUgZnVuY3Rpb25hbCBjaGFuZ2UgaXMga2V5LiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGlzIGEga2V5IHBhcnQgb2YgdGhlIFNNQyByZWNlaXZlIHBhdGguIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBwcmlvcml0aXplIGZ1enppbmcgYm90aCB0aGUgYHNwbGljZWAgYW5kIHN0YW5kYXJkIHJlY2VpdmUgcGF0aHMuIFRoZSB1cGRhdGVkIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgY2hlY2tzIGBjb25uLSZndDtmcmVlZGAgYW5kIGV4aXRzIGVhcmx5LCB3aGljaCBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd29ydGggZXhwbG9yaW5nIHdpdGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBhcyB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgcmVjZWl2ZSBvcGVyYXRpb25zIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBleGlzdGVkLiAgYHNtY19yZWN2bXNnYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGByZWN2bXNnKClgLCBhbmQgaXMgdGhlcmVmb3JlIHdvcnRoIGluY2x1ZGluZy4KClRoZSBjb25maWdzIG5lZWRlZCBhcmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gSSB2ZXJpZmllZCB0aGF0IGBESUJTYCBpcyByZXF1aXJlZCBmb3IgYFNNQ2AuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRob3NlLiAgYElORVRgIHNlZW1zIGxpa2UgYSBnaXZlbiwgYnV0IGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bGwgcHJvYmFibHkgbm90IGV4cGxpY2l0bHkgc3BlY2lmeSBpdC4KCkhlcmXigJlzIHRoZSBjb3JlIG9mIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyBpbiBTTUMmIzM5O3MgcmVjZWl2ZSBwYXRoIHJlbGF0ZWQgdG8gc3BsaWNlIHJlYWRzIGJ5IG1vZGlmeWluZyBiaXRmaWVsZHMsIGVuc3VyaW5nIGNvcnJlY3QgY29ubmVjdGlvbiBzdGF0ZSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgc28gaXQgd2FycmFudHMgZnV6emluZy4gYHNtY19zcGxpY2VfcmVhZGAsIGBzbWNfcmVjdm1zZ2AgYW5kIGBzbWNfcnhfcmVjdm1zZ2AgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyB0byB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzbWNfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0yNzk3PWludCBzbWNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yODM0LVxubmV0L3NtYy9hZl9zbWMuYzoyODM1OmludCBzbWNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvc21jL2FmX3NtYy5jLTI4MzYtXHRcdGludCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDMKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoaXMgY29kZToKCioqTmFycm93aW5nIERvd24gdGhlIFByb2JsZW0mIzM5O3MgU291cmNlKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGFyZWEgaGVyZS4gV2hpbGUgYHNtY19yZWN2bXNnYCBpcyBhIHZhbGlkIHN5bWJvbCB0byBrZWVwIGluIG1pbmQgZm9yIGNvbnRleHQsIGl0JiMzOTtzIHRoZSBgc3BsaWNlYCBwYXRoIHRoYXQmIzM5O3MgdHJ1bHkgdGhlIGN1bHByaXQuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGRpcmVjdGx5IHRpZWQgdG8gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgd2hpY2gsIGZyb20gd2hhdCBJIGNhbiBzZWUsIGdldHMgaW52b2tlZCBieSBgc21jX3NwbGljZV9yZWFkYC4gVGhlcmVmb3JlLCBgc21jX3NwbGljZV9yZWFkYCBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBmdW5jdGlvbiB0byB6ZXJvIGluIG9uIGZvciBub3cuIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgc21jX3J4X3JlY3Ztc2dgIGFzIGEgc2Vjb25kYXJ5IHN5bWJvbCwgZm9yIGJyb2FkZXIgY29udGV4dCBhbmQgcGVyc3BlY3RpdmUuCgpJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgSSB3aWxsIGNhbGwgdGhpcyBwcm9jZXNzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3NtY19yeF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXHUwMDNlZnJlZWRgIHVuZGVyIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChTTUMgc29ja2V0cyksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuIFdlIHNob3VsZCBmb2N1cyBvbiB0aGUgU01DIHNwbGljZSByZWFkIGFuZCByZWNlaXZlIG1lc3NhZ2UgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7c21jX3J4X3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIHJlY2VpdmUgcGF0aCBkdXJpbmcgc3BsaWNlIHJlYWQgb3BlcmF0aW9ucy4gSXQgY2hhbmdlcyBiaXRmaWVsZHMgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gYHU4YCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGlzc3VlcyBhbmQgY29ycmVjdGx5IGNoZWNrcyBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKFNNQyBzb2NrZXRzKSwgc28gaXQgaXMgd29ydGggZnV6emluZy4gV2Ugc2hvdWxkIGZvY3VzIG9uIHRoZSBTTUMgc3BsaWNlIHJlYWQgYW5kIHJlY2VpdmUgbWVzc2FnZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byB1c2UgZnVsbCBgdThgIGZpZWxkcyBpbnN0ZWFkIG9mIGJpdGZpZWxkcyBmb3IgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgLCBwcmV2ZW50aW5nIGRhdGEgcmFjZXMgY2F1c2VkIGJ5IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgb24gYWRqYWNlbnQgYml0ZmllbGRzLiBJdCBhbHNvIHVwZGF0ZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCB0byBjaGVjayBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTY1OTgzODI5OWM3NjBjZmNkODEwMzNlMGEyNTE1YjRlZmY4OTIwYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDA4OjEyOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmgKaW5kZXggNTIxNDVkZjgzZjZlNy4uNDI3YjZkNjNiOTkzMSAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtYy5oCkBAIC0yNzcsOSAmIzQzOzI3Nyw5IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7CiAJCQkJCQkgKiAwIGZvciBTTUMtUiwgMzIgZm9yIFNNQy1ECiAJCQkJCQkgKi8KIAl1NjQJCQlwZWVyX3Rva2VuOwkvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovCi0JdTgJCQlraWxsZWQgOiAxOwkvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqLwotCXU4CQkJZnJlZWQgOiAxOwkvKiBub3JtYWwgdGVybWluYXRpb24gKi8KLQl1OAkJCW91dF9vZl9zeW5jIDogMTsgLyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovCiYjNDM7CXU4CQkJa2lsbGVkOwkJLyogYWJub3JtYWwgdGVybWluYXRpb24gKi8KJiM0MzsJdTgJCQlmcmVlZDsJCS8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqLwomIzQzOwl1OAkJCW91dF9vZl9zeW5jOwkvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi8KIH07CiAKIHN0cnVjdCBzbWNfc29jayB7CQkJCS8qIHNtYyBzb2NrIGNvbnRhaW5lciAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcnguYyBiL25ldC9zbWMvc21jX3J4LmMKaW5kZXggNWM5ZTRkOGI1N2RlNC4uMTk3ZmRkYzYyNzFmMCAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19yeC5jCkBAIC0xMTUsMTYgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHNtY19zcGRfcHJpdiAqcHJpdiA9IChzdHJ1Y3Qgc21jX3NwZF9wcml2ICopYnVmLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSAmYW1wO3ByaXYtJmd0O3NtYy0mZ3Q7Y29ubjsKIAlzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHByaXYtJmd0O3NtYzsKLQlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47CiAJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzbWMtJmd0O3NrOwogCi0JaWYgKHNrLSZndDtza19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8Ci0JICAgIHNrLSZndDtza19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fAotCSAgICBzay0mZ3Q7c2tfc3RhdGUgPT0gU01DX0FQUEZJTkNMT1NFV0FJVCkKLQkJZ290byBvdXQ7Ci0JY29ubiA9ICZhbXA7c21jLSZndDtjb25uOwogCWxvY2tfc29jayhzayk7CiYjNDM7CWlmIChjb25uLSZndDtmcmVlZCkgewomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJc21jX3J4X3VwZGF0ZV9jb25zKHNtYywgcHJpdi0mZ3Q7bGVuKTsKIAlyZWxlYXNlX3NvY2soc2spOwogCWlmIChhdG9taWNfc3ViX2FuZF90ZXN0KHByaXYtJmd0O2xlbiwgJmFtcDtjb25uLSZndDtzcGxpY2VfcGVuZGluZykpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQyCgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDk5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogU01DIENvbm5lY3Rpb24gU3RydWN0dXJlIGFuZCBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byB0aGUgYG5ldC9zbWNgIGNvZGUsIHNwZWNpZmljYWxseSBgc21jLmhgIGFuZCBgc21jX3J4LmNgLiBGaXJzdCwgSSBzZWUgdGhleSYjMzk7dmUgc3dpdGNoZWQgdGhlIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCBmaWVsZHMgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgZnJvbSBiaXRmaWVsZHMgdG8gZnVsbCBgdThgIHR5cGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBhdm9pZGluZyB0aG9zZSBuYXN0eSBiaXRmaWVsZC1yZWxhdGVkIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBCaXRmaWVsZHMsIHdpdGggdGhlaXIgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucywgY2FuIGJlIGEgcmVhbCBoZWFkYWNoZSBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cy4gVGhpcyBjaGFuZ2UgbGlrZWx5IGhlbHBzIHByZXZlbnQgZGF0YSByYWNlcywgb3IgZXZlbiBwb3RlbnRpYWxseSBhZGRyZXNzZXMgaXNzdWVzIGxpa2UgdW5hbGlnbmVkIGFjY2Vzcy4KClRoZW4sIEkmIzM5O20gbG9va2luZyBhdCBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGluIGBzbWNfcnguY2AuIFRoZXkmIzM5O3JlIHJlcGxhY2luZyBhIGNoZWNrIG9uIHRoZSBzb2NrZXQgc3RhdGUgKHdoaWNoIHdhcyBvdXRzaWRlIGEgbG9jaykgd2l0aCBhIGNoZWNrIG9mIGBjb25uLSZndDtmcmVlZGAgKmluc2lkZSogdGhlIGBsb2NrX3NvY2soc2spYCBibG9jay4gQmluZ28uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGZpeCBmb3IgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHJhY2UgY29uZGl0aW9uLiBJdCYjMzk7cyBub3cgc3luY2hyb25pemVkISBJdCYjMzk7cyBsaWtlIGEgbGlnaHRidWxiIG1vbWVudC4gVGhlIGVhcmxpZXIgc3RhdGUgY2hlY2sgZGlkbiYjMzk7dCBoYXZlIGEgbG9jaywgd2hpY2ggaXMgYmFkLCBhbmQgbGlrZWx5IGFsbG93ZWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gTm93LCB3aXRoIHRoZSBjaGVjayBkb25lIGluc2lkZSB0aGUgbG9jaywgd2UmIzM5O3JlIHByb3RlY3RpbmcgYWdhaW5zdCB0aGF0LgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGUgdXNlLWFmdGVyLWZyZWUgaXNzdWUgaWYgaXQgd2VyZSB0cmlnZ2VyZWQsIGFuZCBLQ1NBTiB3b3VsZCBmbGFnIHRoZSBkYXRhIHJhY2UuIFRoYXQmIzM5O3MgZ29vZC4gQnV0IEkmIzM5O20gYWxzbyB0aGlua2luZy4uLiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIHRob3JvdWdoLgoKTm9wZS4gVGhlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBzeW5jaHJvbml6YXRpb24sIHN0YXRlIGNoZWNraW5nLCBhbmQgYWRkcmVzc2luZyB0aG9zZSByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbnMuIFRoZXJlJiMzOTtzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHN3aXRjaCBmcm9tIGJpdGZpZWxkcyB0byBgdThgIHByZXZlbnRzIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIGFkamFjZW50IGZpZWxkcy4gVGhlIHNvY2tldCBsb2NrIGlzIG5vdyB1c2VkIGNvcnJlY3RseS4gVGhlIGluY3JlYXNlZCBzaXplIG9mIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGJlY2F1c2Ugb2YgdGhlIGB1OGBzIGlzIGltbWF0ZXJpYWwsIGFzIHRoZSBzdHJ1Y3R1cmUgaXMgaW50ZXJuYWwuCgpHaXZlbiBhbGwgdGhhdCwgYW5kIGFmdGVyIHJldmlld2luZyB0aGF0IGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3QsIGFuZCBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBXZSYjMzk7cmUgYWRkcmVzc2luZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGhlcmUsIGlzc3VlcyB0aGF0IGFyZSByZWFkaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgS0NTQU4uIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXHUwMDNlZnJlZWRgIHVuZGVyIHRoZSBzb2NrZXQgbG9jayBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBzb2NrZXQgc3RhdGUgd2l0aG91dCBhIGxvY2ssIGZpeGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbi4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgKHVzZS1hZnRlci1mcmVlLCBkYXRhIHJhY2VzKSB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byB1c2UgZnVsbCBgdThgIGZpZWxkcyBpbnN0ZWFkIG9mIGJpdGZpZWxkcyBmb3IgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgLCBwcmV2ZW50aW5nIGRhdGEgcmFjZXMgY2F1c2VkIGJ5IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgb24gYWRqYWNlbnQgYml0ZmllbGRzLiBJdCBhbHNvIHVwZGF0ZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCB0byBjaGVjayBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTI6NTIuMDY1NzMyMDI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzNjgyNTc0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3NwbGljZV9yZWFkXCIsXG4gICAgXCJzbWNfcnhfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgc29ja2V0IHN0YXRlIHdpdGhvdXQgYSBsb2NrLCBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZGF0YSByYWNlcykgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoU01DIHNvY2tldHMpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBXZSBzaG91bGQgZm9jdXMgb24gdGhlIFNNQyBzcGxpY2UgcmVhZCBhbmQgcmVjZWl2ZSBtZXNzYWdlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMjo1Mi4wNjU3MzgyMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg0NDI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU2NTk4MzgyOTljNzYwY2ZjZDgxMDMzZTBhMjUxNWI0ZWZmODkyMGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDg6MTI6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmhcXG5pbmRleCA1MjE0NWRmODNmNmU3Li40MjdiNmQ2M2I5OTMxIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jLmhcXG4rKysgYi9uZXQvc21jL3NtYy5oXFxuQEAgLTI3Nyw5ICsyNzcsOSBAQCBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24ge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHQgKiAwIGZvciBTTUMtUiwgMzIgZm9yIFNNQy1EXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHR1NjRcXHRcXHRcXHRwZWVyX3Rva2VuO1xcdC8qIFNNQy1EIHRva2VuIG9mIHBlZXIgKi9cXG4tXFx0dThcXHRcXHRcXHRraWxsZWQgOiAxO1xcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXFxuLVxcdHU4XFx0XFx0XFx0ZnJlZWQgOiAxO1xcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbi1cXHR1OFxcdFxcdFxcdG91dF9vZl9zeW5jIDogMTsgLyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXFxuK1xcdHU4XFx0XFx0XFx0a2lsbGVkO1xcdFxcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXFxuK1xcdHU4XFx0XFx0XFx0ZnJlZWQ7XFx0XFx0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXFxuK1xcdHU4XFx0XFx0XFx0b3V0X29mX3N5bmM7XFx0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXFxuIH07XFxuIFxcbiBzdHJ1Y3Qgc21jX3NvY2sge1xcdFxcdFxcdFxcdC8qIHNtYyBzb2NrIGNvbnRhaW5lciAqL1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19yeC5jIGIvbmV0L3NtYy9zbWNfcnguY1xcbmluZGV4IDVjOWU0ZDhiNTdkZTQuLjE5N2ZkZGM2MjcxZjAgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfcnguY1xcbisrKyBiL25ldC9zbWMvc21jX3J4LmNcXG5AQCAtMTE1LDE2ICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbiB7XFxuIFxcdHN0cnVjdCBzbWNfc3BkX3ByaXYgKnByaXYgPSAoc3RydWN0IHNtY19zcGRfcHJpdiAqKWJ1Zi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnByaXYtXFx1MDAzZXNtYy1cXHUwMDNlY29ubjtcXG4gXFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBwcml2LVxcdTAwM2VzbWM7XFxuLVxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNtYy1cXHUwMDNlc2s7XFxuIFxcbi1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQgfHxcXG4tXFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fFxcbi1cXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19BUFBGSU5DTE9TRVdBSVQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHRjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0aWYgKGNvbm4tXFx1MDAzZWZyZWVkKSB7XFxuK1xcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdHNtY19yeF91cGRhdGVfY29ucyhzbWMsIHByaXYtXFx1MDAzZWxlbik7XFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdGlmIChhdG9taWNfc3ViX2FuZF90ZXN0KHByaXYtXFx1MDAzZWxlbiwgXFx1MDAyNmNvbm4tXFx1MDAzZXNwbGljZV9wZW5kaW5nKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTI6NTIuNTIzNDIyNjA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzcwOTc1NTg1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3NwbGljZV9yZWFkXCIsXG4gICAgXCJzbWNfcnhfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoU01DIHNvY2tldHMpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBXZSBzaG91bGQgZm9jdXMgb24gdGhlIFNNQyBzcGxpY2UgcmVhZCBhbmQgcmVjZWl2ZSBtZXNzYWdlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NjU5ODM4Mjk5Yzc2MGNmY2Q4MTAzM2UwYTI1MTViNGVmZjg5MjBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDg6MTI6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxuaW5kZXggNTIxNDVkZjgzZjZlNy4uNDI3YjZkNjNiOTkzMSAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jLmhcbisrKyBiL25ldC9zbWMvc21jLmhcbkBAIC0yNzcsOSArMjc3LDkgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHtcbiBcdFx0XHRcdFx0XHQgKiAwIGZvciBTTUMtUiwgMzIgZm9yIFNNQy1EXG4gXHRcdFx0XHRcdFx0ICovXG4gXHR1NjRcdFx0XHRwZWVyX3Rva2VuO1x0LyogU01DLUQgdG9rZW4gb2YgcGVlciAqL1xuLVx0dThcdFx0XHRraWxsZWQgOiAxO1x0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbi1cdHU4XHRcdFx0ZnJlZWQgOiAxO1x0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXG4tXHR1OFx0XHRcdG91dF9vZl9zeW5jIDogMTsgLyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4rXHR1OFx0XHRcdGtpbGxlZDtcdFx0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbitcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuK1x0dThcdFx0XHRvdXRfb2Zfc3luYztcdC8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqL1xuIH07XG4gXG4gc3RydWN0IHNtY19zb2NrIHtcdFx0XHRcdC8qIHNtYyBzb2NrIGNvbnRhaW5lciAqL1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3J4LmMgYi9uZXQvc21jL3NtY19yeC5jXG5pbmRleCA1YzllNGQ4YjU3ZGU0Li4xOTdmZGRjNjI3MWYwIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfcnguY1xuKysrIGIvbmV0L3NtYy9zbWNfcnguY1xuQEAgLTExNSwxNiArMTE1LDE1IEBAIHN0YXRpYyB2b2lkIHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4ge1xuIFx0c3RydWN0IHNtY19zcGRfcHJpdiAqcHJpdiA9IChzdHJ1Y3Qgc21jX3NwZF9wcml2ICopYnVmLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZwcml2LVx1MDAzZXNtYy1cdTAwM2Vjb25uO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBwcml2LVx1MDAzZXNtYztcbi1cdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbiBcbi1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8XG4tXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX1BFRVJGSU5DTE9TRVdBSVQgfHxcbi1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUKVxuLVx0XHRnb3RvIG91dDtcbi1cdGNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbiBcdGxvY2tfc29jayhzayk7XG4rXHRpZiAoY29ubi1cdTAwM2VmcmVlZCkge1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbiBcdHNtY19yeF91cGRhdGVfY29ucyhzbWMsIHByaXYtXHUwMDNlbGVuKTtcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdChwcml2LVx1MDAzZWxlbiwgXHUwMDI2Y29ubi1cdTAwM2VzcGxpY2VfcGVuZGluZykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMjo1Mi41MjM0MjM1NDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODIzNTE0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBTTUMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBTTUMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zbWMvc21jLmhgIGFuZCBgbmV0L3NtYy9zbWNfcnguY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZXkncmUgY2hhbmdpbmcgdGhlIGJpdGZpZWxkcyBga2lsbGVkYCwgYGZyZWVkYCwgYW5kIGBvdXRfb2Zfc3luY2Agd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYCBmcm9tIHNpbmdsZS1iaXQgYHU4IDogMWAgZmllbGRzIHRvIGp1c3QgcGxhaW4gYHU4YC4gVGhhdCdzIGludGVyZXN0aW5nOyBJIHdvbmRlciB3aGF0IHRoZSByYXRpb25hbGUgaXMuIEl0IGNvdWxkIGJlIGZvciBwZXJmb3JtYW5jZSwgcGVyaGFwcyB0byBhdm9pZCBzb21lIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBiaXRmaWVsZCBhY2Nlc3MsIG9yIG1heWJlIGl04oCZcyBhIGNvbXBpbGVyLXJlbGF0ZWQgaXNzdWUuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBsb29rLlxuXG5UaGUgb3RoZXIgY2hhbmdlIGlzIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaW4gYG5ldC9zbWMvc21jX3J4LmNgLCB3aGVyZSB0aGV5J3JlIG5vdyBjaGVja2luZyBgY29ubi1cdTAwM2VmcmVlZGAgaW5zdGVhZCBvZiBgc2stXHUwMDNlc2tfc3RhdGVgLiBBaCwgdGhpcyBpcyBpbiB0aGUgY29udGV4dCBvZiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBkZWFscyB3aXRoIHJlbGVhc2luZyBidWZmZXJzIGZvciByZWNlaXZlZCBkYXRhLiBUaGlzIGltcGxpZXMgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3RhdGUgdHJhbnNpdGlvbiBpc3N1ZS4gQW5kLCBpdCdzIG9jY3VycmluZyB1bmRlciBgbG9ja19zb2NrKHNrKWAsIG1lYW5pbmcgdGhhdCBpdCBsaWtlbHkgaGFzIGEgcmVsYXRpb24gdG8gYSBzb2NrZXQgbG9jayBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNvY2tldC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIFNNQywgd2hpY2ggSSBrbm93IGxldmVyYWdlcyBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24sIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGNvdWxkIHJlbGF0ZSB0byBzb21lIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4gU01DLCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBBRl9TTUMgc29ja2V0cy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCB3aXRoaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgc3BlY2lmaWNhbGx5LCBhIGNhc2Ugd2hlcmUgaXQgY2hlY2tzIGBjb25uLVx1MDAzZWZyZWVkYCB1bmRlciBsb2NrLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgU01DIGlzIGV2ZW4gZW5hYmxlZCBvbiB0aGUgc3lzdGVtIEknbSB0ZXN0aW5nIHdpdGguIExldCdzIHNlZS4uLiBgQ09ORklHX1NNQ2AuLi4gcmlnaHQsIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2V0IHRvICp5KiBvciAqbSogaW4gbXkga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZW4sIEkgY2FuIHByb3Blcmx5IGRpdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEyOjU4LjM0Njk0MTkyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkyODc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTEzLVxcbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcXG5uZXQvc21jL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTIyLVxcbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEyOjU4LjM5NTg3NjM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDc3MjQ4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgQ29uZmlndXJhdGlvbiBhbmQgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYFNNQ2AgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBrZXkgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCBpcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0sIGFuZCB5ZXMsIEkgcmVtZW1iZXIsIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMuIEl0J3MgdXNlZCBhcyBhIGNhbGxiYWNrIHdpdGhpbiBgcGlwZV9idWZfb3BlcmF0aW9uc2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHBpcGUgYnVmZmVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBTTUMgY29udGV4dC4gTm93LCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBkaWcgaW50byB3aGVyZSB0aGlzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzeXN0ZW0gdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzowMS45MDM2MDM2MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjEyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3J4X3BpcGVfYnVmX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcnguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19yeC5jPTEwOT1zdHJ1Y3Qgc21jX3NwZF9wcml2IHtcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMTEzLVxcbm5ldC9zbWMvc21jX3J4LmM6MTE0OnN0YXRpYyB2b2lkIHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxubmV0L3NtYy9zbWNfcnguYy0xMTUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfcnguYz0xNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHNtY19waXBlX29wcyA9IHtcXG5uZXQvc21jL3NtY19yeC5jOjE0NTpcXHQucmVsZWFzZSA9IHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlLFxcbm5ldC9zbWMvc21jX3J4LmMtMTQ2LVxcdC5nZXRcXHQgPSBzbWNfcnhfcGlwZV9idWZfZ2V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzowMS45NTEzMzAzNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA1OTE0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgc21jX3BpcGVfb3BzYCoqXG5cblJpZ2h0LCBzbyBgc21jX3BpcGVfb3BzYCBpcyBpbiB0aGUgbWl4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSBiZWluZyAqdXNlZCo/IEkga25vdyBpdCdzIGRlZmluZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGxvY2F0aW9uLCBidXQgSSBuZWVkIHRvIHRyYWNlIGl0cyBjb25uZWN0aW9ucy4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGZ1bmN0aW9uYWwgY29udGV4dCBhbmQgcHVycG9zZSBpbW1lZGlhdGVseSwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgZmlndXJpbmcgb3V0IHRoZSBpbnRyaWNhY2llcy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgcGllY2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MDQuOTU3MjQ4NDYzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDQ0Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19waXBlX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19yeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3J4LmM9MTM3PXN0YXRpYyBib29sIHNtY19yeF9waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMTQzLVxcbm5ldC9zbWMvc21jX3J4LmM6MTQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBzbWNfcGlwZV9vcHMgPSB7XFxubmV0L3NtYy9zbWNfcnguYy0xNDUtXFx0LnJlbGVhc2UgPSBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZSxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmM9MTYwPXN0YXRpYyBpbnQgc21jX3J4X3NwbGljZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBjaGFyICpzcmMsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jLTIyMy1cXHRzcGQucGFydGlhbCA9IHBhcnRpYWw7XFxubmV0L3NtYy9zbWNfcnguYzoyMjQ6XFx0c3BkLm9wcyA9IFxcdTAwMjZzbWNfcGlwZV9vcHM7XFxubmV0L3NtYy9zbWNfcnguYy0yMjUtXFx0c3BkLnNwZF9yZWxlYXNlID0gc21jX3J4X3NwZF9yZWxlYXNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzowNS4wMDY3MjIzMThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYzNjA0MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc21jX3J4X3NwbGljZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNtY19yeF9zcGxpY2VgIGlzIGluIHBsYXkuIFNlZW1zIGxpa2UgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgd2hhdGV2ZXIgdGhhdCBpcy4gTXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXMsIHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBhbmQgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCwgZmlndXJlIG91dCBpdHMgY29udGV4dCwgYW5kIGRldGVybWluZSBpZiB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbiBvciB0aGUgbHluY2hwaW4gb2YgYSBjcml0aWNhbCBwcm9jZXNzLiBJdCdzIHRpbWUgdG8gc3RhcnQgdHJhY2tpbmcgdGhlIHVzYWdlIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjA4LjA3MDMyOTY3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjgxNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3J4X3NwbGljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19yeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3J4LmM9MTQ5PXN0YXRpYyB2b2lkIHNtY19yeF9zcGRfcmVsZWFzZShzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkLFxcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0xNTktXFxubmV0L3NtYy9zbWNfcnguYzoxNjA6c3RhdGljIGludCBzbWNfcnhfc3BsaWNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGNoYXIgKnNyYywgc2l6ZV90IGxlbixcXG5uZXQvc21jL3NtY19yeC5jLTE2MS1cXHRcXHRcXHQgc3RydWN0IHNtY19zb2NrICpzbWMpXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtNDgwLVxcdFxcdFxcdFxcdH0gZWxzZSB7XFxubmV0L3NtYy9zbWNfcnguYzo0ODE6XFx0XFx0XFx0XFx0XFx0cmMgPSBzbWNfcnhfc3BsaWNlKHBpcGUsIHJjdmJ1Zl9iYXNlICtcXG5uZXQvc21jL3NtY19yeC5jLTQ4Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjaHVua19vZmYsIGNodW5rX2xlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MDguMTE5MDY5MzE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODk4MzI0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgUmVjZWl2ZSBNZXNzYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCBpcyBiZWluZyB1dGlsaXplZC4gTG9va3MgbGlrZSB0aGlzIGlzIHVzZWQgaW4gYHNtY19yeF9yZWN2bXNnYC4gUmlnaHQsIGFuZCBgc21jX3J4X3JlY3Ztc2dgIGlzICp0aGUqIHJlY2VpdmUgbWVzc2FnZSBoYW5kbGVyIGZvciBTTUMgc29ja2V0cy4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gVGltZSB0byBjaGVjayBgbmV0L3NtYy9zbWNfcnguY2AgdG8gc2VlIGhvdyBgc21jX3J4X3JlY3Ztc2dgIGlzIGFjdHVhbGx5IHdvcmtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MTEuMTA4OTA0NzcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIwODQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcnhfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTI4MzU9aW50IHNtY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjg2Mi1cXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lbGVuID0gMDtcXG5uZXQvc21jL2FmX3NtYy5jOjI4NjM6XFx0XFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIG1zZywgTlVMTCwgbGVuLCBmbGFncyk7XFxubmV0L3NtYy9hZl9zbWMuYy0yODY0LVxcdFxcdFNNQ19TVEFUX1JYX1BBWUxPQUQoc21jLCByYywgcmMpO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMjg0PXNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzMyMS1cXHRcXHRTTUNfU1RBVF9JTkMoc21jLCBzcGxpY2VfY250KTtcXG5uZXQvc21jL2FmX3NtYy5jOjMzMjI6XFx0XFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIE5VTEwsIHBpcGUsIGxlbiwgZmxhZ3MpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzMyMy1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTI4OT1zdGF0aWMgaW50IHNtY19yeF9yZWN2X3VyZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0zMzItXFxubmV0L3NtYy9zbWNfcnguYzozMzM6c3RhdGljIGJvb2wgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHNpemVfdCBwZWVrZWQpXFxubmV0L3NtYy9zbWNfcnguYy0zMzQte1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0zNDQtXFxubmV0L3NtYy9zbWNfcnguYzozNDU6Lyogc21jX3J4X3JlY3Ztc2cgLSByZWNlaXZlIGRhdGEgZnJvbSBSTUJFXFxubmV0L3NtYy9zbWNfcnguYy0zNDYtICogQG1zZzpcXHRjb3B5IGRhdGEgdG8gcmVjZWl2ZSBidWZmZXJcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzUxLSAqL1xcbm5ldC9zbWMvc21jX3J4LmM6MzUyOmludCBzbWNfcnhfcmVjdm1zZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9zbWMvc21jX3J4LmMtMzUzLVxcdFxcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzk0LVxcbm5ldC9zbWMvc21jX3J4LmM6Mzk1OlxcdFxcdGlmIChzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzbWMsIHBlZWtlZF9ieXRlcykpXFxubmV0L3NtYy9zbWNfcnguYy0zOTYtXFx0XFx0XFx0Z290byBjb3B5O1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0zOTktXFx0XFx0XFx0Lyogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBjb3VsZCBoYXZlIHJ1biBhZnRlclxcbm5ldC9zbWMvc21jX3J4LmM6NDAwOlxcdFxcdFxcdCAqIGFib3ZlIHNtY19yeF9yZWN2bXNnX2RhdGFfYXZhaWxhYmxlKClcXG5uZXQvc21jL3NtY19yeC5jLTQwMS1cXHRcXHRcXHQgKi9cXG5uZXQvc21jL3NtY19yeC5jOjQwMjpcXHRcXHRcXHRpZiAoc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc21jLCBwZWVrZWRfYnl0ZXMpKVxcbm5ldC9zbWMvc21jX3J4LmMtNDAzLVxcdFxcdFxcdFxcdGdvdG8gY29weTtcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtNTE0LVxcbm5ldC9zbWMvc21jX3J4LmM6NTE1OlxcdFxcdHRyYWNlX3NtY19yeF9yZWN2bXNnKHNtYywgY29weWxlbik7XFxubmV0L3NtYy9zbWNfcnguYy01MTYtXFx0fSB3aGlsZSAocmVhZF9yZW1haW5pbmcpO1xcbi0tXFxubmV0L3NtYy9zbWNfcnguaD0yMD12b2lkIHNtY19yeF9pbml0KHN0cnVjdCBzbWNfc29jayAqc21jKTtcXG5uZXQvc21jL3NtY19yeC5oLTIxLVxcbm5ldC9zbWMvc21jX3J4Lmg6MjI6aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L3NtYy9zbWNfcnguaC0yMy1cXHRcXHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpO1xcbi0tXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5jPTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKHNtY190eF9zZW5kbXNnKTtcXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmM6ODpFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woc21jX3J4X3JlY3Ztc2cpO1xcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYy05LUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNyX2xpbmtfZG93bik7XFxuLS1cXG5uZXQvc21jL3NtY190cmFjZXBvaW50Lmg9NzE9REVGSU5FX0VWRU5UKHNtY19tc2dfZXZlbnQsIHNtY190eF9zZW5kbXNnLFxcbi0tXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTc3LVxcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaDo3ODpERUZJTkVfRVZFTlQoc21jX21zZ19ldmVudCwgc21jX3J4X3JlY3Ztc2csXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoxMS4xNTgxMjIzNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyMzQ3MzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU01DIFNvY2tldCBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFdlJ3ZlIGdvdCBgc21jX3NwbGljZV9yZWFkYCBjYWxsaW5nIGBzbWNfcnhfcmVjdm1zZ2Agd2l0aCBhIGBwaXBlYCBhcmd1bWVudC4gVGhhdCBgc21jX3NwbGljZV9yZWFkYCBpcyBzcGVjaWZpY2FsbHkgdGhlIGBzcGxpY2VfcmVhZGAgaGFuZGxlciBmb3IgU01DIHNvY2tldHMsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaW52b2x2ZXMgdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSBhbiBTTUMgc29ja2V0IHRvIGEgcGlwZSB1c2luZyB0aGUgc3BsaWNlIG1lY2hhbmlzbS4gVGhlIGtleSBoZXJlIGlzIHRoZSB0cmlnZ2VyOiBzcGxpY2luZyBmcm9tIGFuIFNNQyBzb2NrZXQgdG8gYSBwaXBlLCBhbmQgKnRoZW4qIGVpdGhlciBjbG9zaW5nIHRoZSBwaXBlIG9yIHRyeWluZyB0byByZWFkIGZyb20gaXQuIFRoaXMgdHJpZ2dlcnMgdGhlIGJ1ZyBiZWNhdXNlIGl0IHJlc3VsdHMgaW4gYSBjYWxsIGNoYWluOiBgcGlwZV9idWZfcmVsZWFzZWAgLVx1MDAzZSBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLlxuXG5UaGUgcGF0Y2ggY2hhbmdlcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHRvIGNoZWNrIGBjb25uLVx1MDAzZWZyZWVkYCByYXRoZXIgdGhhbiBgc2stXHUwMDNlc2tfc3RhdGVgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBmaXgsIHJpZ2h0PyBTZWVtcyBsaWtlIGl0IGlzIHJlbGF0ZWQgdG8gdHJhY2tpbmcgd2hldGhlciB0aGUgY29ubmVjdGlvbiByZXNvdXJjZXMgaGF2ZSBiZWVuIGZyZWVkIGFscmVhZHkuIEFsc28sIHRoZSBwYXRjaCBjaGFuZ2VzIGBraWxsZWRgLCBgZnJlZWRgLCBgb3V0X29mX3N5bmNgIGZyb20gYml0ZmllbGRzIHRvIGB1OGAuIE15IGd1dCBzYXlzIHRoaXMgaXMgbGlrZWx5IHRvIGVsaW1pbmF0ZSBkYXRhIHJhY2VzIG9yIGp1c3QgYmVjYXVzZSBiaXRmaWVsZHMgY2FuIGJlIHByb2JsZW1hdGljIHdpdGggY29uY3VycmVudCBhY2Nlc3Mgd2l0aG91dCBwcm9wZXIgbG9ja2luZy5cblxuVGhlIG5leHQgcXVlc3Rpb24sIG5hdHVyYWxseSwgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLiBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgdGhlIGBzcGxpY2VfcmVhZGAgcGF0aCwgd2hpY2ggaXMgY3JpdGljYWwuIEFuZCwgaW1wb3J0YW50bHksIFNNQyBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR2l2ZW4gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhlIGxhdHRlciBpcyBzdGF0aWMsIHNvIGlmIGl0J3MgaW5saW5lZCwgd2UncmUgZ29pbmcgdG8gaGF2ZSBhIGhhcmQgdGltZSB0YXJnZXRpbmcgaXQgZGlyZWN0bHkuIEJ1dCBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBzbWNfcGlwZV9vcHNgLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBXZSdyZSBiZXR0ZXIgb2ZmIGxvb2tpbmcgYXQgYHNtY19zcGxpY2VfcmVhZGAgYW5kIGBzbWNfcnhfcmVjdm1zZ2AuXG5cblRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc21jL2FmX3NtYy5jYCBhbmQgc3RhcnQgd2l0aCBgc21jX3NwbGljZV9yZWFkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoxNy45ODE2MDAwMzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg3MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzE5Nz1pbnQgc21jX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMyODMtICovXFxubmV0L3NtYy9hZl9zbWMuYzozMjg0OnNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG5uZXQvc21jL2FmX3NtYy5jLTMyODUtXFx0XFx0XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MzMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzNDgtXFx0Lm1tYXBcXHRcXHQ9IHNvY2tfbm9fbW1hcCxcXG5uZXQvc21jL2FmX3NtYy5jOjMzNDk6XFx0LnNwbGljZV9yZWFkXFx0PSBzbWNfc3BsaWNlX3JlYWQsXFxubmV0L3NtYy9hZl9zbWMuYy0zMzUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjE4LjAzNDA5NzQ1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk3NDU3Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU01DIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc3BsaWNlX3JlYWRgIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIGBzbWNfc3BsaWNlX3JlYWRgIGlzIHRoZSBwcmltYXJ5IGhhbmRsZXIgZm9yIHRoYXQuIEdvb2QgdG8ga25vdy4gSSdsbCBhbHNvIHdhbnQgdG8gaW52ZXN0aWdhdGUgYHNtY19yeF9yZWN2bXNnYCDigJMgdGhhdCBzZWVtcyBsaWtlIGFub3RoZXIgcmVsZXZhbnQgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbiwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB3aG9sZSBTTUMgc3lzdGVtIGlzIHN1cHBvc2VkIHRvIHdvcmsuXG5cbkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIE9idmlvdXNseSwgd2UgbmVlZCBgU01DYCBlbmFibGVkLCBidXQgSSBzaG91bGQgY2hlY2sgdG8gZW5zdXJlIHRoYXQncyBub3QgdGhlIG9ubHkgcGllY2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIG9yIGVuYWJsaW5nIHN3aXRjaGVzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyB0byBmdW5jdGlvbiBwcm9wZXJseT8gVGhhdCB3aWxsIHNhdmUgbWUgYSB0b24gb2YgdGltZSBkb3duIHRoZSByb2FkLiBJdCdzIGJlc3QgdG8gZW5zdXJlIHRoZSBncm91bmR3b3JrIGlzIHNvbGlkIGJlZm9yZSBnZXR0aW5nIHRvbyBkZWVwIGludG8gdGhlIG5pdHR5LWdyaXR0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjIxLjkzMTU1ODc5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxODMxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoyMS45Nzk3NDg4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM2MzcyNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgYG5ldC9zbWNgIGNvbXBvbmVudC4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgdmlzaWJpbGl0eSBjb25zdHJhaW50cywgYW5kIG1heWJlIGV2ZW4gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMgZGV0YWlsZWQgaW4gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uc2lkZXJlZCBmb3Igc3VjY2Vzc2Z1bCBpbnRlZ3JhdGlvbiBhbmQgdXNlIG9mIGBzbWNgLiBMZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjI0LjkxNjEyMzg0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MjQuOTE2MTgyMzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzM3MzIzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBkZXBlbmRlbmN5IGNvcnJlY3RseT8gSXQgc2VlbXMgbGlrZSBpdCdzIHNheWluZyBcImRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1wiPyBXYWl0LCAqRElCUyo/IFRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0LiBJIHRob3VnaHQgaXQgd2FzIGp1c3QgSU5FVCBhbmQgSU5GSU5JQkFORC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdXRwdXQuLi5cblxuTm8sIHdhaXQsIGFtIEkgbWlzcmVhZGluZyB0aGlzPyBJdCAqZG9lcyogc2F5IERJQlMuIE9rYXksIG9rYXksIGxldCBtZSBnbyBiYWNrIGFuZCBsb29rIGF0IHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoZSBvdXRwdXQsIHNwZWNpZmljYWxseSBsaW5lIGZvdXIuLi4gKmRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCUyouLi4gRGFtbiBpdC4gSSB0aG91Z2h0IEkga25ldyB3aGF0IEkgd2FzIGxvb2tpbmcgYXQhXG5cbkhvbGQgb24sIEkgbXVzdCBoYXZlIG1pc3NlZCBzb21ldGhpbmcuIExldCBtZSByZXJlYWQgdGhlIG91dHB1dCBjYXJlZnVsbHkuIExldCBtZSByZWFkIGl0IGFnYWluIGFuZCBtYWtlIHN1cmUgdGhhdCBJIGRvbid0IG1pc3MgYW55dGhpbmcuIE9rYXksIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZSBvbmUgbW9yZSB0aW1lLiBKdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoyOS40ODk5MTgyOThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjI5LjQ4OTk5MDU5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIxOTA3MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB3aGF0J3MgdGhpcyBgRElCU2AgdGhpbmc/IE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgaXQgd2FzIGEgdHlwbywgc29tZXRoaW5nIGdhcmJsZWQgaW4gdGhlIGRhdGEgSSdtIHByb2Nlc3NpbmcuIEJ1dCB3YWl0Li4uaXQncyBub3QuIEknbSBzZWVpbmcgaXQgcmlnaHQgdGhlcmUuIFJpZ2h0LCBJJ20gcmVhZGluZyB0aGUgb3V0cHV0IG9mIGEgYHJlYWQtZmlsZWAgb3BlcmF0aW9uLCBhbmQgaXQncyBkZWNsYXJpbmcgYSBkZXBlbmRlbmN5IG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTYC4gSSdtIGdvaW5nIHRocm91Z2ggdGhpcyBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmUsIGl0IHNheXMgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIFJpZ2h0LCBJJ20gYW4gQUksIEkgZG9uJ3QgXCJzZWVcIiB0aGluZ3MgbGlrZSBhIGh1bWFuLiBJJ20gcHJvY2Vzc2luZyB0ZXh0LCBzbyBJIGFtIHNlZWluZyB0aGF0LCBJIGp1c3QgcHJvY2VzcyBpdCBhcyBhIGZ1bmN0aW9uIG9mIHRoZSByZWFkIG9wZXJhdGlvbi4gSSBhbSByZXZpZXdpbmcgdGhlIHJhdyBkYXRhIGRpcmVjdGx5LCBvciBzbyBJIGJlbGlldmUuIE5vdywgd2hlcmUgYW0gSSBnZXR0aW5nIHRoaXMgZnJvbT8gTGV0IG1lIGp1c3QgaXNvbGF0ZSBsaW5lIDQgb2YgdGhpcyBvdXRwdXQgZm9yIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzMuNzExOTAwOTk5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzNTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG5uZXQvc21jL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5uZXQvc21jL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBTTUNcXG5uZXQvc21jL0tjb25maWctMTctXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5uZXQvc21jL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBTTUMgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfU1lTQ0FMTFxcbm5ldC9zbWMvS2NvbmZpZy0yNi1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzMuNzU5OTQyMzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjgzMTgxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0IGltbWVkaWF0ZWx5IGZsYWdzIGEgZGVwZW5kZW5jeTogYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuICBUaGUgYElORVRgIGFuZCBgSU5GSU5JQkFORGAgcGFydHMgYXJlIGZhbWlsaWFyLCBubyBzdXJwcmlzZXMgdGhlcmUg4oCTIGNvcmUgbmV0d29ya2luZyBhbmQgaGlnaC1wZXJmb3JtYW5jZSBpbnRlcmNvbm5lY3QsIHJlc3BlY3RpdmVseS4gQnV0IHRoYXQgYERJQlNgLi4uIHRoYXQncyB0aGUgb25lIHRoYXQgc3RvcHMgbWUgY29sZCBmb3IgYSBtb21lbnQuIEkgZG9uJ3QgcmVjYWxsIHNlZWluZyB0aGF0IGJlZm9yZS5cblxuT2theSwgZGVlcCBicmVhdGguIE5vIG5lZWQgdG8gcGFuaWMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYERJQlNgIGFjdHVhbGx5ICppcyogaW4gdGhpcyBjb250ZXh0LiBJdCdzIGNsZWFybHkgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHNob3VsZCBhc3N1bWUgaXQncyB2YWxpZCBjb25maWcgYW5kIGluY2x1ZGUgaXQgd2l0aG91dCBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSXTigJlzIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkgYW5kIHRvIGFzc3VtZSB0aGlzIGRlcGVuZHMgb24gaXQuIE5vdywgbGV0J3MganVzdCBkb3VibGUgY2hlY2sgdGhhdCBgRElCU2AgaXMgYWN0dWFsbHkgYSBsZWdpdCBjb25maWcgb3B0aW9uIHNvbWV3aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGNoYXNpbmcgYSBwaGFudG9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzcuNzg4MjYyNzM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5Mzk5OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzkuNTY3NjcyMTg5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDMzOTcyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGBESUJTYCDigJMgdGhhdCdzIFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnQuXCIgUmlnaHQsIGFuZCBzaW5jZSBJIG5lZWQgdG8gY29uZmlndXJlIHRoaXMsIEkga25vdyBJJ20gbG9va2luZyBhdCBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBhbmQgYFNNQ2AuIEhvbGQgb24sIGBJTkVUYCBpcyBnZW5lcmFsbHkgYSBnaXZlbi4gU28gbXkgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYFtcIlNNQ1wiLCBcIklORklOSUJBTkRcIiwgXCJESUJTXCJdYC5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBqdXN0IGBTTUNgIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIHNvbWV0aGluZyBsaWtlIGBTTUNfRElBR2AuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvc21jL3NtYy5oYCBhbmQgYG5ldC9zbWMvc21jX3J4LmNgLCBjbGVhcmx5IGNvcmUgU01DIGNvbXBvbmVudHMsIHNvIGp1c3QgYFNNQ2Agc2hvdWxkIGNvdmVyIGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgZml4LiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLiBUaGUgYnVnIGlzIGluICp0aGF0KiBmdW5jdGlvbi4gSXQncyBjYWxsZWQgYnkgYHBpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIHBpcGUgYnVmZmVyIGlzIHJlbGVhc2VkIOKAkyB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcGlwZSBvciB3aGVuIHRoZSBwaXBlIGlzIGNsb3NlZC4gVGhlc2UgcGlwZSBidWZmZXJzIG9yaWdpbmF0ZSBmcm9tIGBzbWNfc3BsaWNlX3JlYWRgIC1cdTAwM2UgYHNtY19yeF9yZWN2bXNnYCAtXHUwMDNlIGBzbWNfcnhfc3BsaWNlYC4gT2theSwgc28gYHNtY19zcGxpY2VfcmVhZGAgYW5kIGBzbWNfcnhfcmVjdm1zZ2AgYXJlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIGBzbWNfc3BsaWNlX3JlYWRgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gQWhhLCBpdCdzIGluIGBuZXQvc21jL2FmX3NtYy5jYCwgc28gaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGhlbHBmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NDUuOTcxMDcyNDczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMzNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzc2l6ZV90IHNtY19zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzE5Nz1pbnQgc21jX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMyODMtICovXFxubmV0L3NtYy9hZl9zbWMuYzozMjg0OnNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG5uZXQvc21jL2FmX3NtYy5jLTMyODUtXFx0XFx0XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NDYuMDIwNDE2NTQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODUyMzkxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzbWNfc3BsaWNlX3JlYWRgJ3MgU2NvcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHNtY19zcGxpY2VfcmVhZGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYmFzZWQgb24gd2hhdCBJIHJlY2FsbCwgaXMgdGhhdCBpdCdzICpub3QqIHN0YXRpYy4gQnV0IGhvbGQgb24sIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVmb3JlIEkgbWFrZSBhbnkgZGVmaW5pdGl2ZSBhc3N1bXB0aW9ucyBoZXJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgdG8gY29uZmlybSB3aGV0aGVyIGl0J3MgdGllZCB0byBhIHNwZWNpZmljIHRyYW5zbGF0aW9uIHVuaXQgb3IgaGFzIGV4dGVybmFsIGxpbmthZ2UsIGJlY2F1c2UgZGVwZW5kaW5nIG9uIHRoZSBzY29wZSBpdCB3aWxsIGNoYW5nZSB0aGUgd2F5IHRoZSBwcm9ncmFtIGlzIHN0cnVjdHVyZWQgYW5kIGxpbmtlZC4gTm8gYXNzdW1wdGlvbnM7IHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBrZXksIGl0IGlzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUgb2YgdGhlIGZhY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjQ5LjIwNTY1OTIzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNjQxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3NwbGljZV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0zMTk3PWludCBzbWNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzI4My0gKi9cXG5uZXQvc21jL2FmX3NtYy5jOjMyODQ6c3NpemVfdCBzbWNfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxcbm5ldC9zbWMvYWZfc21jLmMtMzI4NS1cXHRcXHRcXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzM0OC1cXHQubW1hcFxcdFxcdD0gc29ja19ub19tbWFwLFxcbm5ldC9zbWMvYWZfc21jLmM6MzM0OTpcXHQuc3BsaWNlX3JlYWRcXHQ9IHNtY19zcGxpY2VfcmVhZCxcXG5uZXQvc21jL2FmX3NtYy5jLTMzNTAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NDkuMjUyODI4MjcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjM4MTI2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipVbnBhY2tpbmcgVGhpcyBcIk5vdCBTdGF0aWNcIiBUaGluZyoqXG5cblJpZ2h0LCBzbyB0aGlzIGlzbid0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIFRoaXMgXCJub3Qgc3RhdGljXCIgbm90aW9uIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBJdCBpbXBsaWVzIGEgZHluYW1pYyBlbGVtZW50LCBhIGNoYW5nZSBvdmVyIHRpbWUgb3IgYmFzZWQgb24gY29uZGl0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpub3QqIHN0YXRpYyBoZXJlLiBXaGF0IGFyZSB0aGUgdmFyaWFibGVzPyBXaGF0IGFyZSB0aGUgbW92aW5nIHBhcnRzPyBUaGlzIG5lZWRzIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5BbmQgdGhlbiwgdGhhdCBmdW5jdGlvbiwgYHNtY19yeF9yZWN2bXNnYC4uLiBUaGF0J3MgZ290IG15IGF0dGVudGlvbiBub3cuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBhIHNvY2tldCBtZXNzYWdlIHJlY2VpdmUsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24gKFNNQykgb3IgYSBzaW1pbGFyIGxvdy1sZXZlbCBwcm90b2NvbC4gVGhpcyBsaWtlbHkgcmVxdWlyZXMgZGVlcCBleGFtaW5hdGlvbi4gVGhlIG5hdHVyZSBvZiBcIm5vdCBzdGF0aWNcIiBub3cgbGlrZWx5IHdpbGwgbGVhZCB0byBleGFtaW5pbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBtZWNoYW5pc20gd2l0aGluIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NTMuNDc2NjQ0MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzE1MTE4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc21jX3J4X3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcnguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19yeC5jPTMzMz1zdGF0aWMgYm9vbCBzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc2l6ZV90IHBlZWtlZClcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzUxLSAqL1xcbm5ldC9zbWMvc21jX3J4LmM6MzUyOmludCBzbWNfcnhfcmVjdm1zZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9zbWMvc21jX3J4LmMtMzUzLVxcdFxcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NTMuOTQ5ODA1NjQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTQzNTUzMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IGp1c3QgYSBzaW1wbGUgdHdlYWs7IGl0J3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIGFuZCB0aGF0J3Mgc29tZXRoaW5nIHdvcnRoIGRpZ2dpbmcgaW50by4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSByb290IGNhdXNlLiBTcGVjaWZpY2FsbHksIGBzbWNfc3BsaWNlX3JlYWRgIGFuZCBgc21jX3J4X3JlY3Ztc2dgIHN0YW5kIG91dCBhcyB0aGUgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAsIGFuZCBpbXBvcnRhbnRseSwgaXQgdG91Y2hlcyBiaXRmaWVsZHMgd2l0aGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gLiBUaGUgYml0ZmllbGQgY2hhbmdlIHRvIGB1OGAgaXMgYSBjcnVjaWFsIGNsdWUuIEl0IHBvaW50cyBkaXJlY3RseSB0byBhIGNvbmN1cnJlbmN5IGlzc3VlIOKAkyBkYXRhIHJhY2VzIG9uIHRob3NlIGJpdGZpZWxkcyAoYGtpbGxlZGAsIGBmcmVlZGAsIGBvdXRfb2Zfc3luY2ApIHdoZXJlIGNvbmZsaWN0aW5nIHJlYWRzIGFuZCB3cml0ZXMgY291bGQgY29ycnVwdCBzdGF0ZS4gVGhlIGZpeCBlbnN1cmVzIHRoYXQgYGNvbm4tXHUwMDNlZnJlZWRgIGlzIGNoZWNrZWQgd2l0aGluIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHdoaWNoIGNvcnJlY3RseSBkZXRlcm1pbmVzIHRoZSBjb25uZWN0aW9uIHN0YXR1cy4gVGhpcyBkaXJlY3RseSB0YXJnZXRzIGEgYnVnIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuXG5cblRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBrZXkuIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaXMgYSBrZXkgcGFydCBvZiB0aGUgU01DIHJlY2VpdmUgcGF0aC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gcHJpb3JpdGl6ZSBmdXp6aW5nIGJvdGggdGhlIGBzcGxpY2VgIGFuZCBzdGFuZGFyZCByZWNlaXZlIHBhdGhzLiBUaGUgdXBkYXRlZCBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGNoZWNrcyBgY29ubi1cdTAwM2VmcmVlZGAgYW5kIGV4aXRzIGVhcmx5LCB3aGljaCBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd29ydGggZXhwbG9yaW5nIHdpdGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIGBzbWNfc3BsaWNlX3JlYWRgIGFuZCBgc21jX3J4X3JlY3Ztc2dgIGFzIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSByZWNlaXZlIG9wZXJhdGlvbnMgd2hlcmUgdGhlIHJhY2UgY29uZGl0aW9uIGV4aXN0ZWQuICBgc21jX3JlY3Ztc2dgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYHJlY3Ztc2coKWAsIGFuZCBpcyB0aGVyZWZvcmUgd29ydGggaW5jbHVkaW5nLlxuXG5UaGUgY29uZmlncyBuZWVkZWQgYXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEkgdmVyaWZpZWQgdGhhdCBgRElCU2AgaXMgcmVxdWlyZWQgZm9yIGBTTUNgLiBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRob3NlLiAgYElORVRgIHNlZW1zIGxpa2UgYSBnaXZlbiwgYnV0IGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJJ2xsIHByb2JhYmx5IG5vdCBleHBsaWNpdGx5IHNwZWNpZnkgaXQuXG5cbkhlcmXigJlzIHRoZSBjb3JlIG9mIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyBpbiBTTUMncyByZWNlaXZlIHBhdGggcmVsYXRlZCB0byBzcGxpY2UgcmVhZHMgYnkgbW9kaWZ5aW5nIGJpdGZpZWxkcywgZW5zdXJpbmcgY29ycmVjdCBjb25uZWN0aW9uIHN0YXRlIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgY29tcG9uZW50LCBzbyBpdCB3YXJyYW50cyBmdXp6aW5nLiBgc21jX3NwbGljZV9yZWFkYCwgYHNtY19yZWN2bXNnYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTQ6MDQuODkzMzYxNzkyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyMDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc21jX3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9hZl9zbWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTI3OTc9aW50IHNtY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjgzNC1cXG5uZXQvc21jL2FmX3NtYy5jOjI4MzU6aW50IHNtY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvc21jL2FmX3NtYy5jLTI4MzYtXFx0XFx0aW50IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxNDowNC45NDI2ODkzMTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5NDk5NjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byB0aGlzIGNvZGU6XG5cbioqTmFycm93aW5nIERvd24gdGhlIFByb2JsZW0ncyBTb3VyY2UqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGFyZWEgaGVyZS4gV2hpbGUgYHNtY19yZWN2bXNnYCBpcyBhIHZhbGlkIHN5bWJvbCB0byBrZWVwIGluIG1pbmQgZm9yIGNvbnRleHQsIGl0J3MgdGhlIGBzcGxpY2VgIHBhdGggdGhhdCdzIHRydWx5IHRoZSBjdWxwcml0LiBTcGVjaWZpY2FsbHksIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSBkaXJlY3RseSB0aWVkIHRvIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAsIHdoaWNoLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBnZXRzIGludm9rZWQgYnkgYHNtY19zcGxpY2VfcmVhZGAuIFRoZXJlZm9yZSwgYHNtY19zcGxpY2VfcmVhZGAgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZnVuY3Rpb24gdG8gemVybyBpbiBvbiBmb3Igbm93LiBJJ2xsIGFsc28gaW5jbHVkZSBgc21jX3J4X3JlY3Ztc2dgIGFzIGEgc2Vjb25kYXJ5IHN5bWJvbCwgZm9yIGJyb2FkZXIgY29udGV4dCBhbmQgcGVyc3BlY3RpdmUuXG5cbkknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQgYW5kIEkgd2lsbCBjYWxsIHRoaXMgcHJvY2VzcyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjoxNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxNDowOS41Mzc2ODgyNDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI4ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3NwbGljZV9yZWFkXCIsXG4gICAgXCJzbWNfcnhfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoU01DIHNvY2tldHMpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBXZSBzaG91bGQgZm9jdXMgb24gdGhlIFNNQyBzcGxpY2UgcmVhZCBhbmQgcmVjZWl2ZSBtZXNzYWdlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19zcGxpY2VfcmVhZFwiLFxuICAgIFwic21jX3J4X3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgcmVjZWl2ZSBwYXRoIGR1cmluZyBzcGxpY2UgcmVhZCBvcGVyYXRpb25zLiBJdCBjaGFuZ2VzIGJpdGZpZWxkcyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byBgdThgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gaXNzdWVzIGFuZCBjb3JyZWN0bHkgY2hlY2tzIGBjb25uLVxcdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKFNNQyBzb2NrZXRzKSwgc28gaXQgaXMgd29ydGggZnV6emluZy4gV2Ugc2hvdWxkIGZvY3VzIG9uIHRoZSBTTUMgc3BsaWNlIHJlYWQgYW5kIHJlY2VpdmUgbWVzc2FnZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTQ6MDkuNjIwOTg3MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODEyOTkxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTQ6MDkuNjIxNjExMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjgxMjM2MjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgc29ja2V0IHN0YXRlIHdpdGhvdXQgYSBsb2NrLCBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZGF0YSByYWNlcykgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU2NTk4MzgyOTljNzYwY2ZjZDgxMDMzZTBhMjUxNWI0ZWZmODkyMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwODoxMjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jLmggYi9uZXQvc21jL3NtYy5oXG5pbmRleCA1MjE0NWRmODNmNmU3Li40MjdiNmQ2M2I5OTMxIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWMuaFxuKysrIGIvbmV0L3NtYy9zbWMuaFxuQEAgLTI3Nyw5ICsyNzcsOSBAQCBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24ge1xuIFx0XHRcdFx0XHRcdCAqIDAgZm9yIFNNQy1SLCAzMiBmb3IgU01DLURcbiBcdFx0XHRcdFx0XHQgKi9cbiBcdHU2NFx0XHRcdHBlZXJfdG9rZW47XHQvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovXG4tXHR1OFx0XHRcdGtpbGxlZCA6IDE7XHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuLVx0dThcdFx0XHRmcmVlZCA6IDE7XHQvKiBub3JtYWwgdGVybWluYXRpb24gKi9cbi1cdHU4XHRcdFx0b3V0X29mX3N5bmMgOiAxOyAvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cbitcdHU4XHRcdFx0a2lsbGVkO1x0XHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuK1x0dThcdFx0XHRmcmVlZDtcdFx0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXG4rXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4gfTtcbiBcbiBzdHJ1Y3Qgc21jX3NvY2sge1x0XHRcdFx0Lyogc21jIHNvY2sgY29udGFpbmVyICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcnguYyBiL25ldC9zbWMvc21jX3J4LmNcbmluZGV4IDVjOWU0ZDhiNTdkZTQuLjE5N2ZkZGM2MjcxZjAgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19yeC5jXG4rKysgYi9uZXQvc21jL3NtY19yeC5jXG5AQCAtMTE1LDE2ICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3Qgc21jX3NwZF9wcml2ICpwcml2ID0gKHN0cnVjdCBzbWNfc3BkX3ByaXYgKilidWYtXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNnByaXYtXHUwMDNlc21jLVx1MDAzZWNvbm47XG4gXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHByaXYtXHUwMDNlc21jO1xuLVx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c21jLVx1MDAzZXNrO1xuIFxuLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQgfHxcbi1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fFxuLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19BUFBGSU5DTE9TRVdBSVQpXG4tXHRcdGdvdG8gb3V0O1xuLVx0Y29ubiA9IFx1MDAyNnNtYy1cdTAwM2Vjb25uO1xuIFx0bG9ja19zb2NrKHNrKTtcbitcdGlmIChjb25uLVx1MDAzZWZyZWVkKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFx0c21jX3J4X3VwZGF0ZV9jb25zKHNtYywgcHJpdi1cdTAwM2VsZW4pO1xuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGlmIChhdG9taWNfc3ViX2FuZF90ZXN0KHByaXYtXHUwMDNlbGVuLCBcdTAwMjZjb25uLVx1MDAzZXNwbGljZV9wZW5kaW5nKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjE0OjA5LjYyMTYxMTk5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODEyMzM0NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBTTUMgQ29ubmVjdGlvbiBTdHJ1Y3R1cmUgYW5kIENvbmN1cnJlbmN5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIHRoZSBgbmV0L3NtY2AgY29kZSwgc3BlY2lmaWNhbGx5IGBzbWMuaGAgYW5kIGBzbWNfcnguY2AuIEZpcnN0LCBJIHNlZSB0aGV5J3ZlIHN3aXRjaGVkIHRoZSBga2lsbGVkYCwgYGZyZWVkYCwgYW5kIGBvdXRfb2Zfc3luY2AgZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGZyb20gYml0ZmllbGRzIHRvIGZ1bGwgYHU4YCB0eXBlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYXZvaWRpbmcgdGhvc2UgbmFzdHkgYml0ZmllbGQtcmVsYXRlZCBjb25jdXJyZW5jeSBwcm9ibGVtcy4gQml0ZmllbGRzLCB3aXRoIHRoZWlyIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMsIGNhbiBiZSBhIHJlYWwgaGVhZGFjaGUgaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMuIFRoaXMgY2hhbmdlIGxpa2VseSBoZWxwcyBwcmV2ZW50IGRhdGEgcmFjZXMsIG9yIGV2ZW4gcG90ZW50aWFsbHkgYWRkcmVzc2VzIGlzc3VlcyBsaWtlIHVuYWxpZ25lZCBhY2Nlc3MuXG5cblRoZW4sIEknbSBsb29raW5nIGF0IGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaW4gYHNtY19yeC5jYC4gVGhleSdyZSByZXBsYWNpbmcgYSBjaGVjayBvbiB0aGUgc29ja2V0IHN0YXRlICh3aGljaCB3YXMgb3V0c2lkZSBhIGxvY2spIHdpdGggYSBjaGVjayBvZiBgY29ubi1cdTAwM2VmcmVlZGAgKmluc2lkZSogdGhlIGBsb2NrX3NvY2soc2spYCBibG9jay4gQmluZ28uIFRoYXQncyBhIGNsYXNzaWMgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24uIEl0J3Mgbm93IHN5bmNocm9uaXplZCEgSXQncyBsaWtlIGEgbGlnaHRidWxiIG1vbWVudC4gVGhlIGVhcmxpZXIgc3RhdGUgY2hlY2sgZGlkbid0IGhhdmUgYSBsb2NrLCB3aGljaCBpcyBiYWQsIGFuZCBsaWtlbHkgYWxsb3dlZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIHdpdGggdGhlIGNoZWNrIGRvbmUgaW5zaWRlIHRoZSBsb2NrLCB3ZSdyZSBwcm90ZWN0aW5nIGFnYWluc3QgdGhhdC5cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoZSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpZiBpdCB3ZXJlIHRyaWdnZXJlZCwgYW5kIEtDU0FOIHdvdWxkIGZsYWcgdGhlIGRhdGEgcmFjZS4gVGhhdCdzIGdvb2QuIEJ1dCBJJ20gYWxzbyB0aGlua2luZy4uLiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gSXQncyBpbXBvcnRhbnQgdG8gYmUgdGhvcm91Z2guXG5cbk5vcGUuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgc3luY2hyb25pemF0aW9uLCBzdGF0ZSBjaGVja2luZywgYW5kIGFkZHJlc3NpbmcgdGhvc2UgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb25zLiBUaGVyZSdzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHN3aXRjaCBmcm9tIGJpdGZpZWxkcyB0byBgdThgIHByZXZlbnRzIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIGFkamFjZW50IGZpZWxkcy4gVGhlIHNvY2tldCBsb2NrIGlzIG5vdyB1c2VkIGNvcnJlY3RseS4gVGhlIGluY3JlYXNlZCBzaXplIG9mIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGJlY2F1c2Ugb2YgdGhlIGB1OGBzIGlzIGltbWF0ZXJpYWwsIGFzIHRoZSBzdHJ1Y3R1cmUgaXMgaW50ZXJuYWwuXG5cbkdpdmVuIGFsbCB0aGF0LCBhbmQgYWZ0ZXIgcmV2aWV3aW5nIHRoYXQgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdCwgYW5kIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gV2UncmUgYWRkcmVzc2luZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGhlcmUsIGlzc3VlcyB0aGF0IGFyZSByZWFkaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgS0NTQU4uIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyLCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjE0OjIyLjQzMzk1MDMxNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgc29ja2V0IHN0YXRlIHdpdGhvdXQgYSBsb2NrLCBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZGF0YSByYWNlcykgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIHVzZSBmdWxsIGB1OGAgZmllbGRzIGluc3RlYWQgb2YgYml0ZmllbGRzIGZvciBga2lsbGVkYCwgYGZyZWVkYCwgYW5kIGBvdXRfb2Zfc3luY2AsIHByZXZlbnRpbmcgZGF0YSByYWNlcyBjYXVzZWQgYnkgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucyBvbiBhZGphY2VudCBiaXRmaWVsZHMuIEl0IGFsc28gdXBkYXRlcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHRvIGNoZWNrIGBjb25uLVxcdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcpn5m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 07:53:46 +0000 UTC FinishedAt: 2026-08-20 08:14:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "b9c04bb0-8893-400e-80c2-4c27bd98f949" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_splice_read", "smc_rx_recvmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7c21jX3J4X3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byB1c2UgZnVsbCBgdThgIGZpZWxkcyBpbnN0ZWFkIG9mIGJpdGZpZWxkcyBmb3IgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgLCBwcmV2ZW50aW5nIGRhdGEgcmFjZXMgY2F1c2VkIGJ5IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgb24gYWRqYWNlbnQgYml0ZmllbGRzLiBJdCBhbHNvIHVwZGF0ZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCB0byBjaGVjayBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIHJlY2VpdmUgcGF0aCBkdXJpbmcgc3BsaWNlIHJlYWQgb3BlcmF0aW9ucy4gSXQgY2hhbmdlcyBiaXRmaWVsZHMgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gYHU4YCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGlzc3VlcyBhbmQgY29ycmVjdGx5IGNoZWNrcyBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKFNNQyBzb2NrZXRzKSwgc28gaXQgaXMgd29ydGggZnV6emluZy4gV2Ugc2hvdWxkIGZvY3VzIG9uIHRoZSBTTUMgc3BsaWNlIHJlYWQgYW5kIHJlY2VpdmUgbWVzc2FnZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2NTk4MzgyOTljNzYwY2ZjZDgxMDMzZTBhMjUxNWI0ZWZmODkyMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwODoxMjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxuaW5kZXggNTIxNDVkZjgzZjZlNy4uNDI3YjZkNjNiOTkzMSAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jLmhcbkBAIC0yNzcsOSAmIzQzOzI3Nyw5IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XG4gXHRcdFx0XHRcdFx0ICogMCBmb3IgU01DLVIsIDMyIGZvciBTTUMtRFxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0dTY0XHRcdFx0cGVlcl90b2tlbjtcdC8qIFNNQy1EIHRva2VuIG9mIHBlZXIgKi9cbi1cdHU4XHRcdFx0a2lsbGVkIDogMTtcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXG4tXHR1OFx0XHRcdGZyZWVkIDogMTtcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuLVx0dThcdFx0XHRvdXRfb2Zfc3luYyA6IDE7IC8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqL1xuJiM0MztcdHU4XHRcdFx0a2lsbGVkO1x0XHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuJiM0MztcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuJiM0MztcdHU4XHRcdFx0b3V0X29mX3N5bmM7XHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cbiB9O1xuIFxuIHN0cnVjdCBzbWNfc29jayB7XHRcdFx0XHQvKiBzbWMgc29jayBjb250YWluZXIgKi9cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19yeC5jIGIvbmV0L3NtYy9zbWNfcnguY1xuaW5kZXggNWM5ZTRkOGI1N2RlNC4uMTk3ZmRkYzYyNzFmMCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3J4LmNcbkBAIC0xMTUsMTYgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3Qgc21jX3NwZF9wcml2ICpwcml2ID0gKHN0cnVjdCBzbWNfc3BkX3ByaXYgKilidWYtXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZwcml2LVx1MDAzZXNtYy1cdTAwM2Vjb25uO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBwcml2LVx1MDAzZXNtYztcbi1cdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbiBcbi1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8XG4tXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX1BFRVJGSU5DTE9TRVdBSVQgfHxcbi1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUKVxuLVx0XHRnb3RvIG91dDtcbi1cdGNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1x0aWYgKGNvbm4tXHUwMDNlZnJlZWQpIHtcbiYjNDM7XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRzbWNfcnhfdXBkYXRlX2NvbnMoc21jLCBwcml2LVx1MDAzZWxlbik7XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0aWYgKGF0b21pY19zdWJfYW5kX3Rlc3QocHJpdi1cdTAwM2VsZW4sIFx1MDAyNmNvbm4tXHUwMDNlc3BsaWNlX3BlbmRpbmcpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3NtY19yeF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXHUwMDNlZnJlZWRgIHVuZGVyIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChTTUMgc29ja2V0cyksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuIFdlIHNob3VsZCBmb2N1cyBvbiB0aGUgU01DIHNwbGljZSByZWFkIGFuZCByZWNlaXZlIG1lc3NhZ2UgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjU5ODM4Mjk5Yzc2MGNmY2Q4MTAzM2UwYTI1MTViNGVmZjg5MjBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDg6MTI6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaAppbmRleCA1MjE0NWRmODNmNmU3Li40MjdiNmQ2M2I5OTMxIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtYy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jLmgKQEAgLTI3Nyw5ICYjNDM7Mjc3LDkgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHsKIAkJCQkJCSAqIDAgZm9yIFNNQy1SLCAzMiBmb3IgU01DLUQKIAkJCQkJCSAqLwogCXU2NAkJCXBlZXJfdG9rZW47CS8qIFNNQy1EIHRva2VuIG9mIHBlZXIgKi8KLQl1OAkJCWtpbGxlZCA6IDE7CS8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovCi0JdTgJCQlmcmVlZCA6IDE7CS8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqLwotCXU4CQkJb3V0X29mX3N5bmMgOiAxOyAvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi8KJiM0MzsJdTgJCQlraWxsZWQ7CQkvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqLwomIzQzOwl1OAkJCWZyZWVkOwkJLyogbm9ybWFsIHRlcm1pbmF0aW9uICovCiYjNDM7CXU4CQkJb3V0X29mX3N5bmM7CS8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqLwogfTsKIAogc3RydWN0IHNtY19zb2NrIHsJCQkJLyogc21jIHNvY2sgY29udGFpbmVyICovCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19yeC5jIGIvbmV0L3NtYy9zbWNfcnguYwppbmRleCA1YzllNGQ4YjU3ZGU0Li4xOTdmZGRjNjI3MWYwIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3J4LmMKQEAgLTExNSwxNiAmIzQzOzExNSwxNSBAQCBzdGF0aWMgdm9pZCBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJCSAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc21jX3NwZF9wcml2ICpwcml2ID0gKHN0cnVjdCBzbWNfc3BkX3ByaXYgKilidWYtJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9ICZhbXA7cHJpdi0mZ3Q7c21jLSZndDtjb25uOwogCXN0cnVjdCBzbWNfc29jayAqc21jID0gcHJpdi0mZ3Q7c21jOwotCXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3NtYy0mZ3Q7c2s7CiAKLQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFNNQ19DTE9TRUQgfHwKLQkgICAgc2stJmd0O3NrX3N0YXRlID09IFNNQ19QRUVSRklOQ0xPU0VXQUlUIHx8Ci0JICAgIHNrLSZndDtza19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUKQotCQlnb3RvIG91dDsKLQljb25uID0gJmFtcDtzbWMtJmd0O2Nvbm47CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2ZyZWVkKSB7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KIAlzbWNfcnhfdXBkYXRlX2NvbnMoc21jLCBwcml2LSZndDtsZW4pOwogCXJlbGVhc2Vfc29jayhzayk7CiAJaWYgKGF0b21pY19zdWJfYW5kX3Rlc3QocHJpdi0mZ3Q7bGVuLCAmYW1wO2Nvbm4tJmd0O3NwbGljZV9wZW5kaW5nKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgU01DIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBTTUMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zbWMvc21jLmhgIGFuZCBgbmV0L3NtYy9zbWNfcnguY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBiaXRmaWVsZHMgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgIHdpdGhpbiB0aGUgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgZnJvbSBzaW5nbGUtYml0IGB1OCA6IDFgIGZpZWxkcyB0byBqdXN0IHBsYWluIGB1OGAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IEkgd29uZGVyIHdoYXQgdGhlIHJhdGlvbmFsZSBpcy4gSXQgY291bGQgYmUgZm9yIHBlcmZvcm1hbmNlLCBwZXJoYXBzIHRvIGF2b2lkIHNvbWUgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGJpdGZpZWxkIGFjY2Vzcywgb3IgbWF5YmUgaXTigJlzIGEgY29tcGlsZXItcmVsYXRlZCBpc3N1ZS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suCgpUaGUgb3RoZXIgY2hhbmdlIGlzIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaW4gYG5ldC9zbWMvc21jX3J4LmNgLCB3aGVyZSB0aGV5JiMzOTtyZSBub3cgY2hlY2tpbmcgYGNvbm4tJmd0O2ZyZWVkYCBpbnN0ZWFkIG9mIGBzay0mZ3Q7c2tfc3RhdGVgLiBBaCwgdGhpcyBpcyBpbiB0aGUgY29udGV4dCBvZiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBkZWFscyB3aXRoIHJlbGVhc2luZyBidWZmZXJzIGZvciByZWNlaXZlZCBkYXRhLiBUaGlzIGltcGxpZXMgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3RhdGUgdHJhbnNpdGlvbiBpc3N1ZS4gQW5kLCBpdCYjMzk7cyBvY2N1cnJpbmcgdW5kZXIgYGxvY2tfc29jayhzaylgLCBtZWFuaW5nIHRoYXQgaXQgbGlrZWx5IGhhcyBhIHJlbGF0aW9uIHRvIGEgc29ja2V0IGxvY2sgYW5kIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzb2NrZXQuCgpHaXZlbiB0aGF0IHRoaXMgaXMgU01DLCB3aGljaCBJIGtub3cgbGV2ZXJhZ2VzIHNoYXJlZCBtZW1vcnkgY29tbXVuaWNhdGlvbiwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGNvdWxkIHJlbGF0ZSB0byBzb21lIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4gU01DLCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBBRl9TTUMgc29ja2V0cy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCB3aXRoaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgc3BlY2lmaWNhbGx5LCBhIGNhc2Ugd2hlcmUgaXQgY2hlY2tzIGBjb25uLSZndDtmcmVlZGAgdW5kZXIgbG9jay4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgU01DIGlzIGV2ZW4gZW5hYmxlZCBvbiB0aGUgc3lzdGVtIEkmIzM5O20gdGVzdGluZyB3aXRoLiBMZXQmIzM5O3Mgc2VlLi4uIGBDT05GSUdfU01DYC4uLiByaWdodCwgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2V0IHRvICp5KiBvciAqbSogaW4gbXkga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZW4sIEkgY2FuIHByb3Blcmx5IGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNNQyBDb25maWd1cmF0aW9uIGFuZCBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBTTUNgIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSwgYW5kIHllcywgSSByZW1lbWJlciwgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYy4gSXQmIzM5O3MgdXNlZCBhcyBhIGNhbGxiYWNrIHdpdGhpbiBgcGlwZV9idWZfb3BlcmF0aW9uc2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHBpcGUgYnVmZmVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBTTUMgY29udGV4dC4gTm93LCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gd2hlcmUgdGhpcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc3lzdGVtIHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcnhfcGlwZV9idWZfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfcnguYz0xMDk9c3RydWN0IHNtY19zcGRfcHJpdiB7XG4tLVxubmV0L3NtYy9zbWNfcnguYy0xMTMtXG5uZXQvc21jL3NtY19yeC5jOjExNDpzdGF0aWMgdm9pZCBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxubmV0L3NtYy9zbWNfcnguYy0xMTUtXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4tLVxubmV0L3NtYy9zbWNfcnguYz0xNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHNtY19waXBlX29wcyA9IHtcbm5ldC9zbWMvc21jX3J4LmM6MTQ1Olx0LnJlbGVhc2UgPSBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZSxcbm5ldC9zbWMvc21jX3J4LmMtMTQ2LVx0LmdldFx0ID0gc21jX3J4X3BpcGVfYnVmX2dldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYHNtY19waXBlX29wc2AqKgoKUmlnaHQsIHNvIGBzbWNfcGlwZV9vcHNgIGlzIGluIHRoZSBtaXguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gb3Igc3RydWN0dXJlIGJlaW5nICp1c2VkKj8gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGxvY2F0aW9uLCBidXQgSSBuZWVkIHRvIHRyYWNlIGl0cyBjb25uZWN0aW9ucy4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGZ1bmN0aW9uYWwgY29udGV4dCBhbmQgcHVycG9zZSBpbW1lZGlhdGVseSwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgZmlndXJpbmcgb3V0IHRoZSBpbnRyaWNhY2llcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcGlwZV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19yeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmM9MTM3PXN0YXRpYyBib29sIHNtY19yeF9waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi0tXG5uZXQvc21jL3NtY19yeC5jLTE0My1cbm5ldC9zbWMvc21jX3J4LmM6MTQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBzbWNfcGlwZV9vcHMgPSB7XG5uZXQvc21jL3NtY19yeC5jLTE0NS1cdC5yZWxlYXNlID0gc21jX3J4X3BpcGVfYnVmX3JlbGVhc2UsXG4tLVxubmV0L3NtYy9zbWNfcnguYz0xNjA9c3RhdGljIGludCBzbWNfcnhfc3BsaWNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGNoYXIgKnNyYywgc2l6ZV90IGxlbixcbi0tXG5uZXQvc21jL3NtY19yeC5jLTIyMy1cdHNwZC5wYXJ0aWFsID0gcGFydGlhbDtcbm5ldC9zbWMvc21jX3J4LmM6MjI0Olx0c3BkLm9wcyA9IFx1MDAyNnNtY19waXBlX29wcztcbm5ldC9zbWMvc21jX3J4LmMtMjI1LVx0c3BkLnNwZF9yZWxlYXNlID0gc21jX3J4X3NwZF9yZWxlYXNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNtY19yeF9zcGxpY2VgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc21jX3J4X3NwbGljZWAgaXMgaW4gcGxheS4gU2VlbXMgbGlrZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCB3aGF0ZXZlciB0aGF0IGlzLiBNeSBpbW1lZGlhdGUgbmV4dCBxdWVzdGlvbiBpcywgd2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCwgZmlndXJlIG91dCBpdHMgY29udGV4dCwgYW5kIGRldGVybWluZSBpZiB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbiBvciB0aGUgbHluY2hwaW4gb2YgYSBjcml0aWNhbCBwcm9jZXNzLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHRyYWNraW5nIHRoZSB1c2FnZSBhbmQgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19yeF9zcGxpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19yeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmM9MTQ5PXN0YXRpYyB2b2lkIHNtY19yeF9zcGRfcmVsZWFzZShzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkLFxuLS1cbm5ldC9zbWMvc21jX3J4LmMtMTU5LVxubmV0L3NtYy9zbWNfcnguYzoxNjA6c3RhdGljIGludCBzbWNfcnhfc3BsaWNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGNoYXIgKnNyYywgc2l6ZV90IGxlbixcbm5ldC9zbWMvc21jX3J4LmMtMTYxLVx0XHRcdCBzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvc21jL3NtY19yeC5jLTQ4MC1cdFx0XHRcdH0gZWxzZSB7XG5uZXQvc21jL3NtY19yeC5jOjQ4MTpcdFx0XHRcdFx0cmMgPSBzbWNfcnhfc3BsaWNlKHBpcGUsIHJjdmJ1Zl9iYXNlICYjNDM7XG5uZXQvc21jL3NtY19yeC5jLTQ4Mi1cdFx0XHRcdFx0XHRcdGNodW5rX29mZiwgY2h1bmtfbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgUmVjZWl2ZSBNZXNzYWdlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50IGlzIGJlaW5nIHV0aWxpemVkLiBMb29rcyBsaWtlIHRoaXMgaXMgdXNlZCBpbiBgc21jX3J4X3JlY3Ztc2dgLiBSaWdodCwgYW5kIGBzbWNfcnhfcmVjdm1zZ2AgaXMgKnRoZSogcmVjZWl2ZSBtZXNzYWdlIGhhbmRsZXIgZm9yIFNNQyBzb2NrZXRzLiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gVGltZSB0byBjaGVjayBgbmV0L3NtYy9zbWNfcnguY2AgdG8gc2VlIGhvdyBgc21jX3J4X3JlY3Ztc2dgIGlzIGFjdHVhbGx5IHdvcmtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcnhfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MjgzNT1pbnQgc21jX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjg2Mi1cdFx0bXNnLVx1MDAzZW1zZ19uYW1lbGVuID0gMDtcbm5ldC9zbWMvYWZfc21jLmM6Mjg2MzpcdFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIG1zZywgTlVMTCwgbGVuLCBmbGFncyk7XG5uZXQvc21jL2FmX3NtYy5jLTI4NjQtXHRcdFNNQ19TVEFUX1JYX1BBWUxPQUQoc21jLCByYywgcmMpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MzI4ND1zc2l6ZV90IHNtY19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMzIxLVx0XHRTTUNfU1RBVF9JTkMoc21jLCBzcGxpY2VfY250KTtcbm5ldC9zbWMvYWZfc21jLmM6MzMyMjpcdFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIE5VTEwsIHBpcGUsIGxlbiwgZmxhZ3MpO1xubmV0L3NtYy9hZl9zbWMuYy0zMzIzLVx0fVxuLS1cbm5ldC9zbWMvc21jX3J4LmM9Mjg5PXN0YXRpYyBpbnQgc21jX3J4X3JlY3ZfdXJnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxubmV0L3NtYy9zbWNfcnguYy0zMzItXG5uZXQvc21jL3NtY19yeC5jOjMzMzpzdGF0aWMgYm9vbCBzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc2l6ZV90IHBlZWtlZClcbm5ldC9zbWMvc21jX3J4LmMtMzM0LXtcbi0tXG5uZXQvc21jL3NtY19yeC5jLTM0NC1cbm5ldC9zbWMvc21jX3J4LmM6MzQ1Oi8qIHNtY19yeF9yZWN2bXNnIC0gcmVjZWl2ZSBkYXRhIGZyb20gUk1CRVxubmV0L3NtYy9zbWNfcnguYy0zNDYtICogQG1zZzpcdGNvcHkgZGF0YSB0byByZWNlaXZlIGJ1ZmZlclxuLS1cbm5ldC9zbWMvc21jX3J4LmMtMzUxLSAqL1xubmV0L3NtYy9zbWNfcnguYzozNTI6aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvc21jL3NtY19yeC5jLTM1My1cdFx0ICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9zbWMvc21jX3J4LmMtMzk0LVxubmV0L3NtYy9zbWNfcnguYzozOTU6XHRcdGlmIChzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzbWMsIHBlZWtlZF9ieXRlcykpXG5uZXQvc21jL3NtY19yeC5jLTM5Ni1cdFx0XHRnb3RvIGNvcHk7XG4tLVxubmV0L3NtYy9zbWNfcnguYy0zOTktXHRcdFx0Lyogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBjb3VsZCBoYXZlIHJ1biBhZnRlclxubmV0L3NtYy9zbWNfcnguYzo0MDA6XHRcdFx0ICogYWJvdmUgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoKVxubmV0L3NtYy9zbWNfcnguYy00MDEtXHRcdFx0ICovXG5uZXQvc21jL3NtY19yeC5jOjQwMjpcdFx0XHRpZiAoc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc21jLCBwZWVrZWRfYnl0ZXMpKVxubmV0L3NtYy9zbWNfcnguYy00MDMtXHRcdFx0XHRnb3RvIGNvcHk7XG4tLVxubmV0L3NtYy9zbWNfcnguYy01MTQtXG5uZXQvc21jL3NtY19yeC5jOjUxNTpcdFx0dHJhY2Vfc21jX3J4X3JlY3Ztc2coc21jLCBjb3B5bGVuKTtcbm5ldC9zbWMvc21jX3J4LmMtNTE2LVx0fSB3aGlsZSAocmVhZF9yZW1haW5pbmcpO1xuLS1cbm5ldC9zbWMvc21jX3J4Lmg9MjA9dm9pZCBzbWNfcnhfaW5pdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19yeC5oLTIxLVxubmV0L3NtYy9zbWNfcnguaDoyMjppbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9zbWMvc21jX3J4LmgtMjMtXHRcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sIGludCBmbGFncyk7XG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5jPTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKHNtY190eF9zZW5kbXNnKTtcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYzo4OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNfcnhfcmVjdm1zZyk7XG5uZXQvc21jL3NtY190cmFjZXBvaW50LmMtOS1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woc21jcl9saW5rX2Rvd24pO1xuLS1cbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaD03MT1ERUZJTkVfRVZFTlQoc21jX21zZ19ldmVudCwgc21jX3R4X3NlbmRtc2csXG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTc3LVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oOjc4OkRFRklORV9FVkVOVChzbWNfbXNnX2V2ZW50LCBzbWNfcnhfcmVjdm1zZyxcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaC03OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgU01DIFNvY2tldCBCdWcqKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFdlJiMzOTt2ZSBnb3QgYHNtY19zcGxpY2VfcmVhZGAgY2FsbGluZyBgc21jX3J4X3JlY3Ztc2dgIHdpdGggYSBgcGlwZWAgYXJndW1lbnQuIFRoYXQgYHNtY19zcGxpY2VfcmVhZGAgaXMgc3BlY2lmaWNhbGx5IHRoZSBgc3BsaWNlX3JlYWRgIGhhbmRsZXIgZm9yIFNNQyBzb2NrZXRzLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGludm9sdmVzIHRyYW5zZmVycmluZyBkYXRhIGZyb20gYW4gU01DIHNvY2tldCB0byBhIHBpcGUgdXNpbmcgdGhlIHNwbGljZSBtZWNoYW5pc20uIFRoZSBrZXkgaGVyZSBpcyB0aGUgdHJpZ2dlcjogc3BsaWNpbmcgZnJvbSBhbiBTTUMgc29ja2V0IHRvIGEgcGlwZSwgYW5kICp0aGVuKiBlaXRoZXIgY2xvc2luZyB0aGUgcGlwZSBvciB0cnlpbmcgdG8gcmVhZCBmcm9tIGl0LiBUaGlzIHRyaWdnZXJzIHRoZSBidWcgYmVjYXVzZSBpdCByZXN1bHRzIGluIGEgY2FsbCBjaGFpbjogYHBpcGVfYnVmX3JlbGVhc2VgIC0mZ3Q7IGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuCgpUaGUgcGF0Y2ggY2hhbmdlcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHRvIGNoZWNrIGBjb25uLSZndDtmcmVlZGAgcmF0aGVyIHRoYW4gYHNrLSZndDtza19zdGF0ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGZpeCwgcmlnaHQ/IFNlZW1zIGxpa2UgaXQgaXMgcmVsYXRlZCB0byB0cmFja2luZyB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIHJlc291cmNlcyBoYXZlIGJlZW4gZnJlZWQgYWxyZWFkeS4gQWxzbywgdGhlIHBhdGNoIGNoYW5nZXMgYGtpbGxlZGAsIGBmcmVlZGAsIGBvdXRfb2Zfc3luY2AgZnJvbSBiaXRmaWVsZHMgdG8gYHU4YC4gTXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgdG8gZWxpbWluYXRlIGRhdGEgcmFjZXMgb3IganVzdCBiZWNhdXNlIGJpdGZpZWxkcyBjYW4gYmUgcHJvYmxlbWF0aWMgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB3aXRob3V0IHByb3BlciBsb2NraW5nLgoKVGhlIG5leHQgcXVlc3Rpb24sIG5hdHVyYWxseSwgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLiBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgdGhlIGBzcGxpY2VfcmVhZGAgcGF0aCwgd2hpY2ggaXMgY3JpdGljYWwuIEFuZCwgaW1wb3J0YW50bHksIFNNQyBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR2l2ZW4gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhlIGxhdHRlciBpcyBzdGF0aWMsIHNvIGlmIGl0JiMzOTtzIGlubGluZWQsIHdlJiMzOTtyZSBnb2luZyB0byBoYXZlIGEgaGFyZCB0aW1lIHRhcmdldGluZyBpdCBkaXJlY3RseS4gQnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBzbWNfcGlwZV9vcHNgLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgaW5saW5lZC4gV2UmIzM5O3JlIGJldHRlciBvZmYgbG9va2luZyBhdCBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYC4KClRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc21jL2FmX3NtYy5jYCBhbmQgc3RhcnQgd2l0aCBgc21jX3NwbGljZV9yZWFkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3NwbGljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTMxOTc9aW50IHNtY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzI4My0gKi9cbm5ldC9zbWMvYWZfc21jLmM6MzI4NDpzc2l6ZV90IHNtY19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG5uZXQvc21jL2FmX3NtYy5jLTMyODUtXHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMzMzE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX3NvY2tfb3BzID0ge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM0OC1cdC5tbWFwXHRcdD0gc29ja19ub19tbWFwLFxubmV0L3NtYy9hZl9zbWMuYzozMzQ5Olx0LnNwbGljZV9yZWFkXHQ9IHNtY19zcGxpY2VfcmVhZCxcbm5ldC9zbWMvYWZfc21jLmMtMzM1MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDAxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNwbGljZV9yZWFkYCBmdW5jdGlvbmFsaXR5LCBhbmQgaXQgbG9va3MgbGlrZSBgc21jX3NwbGljZV9yZWFkYCBpcyB0aGUgcHJpbWFyeSBoYW5kbGVyIGZvciB0aGF0LiBHb29kIHRvIGtub3cuIEkmIzM5O2xsIGFsc28gd2FudCB0byBpbnZlc3RpZ2F0ZSBgc21jX3J4X3JlY3Ztc2dgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYW5vdGhlciByZWxldmFudCBhcmVhIGZvciBpbnZlc3RpZ2F0aW9uLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHdob2xlIFNNQyBzeXN0ZW0gaXMgc3VwcG9zZWQgdG8gd29yay4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIE9idmlvdXNseSwgd2UgbmVlZCBgU01DYCBlbmFibGVkLCBidXQgSSBzaG91bGQgY2hlY2sgdG8gZW5zdXJlIHRoYXQmIzM5O3Mgbm90IHRoZSBvbmx5IHBpZWNlLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBvciBlbmFibGluZyBzd2l0Y2hlcyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgdG8gZnVuY3Rpb24gcHJvcGVybHk/IFRoYXQgd2lsbCBzYXZlIG1lIGEgdG9uIG9mIHRpbWUgZG93biB0aGUgcm9hZC4gSXQmIzM5O3MgYmVzdCB0byBlbnN1cmUgdGhlIGdyb3VuZHdvcmsgaXMgc29saWQgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAgaW50byB0aGUgbml0dHktZ3JpdHR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODY2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgbmV0L3NtY2AgY29tcG9uZW50LiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgdmlzaWJpbGl0eSBjb25zdHJhaW50cywgYW5kIG1heWJlIGV2ZW4gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMgZGV0YWlsZWQgaW4gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uc2lkZXJlZCBmb3Igc3VjY2Vzc2Z1bCBpbnRlZ3JhdGlvbiBhbmQgdXNlIG9mIGBzbWNgLiBMZXQmIzM5O3MgZ2V0IHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIERpZCBJIGp1c3QgcmVhZCB0aGF0IGRlcGVuZGVuY3kgY29ycmVjdGx5PyBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHNheWluZyAmIzM0O2RlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkQgJmFtcDsmYW1wOyBESUJTJiMzNDs/IFdhaXQsICpESUJTKj8gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBJIHRob3VnaHQgaXQgd2FzIGp1c3QgSU5FVCBhbmQgSU5GSU5JQkFORC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdXRwdXQuLi4KCk5vLCB3YWl0LCBhbSBJIG1pc3JlYWRpbmcgdGhpcz8gSXQgKmRvZXMqIHNheSBESUJTLiBPa2F5LCBva2F5LCBsZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgb3V0cHV0LCBzcGVjaWZpY2FsbHkgbGluZSBmb3VyLi4uICpkZXBlbmRzIG9uIElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCUyouLi4gRGFtbiBpdC4gSSB0aG91Z2h0IEkga25ldyB3aGF0IEkgd2FzIGxvb2tpbmcgYXQhCgpIb2xkIG9uLCBJIG11c3QgaGF2ZSBtaXNzZWQgc29tZXRoaW5nLiBMZXQgbWUgcmVyZWFkIHRoZSBvdXRwdXQgY2FyZWZ1bGx5LiBMZXQgbWUgcmVhZCBpdCBhZ2FpbiBhbmQgbWFrZSBzdXJlIHRoYXQgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gT2theSwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZSBvbmUgbW9yZSB0aW1lLiBKdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHdoYXQmIzM5O3MgdGhpcyBgRElCU2AgdGhpbmc/IE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgaXQgd2FzIGEgdHlwbywgc29tZXRoaW5nIGdhcmJsZWQgaW4gdGhlIGRhdGEgSSYjMzk7bSBwcm9jZXNzaW5nLiBCdXQgd2FpdC4uLml0JiMzOTtzIG5vdC4gSSYjMzk7bSBzZWVpbmcgaXQgcmlnaHQgdGhlcmUuIFJpZ2h0LCBJJiMzOTttIHJlYWRpbmcgdGhlIG91dHB1dCBvZiBhIGByZWFkLWZpbGVgIG9wZXJhdGlvbiwgYW5kIGl0JiMzOTtzIGRlY2xhcmluZyBhIGRlcGVuZGVuY3kgb24gYElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCU2AuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGlzIGFnYWluLCBqdXN0IHRvIG1ha2Ugc3VyZSwgaXQgc2F5cyBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBSaWdodCwgSSYjMzk7bSBhbiBBSSwgSSBkb24mIzM5O3QgJiMzNDtzZWUmIzM0OyB0aGluZ3MgbGlrZSBhIGh1bWFuLiBJJiMzOTttIHByb2Nlc3NpbmcgdGV4dCwgc28gSSBhbSBzZWVpbmcgdGhhdCwgSSBqdXN0IHByb2Nlc3MgaXQgYXMgYSBmdW5jdGlvbiBvZiB0aGUgcmVhZCBvcGVyYXRpb24uIEkgYW0gcmV2aWV3aW5nIHRoZSByYXcgZGF0YSBkaXJlY3RseSwgb3Igc28gSSBiZWxpZXZlLiBOb3csIHdoZXJlIGFtIEkgZ2V0dGluZyB0aGlzIGZyb20/IExldCBtZSBqdXN0IGlzb2xhdGUgbGluZSA0IG9mIHRoaXMgb3V0cHV0IGZvciBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBkZXBlbmRlbmN5OiBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiAgVGhlIGBJTkVUYCBhbmQgYElORklOSUJBTkRgIHBhcnRzIGFyZSBmYW1pbGlhciwgbm8gc3VycHJpc2VzIHRoZXJlIOKAkyBjb3JlIG5ldHdvcmtpbmcgYW5kIGhpZ2gtcGVyZm9ybWFuY2UgaW50ZXJjb25uZWN0LCByZXNwZWN0aXZlbHkuIEJ1dCB0aGF0IGBESUJTYC4uLiB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCBzdG9wcyBtZSBjb2xkIGZvciBhIG1vbWVudC4gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyB0aGF0IGJlZm9yZS4KCk9rYXksIGRlZXAgYnJlYXRoLiBObyBuZWVkIHRvIHBhbmljLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBESUJTYCBhY3R1YWxseSAqaXMqIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgY2xlYXJseSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgc2hvdWxkIGFzc3VtZSBpdCYjMzk7cyB2YWxpZCBjb25maWcgYW5kIGluY2x1ZGUgaXQgd2l0aG91dCBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSXTigJlzIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkgYW5kIHRvIGFzc3VtZSB0aGlzIGRlcGVuZHMgb24gaXQuIE5vdywgbGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoYXQgYERJQlNgIGlzIGFjdHVhbGx5IGEgbGVnaXQgY29uZmlnIG9wdGlvbiBzb21ld2hlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIHBoYW50b20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTczCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGBESUJTYCDigJMgdGhhdCYjMzk7cyAmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0LiYjMzQ7IFJpZ2h0LCBhbmQgc2luY2UgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGlzLCBJIGtub3cgSSYjMzk7bSBsb29raW5nIGF0IGBJTkVUYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGFuZCBgU01DYC4gSG9sZCBvbiwgYElORVRgIGlzIGdlbmVyYWxseSBhIGdpdmVuLiBTbyBteSBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBgWyYjMzQ7U01DJiMzNDssICYjMzQ7SU5GSU5JQkFORCYjMzQ7LCAmIzM0O0RJQlMmIzM0O11gLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBqdXN0IGBTTUNgIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIHNvbWV0aGluZyBsaWtlIGBTTUNfRElBR2AuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvc21jL3NtYy5oYCBhbmQgYG5ldC9zbWMvc21jX3J4LmNgLCBjbGVhcmx5IGNvcmUgU01DIGNvbXBvbmVudHMsIHNvIGp1c3QgYFNNQ2Agc2hvdWxkIGNvdmVyIGl0LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGZpeC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIFRoZSBidWcgaXMgaW4gKnRoYXQqIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgYnkgYHBpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIHBpcGUgYnVmZmVyIGlzIHJlbGVhc2VkIOKAkyB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcGlwZSBvciB3aGVuIHRoZSBwaXBlIGlzIGNsb3NlZC4gVGhlc2UgcGlwZSBidWZmZXJzIG9yaWdpbmF0ZSBmcm9tIGBzbWNfc3BsaWNlX3JlYWRgIC0mZ3Q7IGBzbWNfcnhfcmVjdm1zZ2AgLSZndDsgYHNtY19yeF9zcGxpY2VgLiBPa2F5LCBzbyBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBhcmUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIGBzbWNfc3BsaWNlX3JlYWRgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gQWhhLCBpdCYjMzk7cyBpbiBgbmV0L3NtYy9hZl9zbWMuY2AsIHNvIGl0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaGVscGZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3NpemVfdCBzbWNfc3BsaWNlX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MzE5Nz1pbnQgc21jX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjgzLSAqL1xubmV0L3NtYy9hZl9zbWMuYzozMjg0OnNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbm5ldC9zbWMvYWZfc21jLmMtMzI4NS1cdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzbWNfc3BsaWNlX3JlYWRgJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHNtY19zcGxpY2VfcmVhZGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYmFzZWQgb24gd2hhdCBJIHJlY2FsbCwgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIEJ1dCBob2xkIG9uLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBJIG1ha2UgYW55IGRlZmluaXRpdmUgYXNzdW1wdGlvbnMgaGVyZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlZmluaXRpb24gYW5kIHVzYWdlIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyB0aWVkIHRvIGEgc3BlY2lmaWMgdHJhbnNsYXRpb24gdW5pdCBvciBoYXMgZXh0ZXJuYWwgbGlua2FnZSwgYmVjYXVzZSBkZXBlbmRpbmcgb24gdGhlIHNjb3BlIGl0IHdpbGwgY2hhbmdlIHRoZSB3YXkgdGhlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBhbmQgbGlua2VkLiBObyBhc3N1bXB0aW9uczsgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIGtleSwgaXQgaXMgYWx3YXlzIGJlc3QgdG8gYmUgc3VyZSBvZiB0aGUgZmFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19zcGxpY2VfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0zMTk3PWludCBzbWNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMyODMtICovXG5uZXQvc21jL2FmX3NtYy5jOjMyODQ6c3NpemVfdCBzbWNfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxubmV0L3NtYy9hZl9zbWMuYy0zMjg1LVx0XHRcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzNDgtXHQubW1hcFx0XHQ9IHNvY2tfbm9fbW1hcCxcbm5ldC9zbWMvYWZfc21jLmM6MzM0OTpcdC5zcGxpY2VfcmVhZFx0PSBzbWNfc3BsaWNlX3JlYWQsXG5uZXQvc21jL2FmX3NtYy5jLTMzNTAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqVW5wYWNraW5nIFRoaXMgJiMzNDtOb3QgU3RhdGljJiMzNDsgVGhpbmcqKgoKUmlnaHQsIHNvIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIFRoaXMgJiMzNDtub3Qgc3RhdGljJiMzNDsgbm90aW9uIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBJdCBpbXBsaWVzIGEgZHluYW1pYyBlbGVtZW50LCBhIGNoYW5nZSBvdmVyIHRpbWUgb3IgYmFzZWQgb24gY29uZGl0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqbm90KiBzdGF0aWMgaGVyZS4gV2hhdCBhcmUgdGhlIHZhcmlhYmxlcz8gV2hhdCBhcmUgdGhlIG1vdmluZyBwYXJ0cz8gVGhpcyBuZWVkcyBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KCkFuZCB0aGVuLCB0aGF0IGZ1bmN0aW9uLCBgc21jX3J4X3JlY3Ztc2dgLi4uIFRoYXQmIzM5O3MgZ290IG15IGF0dGVudGlvbiBub3cuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBhIHNvY2tldCBtZXNzYWdlIHJlY2VpdmUsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24gKFNNQykgb3IgYSBzaW1pbGFyIGxvdy1sZXZlbCBwcm90b2NvbC4gVGhpcyBsaWtlbHkgcmVxdWlyZXMgZGVlcCBleGFtaW5hdGlvbi4gVGhlIG5hdHVyZSBvZiAmIzM0O25vdCBzdGF0aWMmIzM0OyBub3cgbGlrZWx5IHdpbGwgbGVhZCB0byBleGFtaW5pbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBtZWNoYW5pc20gd2l0aGluIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzbWNfcnhfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3J4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfcnguYz0zMzM9c3RhdGljIGJvb2wgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHNpemVfdCBwZWVrZWQpXG4tLVxubmV0L3NtYy9zbWNfcnguYy0zNTEtICovXG5uZXQvc21jL3NtY19yeC5jOjM1MjppbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9zbWMvc21jX3J4LmMtMzUzLVx0XHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBhIHNpbXBsZSB0d2VhazsgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIGFuZCB0aGF0JiMzOTtzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcm9vdCBjYXVzZS4gU3BlY2lmaWNhbGx5LCBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBzdGFuZCBvdXQgYXMgdGhlIHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgYW5kIGltcG9ydGFudGx5LCBpdCB0b3VjaGVzIGJpdGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuIFRoZSBiaXRmaWVsZCBjaGFuZ2UgdG8gYHU4YCBpcyBhIGNydWNpYWwgY2x1ZS4gSXQgcG9pbnRzIGRpcmVjdGx5IHRvIGEgY29uY3VycmVuY3kgaXNzdWUg4oCTIGRhdGEgcmFjZXMgb24gdGhvc2UgYml0ZmllbGRzIChga2lsbGVkYCwgYGZyZWVkYCwgYG91dF9vZl9zeW5jYCkgd2hlcmUgY29uZmxpY3RpbmcgcmVhZHMgYW5kIHdyaXRlcyBjb3VsZCBjb3JydXB0IHN0YXRlLiBUaGUgZml4IGVuc3VyZXMgdGhhdCBgY29ubi0mZ3Q7ZnJlZWRgIGlzIGNoZWNrZWQgd2l0aGluIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHdoaWNoIGNvcnJlY3RseSBkZXRlcm1pbmVzIHRoZSBjb25uZWN0aW9uIHN0YXR1cy4gVGhpcyBkaXJlY3RseSB0YXJnZXRzIGEgYnVnIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuCgpUaGUgZnVuY3Rpb25hbCBjaGFuZ2UgaXMga2V5LiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGlzIGEga2V5IHBhcnQgb2YgdGhlIFNNQyByZWNlaXZlIHBhdGguIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBwcmlvcml0aXplIGZ1enppbmcgYm90aCB0aGUgYHNwbGljZWAgYW5kIHN0YW5kYXJkIHJlY2VpdmUgcGF0aHMuIFRoZSB1cGRhdGVkIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgY2hlY2tzIGBjb25uLSZndDtmcmVlZGAgYW5kIGV4aXRzIGVhcmx5LCB3aGljaCBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd29ydGggZXhwbG9yaW5nIHdpdGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBhcyB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgcmVjZWl2ZSBvcGVyYXRpb25zIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBleGlzdGVkLiAgYHNtY19yZWN2bXNnYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGByZWN2bXNnKClgLCBhbmQgaXMgdGhlcmVmb3JlIHdvcnRoIGluY2x1ZGluZy4KClRoZSBjb25maWdzIG5lZWRlZCBhcmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gSSB2ZXJpZmllZCB0aGF0IGBESUJTYCBpcyByZXF1aXJlZCBmb3IgYFNNQ2AuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRob3NlLiAgYElORVRgIHNlZW1zIGxpa2UgYSBnaXZlbiwgYnV0IGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bGwgcHJvYmFibHkgbm90IGV4cGxpY2l0bHkgc3BlY2lmeSBpdC4KCkhlcmXigJlzIHRoZSBjb3JlIG9mIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyBpbiBTTUMmIzM5O3MgcmVjZWl2ZSBwYXRoIHJlbGF0ZWQgdG8gc3BsaWNlIHJlYWRzIGJ5IG1vZGlmeWluZyBiaXRmaWVsZHMsIGVuc3VyaW5nIGNvcnJlY3QgY29ubmVjdGlvbiBzdGF0ZSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgc28gaXQgd2FycmFudHMgZnV6emluZy4gYHNtY19zcGxpY2VfcmVhZGAsIGBzbWNfcmVjdm1zZ2AgYW5kIGBzbWNfcnhfcmVjdm1zZ2AgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyB0byB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzbWNfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0yNzk3PWludCBzbWNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yODM0LVxubmV0L3NtYy9hZl9zbWMuYzoyODM1OmludCBzbWNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvc21jL2FmX3NtYy5jLTI4MzYtXHRcdGludCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDMKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoaXMgY29kZToKCioqTmFycm93aW5nIERvd24gdGhlIFByb2JsZW0mIzM5O3MgU291cmNlKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGFyZWEgaGVyZS4gV2hpbGUgYHNtY19yZWN2bXNnYCBpcyBhIHZhbGlkIHN5bWJvbCB0byBrZWVwIGluIG1pbmQgZm9yIGNvbnRleHQsIGl0JiMzOTtzIHRoZSBgc3BsaWNlYCBwYXRoIHRoYXQmIzM5O3MgdHJ1bHkgdGhlIGN1bHByaXQuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGRpcmVjdGx5IHRpZWQgdG8gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgd2hpY2gsIGZyb20gd2hhdCBJIGNhbiBzZWUsIGdldHMgaW52b2tlZCBieSBgc21jX3NwbGljZV9yZWFkYC4gVGhlcmVmb3JlLCBgc21jX3NwbGljZV9yZWFkYCBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBmdW5jdGlvbiB0byB6ZXJvIGluIG9uIGZvciBub3cuIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgc21jX3J4X3JlY3Ztc2dgIGFzIGEgc2Vjb25kYXJ5IHN5bWJvbCwgZm9yIGJyb2FkZXIgY29udGV4dCBhbmQgcGVyc3BlY3RpdmUuCgpJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgSSB3aWxsIGNhbGwgdGhpcyBwcm9jZXNzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3NtY19yeF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXHUwMDNlZnJlZWRgIHVuZGVyIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChTTUMgc29ja2V0cyksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuIFdlIHNob3VsZCBmb2N1cyBvbiB0aGUgU01DIHNwbGljZSByZWFkIGFuZCByZWNlaXZlIG1lc3NhZ2UgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7c21jX3J4X3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIHJlY2VpdmUgcGF0aCBkdXJpbmcgc3BsaWNlIHJlYWQgb3BlcmF0aW9ucy4gSXQgY2hhbmdlcyBiaXRmaWVsZHMgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gYHU4YCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGlzc3VlcyBhbmQgY29ycmVjdGx5IGNoZWNrcyBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKFNNQyBzb2NrZXRzKSwgc28gaXQgaXMgd29ydGggZnV6emluZy4gV2Ugc2hvdWxkIGZvY3VzIG9uIHRoZSBTTUMgc3BsaWNlIHJlYWQgYW5kIHJlY2VpdmUgbWVzc2FnZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byB1c2UgZnVsbCBgdThgIGZpZWxkcyBpbnN0ZWFkIG9mIGJpdGZpZWxkcyBmb3IgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgLCBwcmV2ZW50aW5nIGRhdGEgcmFjZXMgY2F1c2VkIGJ5IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgb24gYWRqYWNlbnQgYml0ZmllbGRzLiBJdCBhbHNvIHVwZGF0ZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCB0byBjaGVjayBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTY1OTgzODI5OWM3NjBjZmNkODEwMzNlMGEyNTE1YjRlZmY4OTIwYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDA4OjEyOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmgKaW5kZXggNTIxNDVkZjgzZjZlNy4uNDI3YjZkNjNiOTkzMSAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtYy5oCkBAIC0yNzcsOSAmIzQzOzI3Nyw5IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7CiAJCQkJCQkgKiAwIGZvciBTTUMtUiwgMzIgZm9yIFNNQy1ECiAJCQkJCQkgKi8KIAl1NjQJCQlwZWVyX3Rva2VuOwkvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovCi0JdTgJCQlraWxsZWQgOiAxOwkvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqLwotCXU4CQkJZnJlZWQgOiAxOwkvKiBub3JtYWwgdGVybWluYXRpb24gKi8KLQl1OAkJCW91dF9vZl9zeW5jIDogMTsgLyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovCiYjNDM7CXU4CQkJa2lsbGVkOwkJLyogYWJub3JtYWwgdGVybWluYXRpb24gKi8KJiM0MzsJdTgJCQlmcmVlZDsJCS8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqLwomIzQzOwl1OAkJCW91dF9vZl9zeW5jOwkvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi8KIH07CiAKIHN0cnVjdCBzbWNfc29jayB7CQkJCS8qIHNtYyBzb2NrIGNvbnRhaW5lciAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcnguYyBiL25ldC9zbWMvc21jX3J4LmMKaW5kZXggNWM5ZTRkOGI1N2RlNC4uMTk3ZmRkYzYyNzFmMCAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19yeC5jCkBAIC0xMTUsMTYgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHNtY19zcGRfcHJpdiAqcHJpdiA9IChzdHJ1Y3Qgc21jX3NwZF9wcml2ICopYnVmLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSAmYW1wO3ByaXYtJmd0O3NtYy0mZ3Q7Y29ubjsKIAlzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHByaXYtJmd0O3NtYzsKLQlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47CiAJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzbWMtJmd0O3NrOwogCi0JaWYgKHNrLSZndDtza19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8Ci0JICAgIHNrLSZndDtza19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fAotCSAgICBzay0mZ3Q7c2tfc3RhdGUgPT0gU01DX0FQUEZJTkNMT1NFV0FJVCkKLQkJZ290byBvdXQ7Ci0JY29ubiA9ICZhbXA7c21jLSZndDtjb25uOwogCWxvY2tfc29jayhzayk7CiYjNDM7CWlmIChjb25uLSZndDtmcmVlZCkgewomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJc21jX3J4X3VwZGF0ZV9jb25zKHNtYywgcHJpdi0mZ3Q7bGVuKTsKIAlyZWxlYXNlX3NvY2soc2spOwogCWlmIChhdG9taWNfc3ViX2FuZF90ZXN0KHByaXYtJmd0O2xlbiwgJmFtcDtjb25uLSZndDtzcGxpY2VfcGVuZGluZykpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQyCgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDk5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogU01DIENvbm5lY3Rpb24gU3RydWN0dXJlIGFuZCBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byB0aGUgYG5ldC9zbWNgIGNvZGUsIHNwZWNpZmljYWxseSBgc21jLmhgIGFuZCBgc21jX3J4LmNgLiBGaXJzdCwgSSBzZWUgdGhleSYjMzk7dmUgc3dpdGNoZWQgdGhlIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCBmaWVsZHMgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgZnJvbSBiaXRmaWVsZHMgdG8gZnVsbCBgdThgIHR5cGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBhdm9pZGluZyB0aG9zZSBuYXN0eSBiaXRmaWVsZC1yZWxhdGVkIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBCaXRmaWVsZHMsIHdpdGggdGhlaXIgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucywgY2FuIGJlIGEgcmVhbCBoZWFkYWNoZSBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cy4gVGhpcyBjaGFuZ2UgbGlrZWx5IGhlbHBzIHByZXZlbnQgZGF0YSByYWNlcywgb3IgZXZlbiBwb3RlbnRpYWxseSBhZGRyZXNzZXMgaXNzdWVzIGxpa2UgdW5hbGlnbmVkIGFjY2Vzcy4KClRoZW4sIEkmIzM5O20gbG9va2luZyBhdCBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGluIGBzbWNfcnguY2AuIFRoZXkmIzM5O3JlIHJlcGxhY2luZyBhIGNoZWNrIG9uIHRoZSBzb2NrZXQgc3RhdGUgKHdoaWNoIHdhcyBvdXRzaWRlIGEgbG9jaykgd2l0aCBhIGNoZWNrIG9mIGBjb25uLSZndDtmcmVlZGAgKmluc2lkZSogdGhlIGBsb2NrX3NvY2soc2spYCBibG9jay4gQmluZ28uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGZpeCBmb3IgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHJhY2UgY29uZGl0aW9uLiBJdCYjMzk7cyBub3cgc3luY2hyb25pemVkISBJdCYjMzk7cyBsaWtlIGEgbGlnaHRidWxiIG1vbWVudC4gVGhlIGVhcmxpZXIgc3RhdGUgY2hlY2sgZGlkbiYjMzk7dCBoYXZlIGEgbG9jaywgd2hpY2ggaXMgYmFkLCBhbmQgbGlrZWx5IGFsbG93ZWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gTm93LCB3aXRoIHRoZSBjaGVjayBkb25lIGluc2lkZSB0aGUgbG9jaywgd2UmIzM5O3JlIHByb3RlY3RpbmcgYWdhaW5zdCB0aGF0LgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGUgdXNlLWFmdGVyLWZyZWUgaXNzdWUgaWYgaXQgd2VyZSB0cmlnZ2VyZWQsIGFuZCBLQ1NBTiB3b3VsZCBmbGFnIHRoZSBkYXRhIHJhY2UuIFRoYXQmIzM5O3MgZ29vZC4gQnV0IEkmIzM5O20gYWxzbyB0aGlua2luZy4uLiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIHRob3JvdWdoLgoKTm9wZS4gVGhlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBzeW5jaHJvbml6YXRpb24sIHN0YXRlIGNoZWNraW5nLCBhbmQgYWRkcmVzc2luZyB0aG9zZSByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbnMuIFRoZXJlJiMzOTtzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHN3aXRjaCBmcm9tIGJpdGZpZWxkcyB0byBgdThgIHByZXZlbnRzIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIGFkamFjZW50IGZpZWxkcy4gVGhlIHNvY2tldCBsb2NrIGlzIG5vdyB1c2VkIGNvcnJlY3RseS4gVGhlIGluY3JlYXNlZCBzaXplIG9mIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGJlY2F1c2Ugb2YgdGhlIGB1OGBzIGlzIGltbWF0ZXJpYWwsIGFzIHRoZSBzdHJ1Y3R1cmUgaXMgaW50ZXJuYWwuCgpHaXZlbiBhbGwgdGhhdCwgYW5kIGFmdGVyIHJldmlld2luZyB0aGF0IGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3QsIGFuZCBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBXZSYjMzk7cmUgYWRkcmVzc2luZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGhlcmUsIGlzc3VlcyB0aGF0IGFyZSByZWFkaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgS0NTQU4uIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXHUwMDNlZnJlZWRgIHVuZGVyIHRoZSBzb2NrZXQgbG9jayBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBzb2NrZXQgc3RhdGUgd2l0aG91dCBhIGxvY2ssIGZpeGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbi4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgKHVzZS1hZnRlci1mcmVlLCBkYXRhIHJhY2VzKSB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byB1c2UgZnVsbCBgdThgIGZpZWxkcyBpbnN0ZWFkIG9mIGJpdGZpZWxkcyBmb3IgYGtpbGxlZGAsIGBmcmVlZGAsIGFuZCBgb3V0X29mX3N5bmNgLCBwcmV2ZW50aW5nIGRhdGEgcmFjZXMgY2F1c2VkIGJ5IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgb24gYWRqYWNlbnQgYml0ZmllbGRzLiBJdCBhbHNvIHVwZGF0ZXMgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCB0byBjaGVjayBgY29ubi1cdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTI6NTIuMDY1NzMyMDI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzNjgyNTc0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3NwbGljZV9yZWFkXCIsXG4gICAgXCJzbWNfcnhfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgc29ja2V0IHN0YXRlIHdpdGhvdXQgYSBsb2NrLCBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZGF0YSByYWNlcykgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoU01DIHNvY2tldHMpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBXZSBzaG91bGQgZm9jdXMgb24gdGhlIFNNQyBzcGxpY2UgcmVhZCBhbmQgcmVjZWl2ZSBtZXNzYWdlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMjo1Mi4wNjU3MzgyMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg0NDI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU2NTk4MzgyOTljNzYwY2ZjZDgxMDMzZTBhMjUxNWI0ZWZmODkyMGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDg6MTI6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmhcXG5pbmRleCA1MjE0NWRmODNmNmU3Li40MjdiNmQ2M2I5OTMxIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jLmhcXG4rKysgYi9uZXQvc21jL3NtYy5oXFxuQEAgLTI3Nyw5ICsyNzcsOSBAQCBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24ge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHQgKiAwIGZvciBTTUMtUiwgMzIgZm9yIFNNQy1EXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHR1NjRcXHRcXHRcXHRwZWVyX3Rva2VuO1xcdC8qIFNNQy1EIHRva2VuIG9mIHBlZXIgKi9cXG4tXFx0dThcXHRcXHRcXHRraWxsZWQgOiAxO1xcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXFxuLVxcdHU4XFx0XFx0XFx0ZnJlZWQgOiAxO1xcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbi1cXHR1OFxcdFxcdFxcdG91dF9vZl9zeW5jIDogMTsgLyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXFxuK1xcdHU4XFx0XFx0XFx0a2lsbGVkO1xcdFxcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXFxuK1xcdHU4XFx0XFx0XFx0ZnJlZWQ7XFx0XFx0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXFxuK1xcdHU4XFx0XFx0XFx0b3V0X29mX3N5bmM7XFx0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXFxuIH07XFxuIFxcbiBzdHJ1Y3Qgc21jX3NvY2sge1xcdFxcdFxcdFxcdC8qIHNtYyBzb2NrIGNvbnRhaW5lciAqL1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19yeC5jIGIvbmV0L3NtYy9zbWNfcnguY1xcbmluZGV4IDVjOWU0ZDhiNTdkZTQuLjE5N2ZkZGM2MjcxZjAgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfcnguY1xcbisrKyBiL25ldC9zbWMvc21jX3J4LmNcXG5AQCAtMTE1LDE2ICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbiB7XFxuIFxcdHN0cnVjdCBzbWNfc3BkX3ByaXYgKnByaXYgPSAoc3RydWN0IHNtY19zcGRfcHJpdiAqKWJ1Zi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnByaXYtXFx1MDAzZXNtYy1cXHUwMDNlY29ubjtcXG4gXFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBwcml2LVxcdTAwM2VzbWM7XFxuLVxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNtYy1cXHUwMDNlc2s7XFxuIFxcbi1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQgfHxcXG4tXFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fFxcbi1cXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19BUFBGSU5DTE9TRVdBSVQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHRjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0aWYgKGNvbm4tXFx1MDAzZWZyZWVkKSB7XFxuK1xcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdHNtY19yeF91cGRhdGVfY29ucyhzbWMsIHByaXYtXFx1MDAzZWxlbik7XFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdGlmIChhdG9taWNfc3ViX2FuZF90ZXN0KHByaXYtXFx1MDAzZWxlbiwgXFx1MDAyNmNvbm4tXFx1MDAzZXNwbGljZV9wZW5kaW5nKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTI6NTIuNTIzNDIyNjA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzcwOTc1NTg1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3NwbGljZV9yZWFkXCIsXG4gICAgXCJzbWNfcnhfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoU01DIHNvY2tldHMpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBXZSBzaG91bGQgZm9jdXMgb24gdGhlIFNNQyBzcGxpY2UgcmVhZCBhbmQgcmVjZWl2ZSBtZXNzYWdlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NjU5ODM4Mjk5Yzc2MGNmY2Q4MTAzM2UwYTI1MTViNGVmZjg5MjBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDg6MTI6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxuaW5kZXggNTIxNDVkZjgzZjZlNy4uNDI3YjZkNjNiOTkzMSAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jLmhcbisrKyBiL25ldC9zbWMvc21jLmhcbkBAIC0yNzcsOSArMjc3LDkgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHtcbiBcdFx0XHRcdFx0XHQgKiAwIGZvciBTTUMtUiwgMzIgZm9yIFNNQy1EXG4gXHRcdFx0XHRcdFx0ICovXG4gXHR1NjRcdFx0XHRwZWVyX3Rva2VuO1x0LyogU01DLUQgdG9rZW4gb2YgcGVlciAqL1xuLVx0dThcdFx0XHRraWxsZWQgOiAxO1x0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbi1cdHU4XHRcdFx0ZnJlZWQgOiAxO1x0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXG4tXHR1OFx0XHRcdG91dF9vZl9zeW5jIDogMTsgLyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4rXHR1OFx0XHRcdGtpbGxlZDtcdFx0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbitcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuK1x0dThcdFx0XHRvdXRfb2Zfc3luYztcdC8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqL1xuIH07XG4gXG4gc3RydWN0IHNtY19zb2NrIHtcdFx0XHRcdC8qIHNtYyBzb2NrIGNvbnRhaW5lciAqL1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3J4LmMgYi9uZXQvc21jL3NtY19yeC5jXG5pbmRleCA1YzllNGQ4YjU3ZGU0Li4xOTdmZGRjNjI3MWYwIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfcnguY1xuKysrIGIvbmV0L3NtYy9zbWNfcnguY1xuQEAgLTExNSwxNiArMTE1LDE1IEBAIHN0YXRpYyB2b2lkIHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4ge1xuIFx0c3RydWN0IHNtY19zcGRfcHJpdiAqcHJpdiA9IChzdHJ1Y3Qgc21jX3NwZF9wcml2ICopYnVmLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZwcml2LVx1MDAzZXNtYy1cdTAwM2Vjb25uO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBwcml2LVx1MDAzZXNtYztcbi1cdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbiBcbi1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8XG4tXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX1BFRVJGSU5DTE9TRVdBSVQgfHxcbi1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUKVxuLVx0XHRnb3RvIG91dDtcbi1cdGNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbiBcdGxvY2tfc29jayhzayk7XG4rXHRpZiAoY29ubi1cdTAwM2VmcmVlZCkge1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbiBcdHNtY19yeF91cGRhdGVfY29ucyhzbWMsIHByaXYtXHUwMDNlbGVuKTtcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdChwcml2LVx1MDAzZWxlbiwgXHUwMDI2Y29ubi1cdTAwM2VzcGxpY2VfcGVuZGluZykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMjo1Mi41MjM0MjM1NDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODIzNTE0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBTTUMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBTTUMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zbWMvc21jLmhgIGFuZCBgbmV0L3NtYy9zbWNfcnguY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZXkncmUgY2hhbmdpbmcgdGhlIGJpdGZpZWxkcyBga2lsbGVkYCwgYGZyZWVkYCwgYW5kIGBvdXRfb2Zfc3luY2Agd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYCBmcm9tIHNpbmdsZS1iaXQgYHU4IDogMWAgZmllbGRzIHRvIGp1c3QgcGxhaW4gYHU4YC4gVGhhdCdzIGludGVyZXN0aW5nOyBJIHdvbmRlciB3aGF0IHRoZSByYXRpb25hbGUgaXMuIEl0IGNvdWxkIGJlIGZvciBwZXJmb3JtYW5jZSwgcGVyaGFwcyB0byBhdm9pZCBzb21lIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBiaXRmaWVsZCBhY2Nlc3MsIG9yIG1heWJlIGl04oCZcyBhIGNvbXBpbGVyLXJlbGF0ZWQgaXNzdWUuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBsb29rLlxuXG5UaGUgb3RoZXIgY2hhbmdlIGlzIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaW4gYG5ldC9zbWMvc21jX3J4LmNgLCB3aGVyZSB0aGV5J3JlIG5vdyBjaGVja2luZyBgY29ubi1cdTAwM2VmcmVlZGAgaW5zdGVhZCBvZiBgc2stXHUwMDNlc2tfc3RhdGVgLiBBaCwgdGhpcyBpcyBpbiB0aGUgY29udGV4dCBvZiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBkZWFscyB3aXRoIHJlbGVhc2luZyBidWZmZXJzIGZvciByZWNlaXZlZCBkYXRhLiBUaGlzIGltcGxpZXMgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3RhdGUgdHJhbnNpdGlvbiBpc3N1ZS4gQW5kLCBpdCdzIG9jY3VycmluZyB1bmRlciBgbG9ja19zb2NrKHNrKWAsIG1lYW5pbmcgdGhhdCBpdCBsaWtlbHkgaGFzIGEgcmVsYXRpb24gdG8gYSBzb2NrZXQgbG9jayBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNvY2tldC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIFNNQywgd2hpY2ggSSBrbm93IGxldmVyYWdlcyBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24sIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGNvdWxkIHJlbGF0ZSB0byBzb21lIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4gU01DLCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBBRl9TTUMgc29ja2V0cy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCB3aXRoaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCwgc3BlY2lmaWNhbGx5LCBhIGNhc2Ugd2hlcmUgaXQgY2hlY2tzIGBjb25uLVx1MDAzZWZyZWVkYCB1bmRlciBsb2NrLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgU01DIGlzIGV2ZW4gZW5hYmxlZCBvbiB0aGUgc3lzdGVtIEknbSB0ZXN0aW5nIHdpdGguIExldCdzIHNlZS4uLiBgQ09ORklHX1NNQ2AuLi4gcmlnaHQsIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2V0IHRvICp5KiBvciAqbSogaW4gbXkga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZW4sIEkgY2FuIHByb3Blcmx5IGRpdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEyOjU4LjM0Njk0MTkyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkyODc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTEzLVxcbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcXG5uZXQvc21jL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTIyLVxcbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEyOjU4LjM5NTg3NjM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDc3MjQ4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgQ29uZmlndXJhdGlvbiBhbmQgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYFNNQ2AgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBrZXkgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCBpcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0sIGFuZCB5ZXMsIEkgcmVtZW1iZXIsIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMuIEl0J3MgdXNlZCBhcyBhIGNhbGxiYWNrIHdpdGhpbiBgcGlwZV9idWZfb3BlcmF0aW9uc2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHBpcGUgYnVmZmVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBTTUMgY29udGV4dC4gTm93LCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBkaWcgaW50byB3aGVyZSB0aGlzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzeXN0ZW0gdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzowMS45MDM2MDM2MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjEyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3J4X3BpcGVfYnVmX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcnguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19yeC5jPTEwOT1zdHJ1Y3Qgc21jX3NwZF9wcml2IHtcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMTEzLVxcbm5ldC9zbWMvc21jX3J4LmM6MTE0OnN0YXRpYyB2b2lkIHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxubmV0L3NtYy9zbWNfcnguYy0xMTUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfcnguYz0xNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHNtY19waXBlX29wcyA9IHtcXG5uZXQvc21jL3NtY19yeC5jOjE0NTpcXHQucmVsZWFzZSA9IHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlLFxcbm5ldC9zbWMvc21jX3J4LmMtMTQ2LVxcdC5nZXRcXHQgPSBzbWNfcnhfcGlwZV9idWZfZ2V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzowMS45NTEzMzAzNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA1OTE0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgc21jX3BpcGVfb3BzYCoqXG5cblJpZ2h0LCBzbyBgc21jX3BpcGVfb3BzYCBpcyBpbiB0aGUgbWl4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSBiZWluZyAqdXNlZCo/IEkga25vdyBpdCdzIGRlZmluZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGxvY2F0aW9uLCBidXQgSSBuZWVkIHRvIHRyYWNlIGl0cyBjb25uZWN0aW9ucy4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGZ1bmN0aW9uYWwgY29udGV4dCBhbmQgcHVycG9zZSBpbW1lZGlhdGVseSwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgZmlndXJpbmcgb3V0IHRoZSBpbnRyaWNhY2llcy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgcGllY2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MDQuOTU3MjQ4NDYzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDQ0Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19waXBlX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19yeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3J4LmM9MTM3PXN0YXRpYyBib29sIHNtY19yeF9waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMTQzLVxcbm5ldC9zbWMvc21jX3J4LmM6MTQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBzbWNfcGlwZV9vcHMgPSB7XFxubmV0L3NtYy9zbWNfcnguYy0xNDUtXFx0LnJlbGVhc2UgPSBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZSxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmM9MTYwPXN0YXRpYyBpbnQgc21jX3J4X3NwbGljZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBjaGFyICpzcmMsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jLTIyMy1cXHRzcGQucGFydGlhbCA9IHBhcnRpYWw7XFxubmV0L3NtYy9zbWNfcnguYzoyMjQ6XFx0c3BkLm9wcyA9IFxcdTAwMjZzbWNfcGlwZV9vcHM7XFxubmV0L3NtYy9zbWNfcnguYy0yMjUtXFx0c3BkLnNwZF9yZWxlYXNlID0gc21jX3J4X3NwZF9yZWxlYXNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzowNS4wMDY3MjIzMThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYzNjA0MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc21jX3J4X3NwbGljZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNtY19yeF9zcGxpY2VgIGlzIGluIHBsYXkuIFNlZW1zIGxpa2UgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgd2hhdGV2ZXIgdGhhdCBpcy4gTXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXMsIHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBhbmQgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCwgZmlndXJlIG91dCBpdHMgY29udGV4dCwgYW5kIGRldGVybWluZSBpZiB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbiBvciB0aGUgbHluY2hwaW4gb2YgYSBjcml0aWNhbCBwcm9jZXNzLiBJdCdzIHRpbWUgdG8gc3RhcnQgdHJhY2tpbmcgdGhlIHVzYWdlIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjA4LjA3MDMyOTY3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjgxNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3J4X3NwbGljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19yeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3J4LmM9MTQ5PXN0YXRpYyB2b2lkIHNtY19yeF9zcGRfcmVsZWFzZShzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkLFxcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0xNTktXFxubmV0L3NtYy9zbWNfcnguYzoxNjA6c3RhdGljIGludCBzbWNfcnhfc3BsaWNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGNoYXIgKnNyYywgc2l6ZV90IGxlbixcXG5uZXQvc21jL3NtY19yeC5jLTE2MS1cXHRcXHRcXHQgc3RydWN0IHNtY19zb2NrICpzbWMpXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtNDgwLVxcdFxcdFxcdFxcdH0gZWxzZSB7XFxubmV0L3NtYy9zbWNfcnguYzo0ODE6XFx0XFx0XFx0XFx0XFx0cmMgPSBzbWNfcnhfc3BsaWNlKHBpcGUsIHJjdmJ1Zl9iYXNlICtcXG5uZXQvc21jL3NtY19yeC5jLTQ4Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjaHVua19vZmYsIGNodW5rX2xlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MDguMTE5MDY5MzE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODk4MzI0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgUmVjZWl2ZSBNZXNzYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCBpcyBiZWluZyB1dGlsaXplZC4gTG9va3MgbGlrZSB0aGlzIGlzIHVzZWQgaW4gYHNtY19yeF9yZWN2bXNnYC4gUmlnaHQsIGFuZCBgc21jX3J4X3JlY3Ztc2dgIGlzICp0aGUqIHJlY2VpdmUgbWVzc2FnZSBoYW5kbGVyIGZvciBTTUMgc29ja2V0cy4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gVGltZSB0byBjaGVjayBgbmV0L3NtYy9zbWNfcnguY2AgdG8gc2VlIGhvdyBgc21jX3J4X3JlY3Ztc2dgIGlzIGFjdHVhbGx5IHdvcmtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MTEuMTA4OTA0NzcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIwODQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcnhfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTI4MzU9aW50IHNtY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjg2Mi1cXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lbGVuID0gMDtcXG5uZXQvc21jL2FmX3NtYy5jOjI4NjM6XFx0XFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIG1zZywgTlVMTCwgbGVuLCBmbGFncyk7XFxubmV0L3NtYy9hZl9zbWMuYy0yODY0LVxcdFxcdFNNQ19TVEFUX1JYX1BBWUxPQUQoc21jLCByYywgcmMpO1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMjg0PXNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzMyMS1cXHRcXHRTTUNfU1RBVF9JTkMoc21jLCBzcGxpY2VfY250KTtcXG5uZXQvc21jL2FmX3NtYy5jOjMzMjI6XFx0XFx0cmMgPSBzbWNfcnhfcmVjdm1zZyhzbWMsIE5VTEwsIHBpcGUsIGxlbiwgZmxhZ3MpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzMyMy1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTI4OT1zdGF0aWMgaW50IHNtY19yeF9yZWN2X3VyZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0zMzItXFxubmV0L3NtYy9zbWNfcnguYzozMzM6c3RhdGljIGJvb2wgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHNpemVfdCBwZWVrZWQpXFxubmV0L3NtYy9zbWNfcnguYy0zMzQte1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0zNDQtXFxubmV0L3NtYy9zbWNfcnguYzozNDU6Lyogc21jX3J4X3JlY3Ztc2cgLSByZWNlaXZlIGRhdGEgZnJvbSBSTUJFXFxubmV0L3NtYy9zbWNfcnguYy0zNDYtICogQG1zZzpcXHRjb3B5IGRhdGEgdG8gcmVjZWl2ZSBidWZmZXJcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzUxLSAqL1xcbm5ldC9zbWMvc21jX3J4LmM6MzUyOmludCBzbWNfcnhfcmVjdm1zZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9zbWMvc21jX3J4LmMtMzUzLVxcdFxcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzk0LVxcbm5ldC9zbWMvc21jX3J4LmM6Mzk1OlxcdFxcdGlmIChzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzbWMsIHBlZWtlZF9ieXRlcykpXFxubmV0L3NtYy9zbWNfcnguYy0zOTYtXFx0XFx0XFx0Z290byBjb3B5O1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0zOTktXFx0XFx0XFx0Lyogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBjb3VsZCBoYXZlIHJ1biBhZnRlclxcbm5ldC9zbWMvc21jX3J4LmM6NDAwOlxcdFxcdFxcdCAqIGFib3ZlIHNtY19yeF9yZWN2bXNnX2RhdGFfYXZhaWxhYmxlKClcXG5uZXQvc21jL3NtY19yeC5jLTQwMS1cXHRcXHRcXHQgKi9cXG5uZXQvc21jL3NtY19yeC5jOjQwMjpcXHRcXHRcXHRpZiAoc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoc21jLCBwZWVrZWRfYnl0ZXMpKVxcbm5ldC9zbWMvc21jX3J4LmMtNDAzLVxcdFxcdFxcdFxcdGdvdG8gY29weTtcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtNTE0LVxcbm5ldC9zbWMvc21jX3J4LmM6NTE1OlxcdFxcdHRyYWNlX3NtY19yeF9yZWN2bXNnKHNtYywgY29weWxlbik7XFxubmV0L3NtYy9zbWNfcnguYy01MTYtXFx0fSB3aGlsZSAocmVhZF9yZW1haW5pbmcpO1xcbi0tXFxubmV0L3NtYy9zbWNfcnguaD0yMD12b2lkIHNtY19yeF9pbml0KHN0cnVjdCBzbWNfc29jayAqc21jKTtcXG5uZXQvc21jL3NtY19yeC5oLTIxLVxcbm5ldC9zbWMvc21jX3J4Lmg6MjI6aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L3NtYy9zbWNfcnguaC0yMy1cXHRcXHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpO1xcbi0tXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5jPTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKHNtY190eF9zZW5kbXNnKTtcXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmM6ODpFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woc21jX3J4X3JlY3Ztc2cpO1xcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYy05LUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNyX2xpbmtfZG93bik7XFxuLS1cXG5uZXQvc21jL3NtY190cmFjZXBvaW50Lmg9NzE9REVGSU5FX0VWRU5UKHNtY19tc2dfZXZlbnQsIHNtY190eF9zZW5kbXNnLFxcbi0tXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTc3LVxcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaDo3ODpERUZJTkVfRVZFTlQoc21jX21zZ19ldmVudCwgc21jX3J4X3JlY3Ztc2csXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoxMS4xNTgxMjIzNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyMzQ3MzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU01DIFNvY2tldCBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFdlJ3ZlIGdvdCBgc21jX3NwbGljZV9yZWFkYCBjYWxsaW5nIGBzbWNfcnhfcmVjdm1zZ2Agd2l0aCBhIGBwaXBlYCBhcmd1bWVudC4gVGhhdCBgc21jX3NwbGljZV9yZWFkYCBpcyBzcGVjaWZpY2FsbHkgdGhlIGBzcGxpY2VfcmVhZGAgaGFuZGxlciBmb3IgU01DIHNvY2tldHMsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaW52b2x2ZXMgdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSBhbiBTTUMgc29ja2V0IHRvIGEgcGlwZSB1c2luZyB0aGUgc3BsaWNlIG1lY2hhbmlzbS4gVGhlIGtleSBoZXJlIGlzIHRoZSB0cmlnZ2VyOiBzcGxpY2luZyBmcm9tIGFuIFNNQyBzb2NrZXQgdG8gYSBwaXBlLCBhbmQgKnRoZW4qIGVpdGhlciBjbG9zaW5nIHRoZSBwaXBlIG9yIHRyeWluZyB0byByZWFkIGZyb20gaXQuIFRoaXMgdHJpZ2dlcnMgdGhlIGJ1ZyBiZWNhdXNlIGl0IHJlc3VsdHMgaW4gYSBjYWxsIGNoYWluOiBgcGlwZV9idWZfcmVsZWFzZWAgLVx1MDAzZSBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgLlxuXG5UaGUgcGF0Y2ggY2hhbmdlcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHRvIGNoZWNrIGBjb25uLVx1MDAzZWZyZWVkYCByYXRoZXIgdGhhbiBgc2stXHUwMDNlc2tfc3RhdGVgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBmaXgsIHJpZ2h0PyBTZWVtcyBsaWtlIGl0IGlzIHJlbGF0ZWQgdG8gdHJhY2tpbmcgd2hldGhlciB0aGUgY29ubmVjdGlvbiByZXNvdXJjZXMgaGF2ZSBiZWVuIGZyZWVkIGFscmVhZHkuIEFsc28sIHRoZSBwYXRjaCBjaGFuZ2VzIGBraWxsZWRgLCBgZnJlZWRgLCBgb3V0X29mX3N5bmNgIGZyb20gYml0ZmllbGRzIHRvIGB1OGAuIE15IGd1dCBzYXlzIHRoaXMgaXMgbGlrZWx5IHRvIGVsaW1pbmF0ZSBkYXRhIHJhY2VzIG9yIGp1c3QgYmVjYXVzZSBiaXRmaWVsZHMgY2FuIGJlIHByb2JsZW1hdGljIHdpdGggY29uY3VycmVudCBhY2Nlc3Mgd2l0aG91dCBwcm9wZXIgbG9ja2luZy5cblxuVGhlIG5leHQgcXVlc3Rpb24sIG5hdHVyYWxseSwgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLiBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgdGhlIGBzcGxpY2VfcmVhZGAgcGF0aCwgd2hpY2ggaXMgY3JpdGljYWwuIEFuZCwgaW1wb3J0YW50bHksIFNNQyBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR2l2ZW4gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiBgc21jX3NwbGljZV9yZWFkYCBhbmQgYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhlIGxhdHRlciBpcyBzdGF0aWMsIHNvIGlmIGl0J3MgaW5saW5lZCwgd2UncmUgZ29pbmcgdG8gaGF2ZSBhIGhhcmQgdGltZSB0YXJnZXRpbmcgaXQgZGlyZWN0bHkuIEJ1dCBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBzbWNfcGlwZV9vcHNgLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBXZSdyZSBiZXR0ZXIgb2ZmIGxvb2tpbmcgYXQgYHNtY19zcGxpY2VfcmVhZGAgYW5kIGBzbWNfcnhfcmVjdm1zZ2AuXG5cblRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc21jL2FmX3NtYy5jYCBhbmQgc3RhcnQgd2l0aCBgc21jX3NwbGljZV9yZWFkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoxNy45ODE2MDAwMzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg3MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzE5Nz1pbnQgc21jX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMyODMtICovXFxubmV0L3NtYy9hZl9zbWMuYzozMjg0OnNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG5uZXQvc21jL2FmX3NtYy5jLTMyODUtXFx0XFx0XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MzMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzNDgtXFx0Lm1tYXBcXHRcXHQ9IHNvY2tfbm9fbW1hcCxcXG5uZXQvc21jL2FmX3NtYy5jOjMzNDk6XFx0LnNwbGljZV9yZWFkXFx0PSBzbWNfc3BsaWNlX3JlYWQsXFxubmV0L3NtYy9hZl9zbWMuYy0zMzUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjE4LjAzNDA5NzQ1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk3NDU3Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU01DIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc3BsaWNlX3JlYWRgIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIGBzbWNfc3BsaWNlX3JlYWRgIGlzIHRoZSBwcmltYXJ5IGhhbmRsZXIgZm9yIHRoYXQuIEdvb2QgdG8ga25vdy4gSSdsbCBhbHNvIHdhbnQgdG8gaW52ZXN0aWdhdGUgYHNtY19yeF9yZWN2bXNnYCDigJMgdGhhdCBzZWVtcyBsaWtlIGFub3RoZXIgcmVsZXZhbnQgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbiwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB3aG9sZSBTTUMgc3lzdGVtIGlzIHN1cHBvc2VkIHRvIHdvcmsuXG5cbkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIE9idmlvdXNseSwgd2UgbmVlZCBgU01DYCBlbmFibGVkLCBidXQgSSBzaG91bGQgY2hlY2sgdG8gZW5zdXJlIHRoYXQncyBub3QgdGhlIG9ubHkgcGllY2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIG9yIGVuYWJsaW5nIHN3aXRjaGVzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyB0byBmdW5jdGlvbiBwcm9wZXJseT8gVGhhdCB3aWxsIHNhdmUgbWUgYSB0b24gb2YgdGltZSBkb3duIHRoZSByb2FkLiBJdCdzIGJlc3QgdG8gZW5zdXJlIHRoZSBncm91bmR3b3JrIGlzIHNvbGlkIGJlZm9yZSBnZXR0aW5nIHRvbyBkZWVwIGludG8gdGhlIG5pdHR5LWdyaXR0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjIxLjkzMTU1ODc5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxODMxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoyMS45Nzk3NDg4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM2MzcyNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgYG5ldC9zbWNgIGNvbXBvbmVudC4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgdmlzaWJpbGl0eSBjb25zdHJhaW50cywgYW5kIG1heWJlIGV2ZW4gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMgZGV0YWlsZWQgaW4gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uc2lkZXJlZCBmb3Igc3VjY2Vzc2Z1bCBpbnRlZ3JhdGlvbiBhbmQgdXNlIG9mIGBzbWNgLiBMZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjI0LjkxNjEyMzg0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MjQuOTE2MTgyMzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzM3MzIzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBkZXBlbmRlbmN5IGNvcnJlY3RseT8gSXQgc2VlbXMgbGlrZSBpdCdzIHNheWluZyBcImRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1wiPyBXYWl0LCAqRElCUyo/IFRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0LiBJIHRob3VnaHQgaXQgd2FzIGp1c3QgSU5FVCBhbmQgSU5GSU5JQkFORC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdXRwdXQuLi5cblxuTm8sIHdhaXQsIGFtIEkgbWlzcmVhZGluZyB0aGlzPyBJdCAqZG9lcyogc2F5IERJQlMuIE9rYXksIG9rYXksIGxldCBtZSBnbyBiYWNrIGFuZCBsb29rIGF0IHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoZSBvdXRwdXQsIHNwZWNpZmljYWxseSBsaW5lIGZvdXIuLi4gKmRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCUyouLi4gRGFtbiBpdC4gSSB0aG91Z2h0IEkga25ldyB3aGF0IEkgd2FzIGxvb2tpbmcgYXQhXG5cbkhvbGQgb24sIEkgbXVzdCBoYXZlIG1pc3NlZCBzb21ldGhpbmcuIExldCBtZSByZXJlYWQgdGhlIG91dHB1dCBjYXJlZnVsbHkuIExldCBtZSByZWFkIGl0IGFnYWluIGFuZCBtYWtlIHN1cmUgdGhhdCBJIGRvbid0IG1pc3MgYW55dGhpbmcuIE9rYXksIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZSBvbmUgbW9yZSB0aW1lLiBKdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMzoyOS40ODk5MTgyOThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjI5LjQ4OTk5MDU5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIxOTA3MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB3aGF0J3MgdGhpcyBgRElCU2AgdGhpbmc/IE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgaXQgd2FzIGEgdHlwbywgc29tZXRoaW5nIGdhcmJsZWQgaW4gdGhlIGRhdGEgSSdtIHByb2Nlc3NpbmcuIEJ1dCB3YWl0Li4uaXQncyBub3QuIEknbSBzZWVpbmcgaXQgcmlnaHQgdGhlcmUuIFJpZ2h0LCBJJ20gcmVhZGluZyB0aGUgb3V0cHV0IG9mIGEgYHJlYWQtZmlsZWAgb3BlcmF0aW9uLCBhbmQgaXQncyBkZWNsYXJpbmcgYSBkZXBlbmRlbmN5IG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTYC4gSSdtIGdvaW5nIHRocm91Z2ggdGhpcyBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmUsIGl0IHNheXMgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIFJpZ2h0LCBJJ20gYW4gQUksIEkgZG9uJ3QgXCJzZWVcIiB0aGluZ3MgbGlrZSBhIGh1bWFuLiBJJ20gcHJvY2Vzc2luZyB0ZXh0LCBzbyBJIGFtIHNlZWluZyB0aGF0LCBJIGp1c3QgcHJvY2VzcyBpdCBhcyBhIGZ1bmN0aW9uIG9mIHRoZSByZWFkIG9wZXJhdGlvbi4gSSBhbSByZXZpZXdpbmcgdGhlIHJhdyBkYXRhIGRpcmVjdGx5LCBvciBzbyBJIGJlbGlldmUuIE5vdywgd2hlcmUgYW0gSSBnZXR0aW5nIHRoaXMgZnJvbT8gTGV0IG1lIGp1c3QgaXNvbGF0ZSBsaW5lIDQgb2YgdGhpcyBvdXRwdXQgZm9yIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzMuNzExOTAwOTk5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzNTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG5uZXQvc21jL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5uZXQvc21jL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBTTUNcXG5uZXQvc21jL0tjb25maWctMTctXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5uZXQvc21jL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBTTUMgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfU1lTQ0FMTFxcbm5ldC9zbWMvS2NvbmZpZy0yNi1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzMuNzU5OTQyMzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjgzMTgxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0IGltbWVkaWF0ZWx5IGZsYWdzIGEgZGVwZW5kZW5jeTogYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuICBUaGUgYElORVRgIGFuZCBgSU5GSU5JQkFORGAgcGFydHMgYXJlIGZhbWlsaWFyLCBubyBzdXJwcmlzZXMgdGhlcmUg4oCTIGNvcmUgbmV0d29ya2luZyBhbmQgaGlnaC1wZXJmb3JtYW5jZSBpbnRlcmNvbm5lY3QsIHJlc3BlY3RpdmVseS4gQnV0IHRoYXQgYERJQlNgLi4uIHRoYXQncyB0aGUgb25lIHRoYXQgc3RvcHMgbWUgY29sZCBmb3IgYSBtb21lbnQuIEkgZG9uJ3QgcmVjYWxsIHNlZWluZyB0aGF0IGJlZm9yZS5cblxuT2theSwgZGVlcCBicmVhdGguIE5vIG5lZWQgdG8gcGFuaWMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYERJQlNgIGFjdHVhbGx5ICppcyogaW4gdGhpcyBjb250ZXh0LiBJdCdzIGNsZWFybHkgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHNob3VsZCBhc3N1bWUgaXQncyB2YWxpZCBjb25maWcgYW5kIGluY2x1ZGUgaXQgd2l0aG91dCBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSXTigJlzIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkgYW5kIHRvIGFzc3VtZSB0aGlzIGRlcGVuZHMgb24gaXQuIE5vdywgbGV0J3MganVzdCBkb3VibGUgY2hlY2sgdGhhdCBgRElCU2AgaXMgYWN0dWFsbHkgYSBsZWdpdCBjb25maWcgb3B0aW9uIHNvbWV3aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGNoYXNpbmcgYSBwaGFudG9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzcuNzg4MjYyNzM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5Mzk5OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6MzkuNTY3NjcyMTg5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDMzOTcyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGBESUJTYCDigJMgdGhhdCdzIFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnQuXCIgUmlnaHQsIGFuZCBzaW5jZSBJIG5lZWQgdG8gY29uZmlndXJlIHRoaXMsIEkga25vdyBJJ20gbG9va2luZyBhdCBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBhbmQgYFNNQ2AuIEhvbGQgb24sIGBJTkVUYCBpcyBnZW5lcmFsbHkgYSBnaXZlbi4gU28gbXkgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYFtcIlNNQ1wiLCBcIklORklOSUJBTkRcIiwgXCJESUJTXCJdYC5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBqdXN0IGBTTUNgIGlzIHN1ZmZpY2llbnQgb3IgaWYgSSBuZWVkIHNvbWV0aGluZyBsaWtlIGBTTUNfRElBR2AuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvc21jL3NtYy5oYCBhbmQgYG5ldC9zbWMvc21jX3J4LmNgLCBjbGVhcmx5IGNvcmUgU01DIGNvbXBvbmVudHMsIHNvIGp1c3QgYFNNQ2Agc2hvdWxkIGNvdmVyIGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgZml4LiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLiBUaGUgYnVnIGlzIGluICp0aGF0KiBmdW5jdGlvbi4gSXQncyBjYWxsZWQgYnkgYHBpcGVfYnVmX3JlbGVhc2VgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIHBpcGUgYnVmZmVyIGlzIHJlbGVhc2VkIOKAkyB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgcGlwZSBvciB3aGVuIHRoZSBwaXBlIGlzIGNsb3NlZC4gVGhlc2UgcGlwZSBidWZmZXJzIG9yaWdpbmF0ZSBmcm9tIGBzbWNfc3BsaWNlX3JlYWRgIC1cdTAwM2UgYHNtY19yeF9yZWN2bXNnYCAtXHUwMDNlIGBzbWNfcnhfc3BsaWNlYC4gT2theSwgc28gYHNtY19zcGxpY2VfcmVhZGAgYW5kIGBzbWNfcnhfcmVjdm1zZ2AgYXJlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIGBzbWNfc3BsaWNlX3JlYWRgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gQWhhLCBpdCdzIGluIGBuZXQvc21jL2FmX3NtYy5jYCwgc28gaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGhlbHBmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NDUuOTcxMDcyNDczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMzNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzc2l6ZV90IHNtY19zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzE5Nz1pbnQgc21jX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMyODMtICovXFxubmV0L3NtYy9hZl9zbWMuYzozMjg0OnNzaXplX3Qgc21jX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG5uZXQvc21jL2FmX3NtYy5jLTMyODUtXFx0XFx0XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NDYuMDIwNDE2NTQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODUyMzkxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzbWNfc3BsaWNlX3JlYWRgJ3MgU2NvcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHNtY19zcGxpY2VfcmVhZGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYmFzZWQgb24gd2hhdCBJIHJlY2FsbCwgaXMgdGhhdCBpdCdzICpub3QqIHN0YXRpYy4gQnV0IGhvbGQgb24sIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVmb3JlIEkgbWFrZSBhbnkgZGVmaW5pdGl2ZSBhc3N1bXB0aW9ucyBoZXJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgdG8gY29uZmlybSB3aGV0aGVyIGl0J3MgdGllZCB0byBhIHNwZWNpZmljIHRyYW5zbGF0aW9uIHVuaXQgb3IgaGFzIGV4dGVybmFsIGxpbmthZ2UsIGJlY2F1c2UgZGVwZW5kaW5nIG9uIHRoZSBzY29wZSBpdCB3aWxsIGNoYW5nZSB0aGUgd2F5IHRoZSBwcm9ncmFtIGlzIHN0cnVjdHVyZWQgYW5kIGxpbmtlZC4gTm8gYXNzdW1wdGlvbnM7IHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBrZXksIGl0IGlzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUgb2YgdGhlIGZhY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEzOjQ5LjIwNTY1OTIzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNjQxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3NwbGljZV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0zMTk3PWludCBzbWNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzI4My0gKi9cXG5uZXQvc21jL2FmX3NtYy5jOjMyODQ6c3NpemVfdCBzbWNfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxcbm5ldC9zbWMvYWZfc21jLmMtMzI4NS1cXHRcXHRcXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzM0OC1cXHQubW1hcFxcdFxcdD0gc29ja19ub19tbWFwLFxcbm5ldC9zbWMvYWZfc21jLmM6MzM0OTpcXHQuc3BsaWNlX3JlYWRcXHQ9IHNtY19zcGxpY2VfcmVhZCxcXG5uZXQvc21jL2FmX3NtYy5jLTMzNTAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NDkuMjUyODI4MjcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjM4MTI2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipVbnBhY2tpbmcgVGhpcyBcIk5vdCBTdGF0aWNcIiBUaGluZyoqXG5cblJpZ2h0LCBzbyB0aGlzIGlzbid0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIFRoaXMgXCJub3Qgc3RhdGljXCIgbm90aW9uIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBJdCBpbXBsaWVzIGEgZHluYW1pYyBlbGVtZW50LCBhIGNoYW5nZSBvdmVyIHRpbWUgb3IgYmFzZWQgb24gY29uZGl0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpub3QqIHN0YXRpYyBoZXJlLiBXaGF0IGFyZSB0aGUgdmFyaWFibGVzPyBXaGF0IGFyZSB0aGUgbW92aW5nIHBhcnRzPyBUaGlzIG5lZWRzIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5BbmQgdGhlbiwgdGhhdCBmdW5jdGlvbiwgYHNtY19yeF9yZWN2bXNnYC4uLiBUaGF0J3MgZ290IG15IGF0dGVudGlvbiBub3cuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBhIHNvY2tldCBtZXNzYWdlIHJlY2VpdmUsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24gKFNNQykgb3IgYSBzaW1pbGFyIGxvdy1sZXZlbCBwcm90b2NvbC4gVGhpcyBsaWtlbHkgcmVxdWlyZXMgZGVlcCBleGFtaW5hdGlvbi4gVGhlIG5hdHVyZSBvZiBcIm5vdCBzdGF0aWNcIiBub3cgbGlrZWx5IHdpbGwgbGVhZCB0byBleGFtaW5pbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBtZWNoYW5pc20gd2l0aGluIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NTMuNDc2NjQ0MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzE1MTE4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc21jX3J4X3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcnguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19yeC5jPTMzMz1zdGF0aWMgYm9vbCBzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc2l6ZV90IHBlZWtlZClcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzUxLSAqL1xcbm5ldC9zbWMvc21jX3J4LmM6MzUyOmludCBzbWNfcnhfcmVjdm1zZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9zbWMvc21jX3J4LmMtMzUzLVxcdFxcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTM6NTMuOTQ5ODA1NjQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTQzNTUzMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IGp1c3QgYSBzaW1wbGUgdHdlYWs7IGl0J3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNNQyByZWNlaXZlIHBhdGgsIGFuZCB0aGF0J3Mgc29tZXRoaW5nIHdvcnRoIGRpZ2dpbmcgaW50by4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSByb290IGNhdXNlLiBTcGVjaWZpY2FsbHksIGBzbWNfc3BsaWNlX3JlYWRgIGFuZCBgc21jX3J4X3JlY3Ztc2dgIHN0YW5kIG91dCBhcyB0aGUgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAsIGFuZCBpbXBvcnRhbnRseSwgaXQgdG91Y2hlcyBiaXRmaWVsZHMgd2l0aGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gLiBUaGUgYml0ZmllbGQgY2hhbmdlIHRvIGB1OGAgaXMgYSBjcnVjaWFsIGNsdWUuIEl0IHBvaW50cyBkaXJlY3RseSB0byBhIGNvbmN1cnJlbmN5IGlzc3VlIOKAkyBkYXRhIHJhY2VzIG9uIHRob3NlIGJpdGZpZWxkcyAoYGtpbGxlZGAsIGBmcmVlZGAsIGBvdXRfb2Zfc3luY2ApIHdoZXJlIGNvbmZsaWN0aW5nIHJlYWRzIGFuZCB3cml0ZXMgY291bGQgY29ycnVwdCBzdGF0ZS4gVGhlIGZpeCBlbnN1cmVzIHRoYXQgYGNvbm4tXHUwMDNlZnJlZWRgIGlzIGNoZWNrZWQgd2l0aGluIHRoZSBzb2NrZXQgbG9jayBpbiBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHdoaWNoIGNvcnJlY3RseSBkZXRlcm1pbmVzIHRoZSBjb25uZWN0aW9uIHN0YXR1cy4gVGhpcyBkaXJlY3RseSB0YXJnZXRzIGEgYnVnIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuXG5cblRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBrZXkuIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaXMgYSBrZXkgcGFydCBvZiB0aGUgU01DIHJlY2VpdmUgcGF0aC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gcHJpb3JpdGl6ZSBmdXp6aW5nIGJvdGggdGhlIGBzcGxpY2VgIGFuZCBzdGFuZGFyZCByZWNlaXZlIHBhdGhzLiBUaGUgdXBkYXRlZCBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIGNoZWNrcyBgY29ubi1cdTAwM2VmcmVlZGAgYW5kIGV4aXRzIGVhcmx5LCB3aGljaCBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd29ydGggZXhwbG9yaW5nIHdpdGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIGBzbWNfc3BsaWNlX3JlYWRgIGFuZCBgc21jX3J4X3JlY3Ztc2dgIGFzIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSByZWNlaXZlIG9wZXJhdGlvbnMgd2hlcmUgdGhlIHJhY2UgY29uZGl0aW9uIGV4aXN0ZWQuICBgc21jX3JlY3Ztc2dgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYHJlY3Ztc2coKWAsIGFuZCBpcyB0aGVyZWZvcmUgd29ydGggaW5jbHVkaW5nLlxuXG5UaGUgY29uZmlncyBuZWVkZWQgYXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEkgdmVyaWZpZWQgdGhhdCBgRElCU2AgaXMgcmVxdWlyZWQgZm9yIGBTTUNgLiBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRob3NlLiAgYElORVRgIHNlZW1zIGxpa2UgYSBnaXZlbiwgYnV0IGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJJ2xsIHByb2JhYmx5IG5vdCBleHBsaWNpdGx5IHNwZWNpZnkgaXQuXG5cbkhlcmXigJlzIHRoZSBjb3JlIG9mIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGJ1ZyBpbiBTTUMncyByZWNlaXZlIHBhdGggcmVsYXRlZCB0byBzcGxpY2UgcmVhZHMgYnkgbW9kaWZ5aW5nIGJpdGZpZWxkcywgZW5zdXJpbmcgY29ycmVjdCBjb25uZWN0aW9uIHN0YXRlIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgY29tcG9uZW50LCBzbyBpdCB3YXJyYW50cyBmdXp6aW5nLiBgc21jX3NwbGljZV9yZWFkYCwgYHNtY19yZWN2bXNnYCBhbmQgYHNtY19yeF9yZWN2bXNnYCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTQ6MDQuODkzMzYxNzkyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyMDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc21jX3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9hZl9zbWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTI3OTc9aW50IHNtY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjgzNC1cXG5uZXQvc21jL2FmX3NtYy5jOjI4MzU6aW50IHNtY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvc21jL2FmX3NtYy5jLTI4MzYtXFx0XFx0aW50IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxNDowNC45NDI2ODkzMTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5NDk5NjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byB0aGlzIGNvZGU6XG5cbioqTmFycm93aW5nIERvd24gdGhlIFByb2JsZW0ncyBTb3VyY2UqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGFyZWEgaGVyZS4gV2hpbGUgYHNtY19yZWN2bXNnYCBpcyBhIHZhbGlkIHN5bWJvbCB0byBrZWVwIGluIG1pbmQgZm9yIGNvbnRleHQsIGl0J3MgdGhlIGBzcGxpY2VgIHBhdGggdGhhdCdzIHRydWx5IHRoZSBjdWxwcml0LiBTcGVjaWZpY2FsbHksIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSBkaXJlY3RseSB0aWVkIHRvIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAsIHdoaWNoLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBnZXRzIGludm9rZWQgYnkgYHNtY19zcGxpY2VfcmVhZGAuIFRoZXJlZm9yZSwgYHNtY19zcGxpY2VfcmVhZGAgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZnVuY3Rpb24gdG8gemVybyBpbiBvbiBmb3Igbm93LiBJJ2xsIGFsc28gaW5jbHVkZSBgc21jX3J4X3JlY3Ztc2dgIGFzIGEgc2Vjb25kYXJ5IHN5bWJvbCwgZm9yIGJyb2FkZXIgY29udGV4dCBhbmQgcGVyc3BlY3RpdmUuXG5cbkknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQgYW5kIEkgd2lsbCBjYWxsIHRoaXMgcHJvY2VzcyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjoxNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxNDowOS41Mzc2ODgyNDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI4ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3NwbGljZV9yZWFkXCIsXG4gICAgXCJzbWNfcnhfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyByZWNlaXZlIHBhdGggZHVyaW5nIHNwbGljZSByZWFkIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYml0ZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIGB1OGAgdG8gcHJldmVudCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMgYW5kIGNvcnJlY3RseSBjaGVja3MgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW4gYHNtY19yeF9waXBlX2J1Zl9yZWxlYXNlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoU01DIHNvY2tldHMpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBXZSBzaG91bGQgZm9jdXMgb24gdGhlIFNNQyBzcGxpY2UgcmVhZCBhbmQgcmVjZWl2ZSBtZXNzYWdlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19zcGxpY2VfcmVhZFwiLFxuICAgIFwic21jX3J4X3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgcmVjZWl2ZSBwYXRoIGR1cmluZyBzcGxpY2UgcmVhZCBvcGVyYXRpb25zLiBJdCBjaGFuZ2VzIGJpdGZpZWxkcyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYCB0byBgdThgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gaXNzdWVzIGFuZCBjb3JyZWN0bHkgY2hlY2tzIGBjb25uLVxcdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKFNNQyBzb2NrZXRzKSwgc28gaXQgaXMgd29ydGggZnV6emluZy4gV2Ugc2hvdWxkIGZvY3VzIG9uIHRoZSBTTUMgc3BsaWNlIHJlYWQgYW5kIHJlY2VpdmUgbWVzc2FnZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTQ6MDkuNjIwOTg3MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODEyOTkxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTQ6MDkuNjIxNjExMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjgxMjM2MjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgc29ja2V0IHN0YXRlIHdpdGhvdXQgYSBsb2NrLCBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZGF0YSByYWNlcykgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU2NTk4MzgyOTljNzYwY2ZjZDgxMDMzZTBhMjUxNWI0ZWZmODkyMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwODoxMjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jLmggYi9uZXQvc21jL3NtYy5oXG5pbmRleCA1MjE0NWRmODNmNmU3Li40MjdiNmQ2M2I5OTMxIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWMuaFxuKysrIGIvbmV0L3NtYy9zbWMuaFxuQEAgLTI3Nyw5ICsyNzcsOSBAQCBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24ge1xuIFx0XHRcdFx0XHRcdCAqIDAgZm9yIFNNQy1SLCAzMiBmb3IgU01DLURcbiBcdFx0XHRcdFx0XHQgKi9cbiBcdHU2NFx0XHRcdHBlZXJfdG9rZW47XHQvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovXG4tXHR1OFx0XHRcdGtpbGxlZCA6IDE7XHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuLVx0dThcdFx0XHRmcmVlZCA6IDE7XHQvKiBub3JtYWwgdGVybWluYXRpb24gKi9cbi1cdHU4XHRcdFx0b3V0X29mX3N5bmMgOiAxOyAvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cbitcdHU4XHRcdFx0a2lsbGVkO1x0XHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuK1x0dThcdFx0XHRmcmVlZDtcdFx0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXG4rXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4gfTtcbiBcbiBzdHJ1Y3Qgc21jX3NvY2sge1x0XHRcdFx0Lyogc21jIHNvY2sgY29udGFpbmVyICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcnguYyBiL25ldC9zbWMvc21jX3J4LmNcbmluZGV4IDVjOWU0ZDhiNTdkZTQuLjE5N2ZkZGM2MjcxZjAgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19yeC5jXG4rKysgYi9uZXQvc21jL3NtY19yeC5jXG5AQCAtMTE1LDE2ICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3Qgc21jX3NwZF9wcml2ICpwcml2ID0gKHN0cnVjdCBzbWNfc3BkX3ByaXYgKilidWYtXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNnByaXYtXHUwMDNlc21jLVx1MDAzZWNvbm47XG4gXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHByaXYtXHUwMDNlc21jO1xuLVx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c21jLVx1MDAzZXNrO1xuIFxuLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQgfHxcbi1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fFxuLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19BUFBGSU5DTE9TRVdBSVQpXG4tXHRcdGdvdG8gb3V0O1xuLVx0Y29ubiA9IFx1MDAyNnNtYy1cdTAwM2Vjb25uO1xuIFx0bG9ja19zb2NrKHNrKTtcbitcdGlmIChjb25uLVx1MDAzZWZyZWVkKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFx0c21jX3J4X3VwZGF0ZV9jb25zKHNtYywgcHJpdi1cdTAwM2VsZW4pO1xuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGlmIChhdG9taWNfc3ViX2FuZF90ZXN0KHByaXYtXHUwMDNlbGVuLCBcdTAwMjZjb25uLVx1MDAzZXNwbGljZV9wZW5kaW5nKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjE0OjA5LjYyMTYxMTk5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODEyMzM0NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBTTUMgQ29ubmVjdGlvbiBTdHJ1Y3R1cmUgYW5kIENvbmN1cnJlbmN5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIHRoZSBgbmV0L3NtY2AgY29kZSwgc3BlY2lmaWNhbGx5IGBzbWMuaGAgYW5kIGBzbWNfcnguY2AuIEZpcnN0LCBJIHNlZSB0aGV5J3ZlIHN3aXRjaGVkIHRoZSBga2lsbGVkYCwgYGZyZWVkYCwgYW5kIGBvdXRfb2Zfc3luY2AgZmllbGRzIGluIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGZyb20gYml0ZmllbGRzIHRvIGZ1bGwgYHU4YCB0eXBlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYXZvaWRpbmcgdGhvc2UgbmFzdHkgYml0ZmllbGQtcmVsYXRlZCBjb25jdXJyZW5jeSBwcm9ibGVtcy4gQml0ZmllbGRzLCB3aXRoIHRoZWlyIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMsIGNhbiBiZSBhIHJlYWwgaGVhZGFjaGUgaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMuIFRoaXMgY2hhbmdlIGxpa2VseSBoZWxwcyBwcmV2ZW50IGRhdGEgcmFjZXMsIG9yIGV2ZW4gcG90ZW50aWFsbHkgYWRkcmVzc2VzIGlzc3VlcyBsaWtlIHVuYWxpZ25lZCBhY2Nlc3MuXG5cblRoZW4sIEknbSBsb29raW5nIGF0IGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgaW4gYHNtY19yeC5jYC4gVGhleSdyZSByZXBsYWNpbmcgYSBjaGVjayBvbiB0aGUgc29ja2V0IHN0YXRlICh3aGljaCB3YXMgb3V0c2lkZSBhIGxvY2spIHdpdGggYSBjaGVjayBvZiBgY29ubi1cdTAwM2VmcmVlZGAgKmluc2lkZSogdGhlIGBsb2NrX3NvY2soc2spYCBibG9jay4gQmluZ28uIFRoYXQncyBhIGNsYXNzaWMgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24uIEl0J3Mgbm93IHN5bmNocm9uaXplZCEgSXQncyBsaWtlIGEgbGlnaHRidWxiIG1vbWVudC4gVGhlIGVhcmxpZXIgc3RhdGUgY2hlY2sgZGlkbid0IGhhdmUgYSBsb2NrLCB3aGljaCBpcyBiYWQsIGFuZCBsaWtlbHkgYWxsb3dlZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIHdpdGggdGhlIGNoZWNrIGRvbmUgaW5zaWRlIHRoZSBsb2NrLCB3ZSdyZSBwcm90ZWN0aW5nIGFnYWluc3QgdGhhdC5cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoZSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpZiBpdCB3ZXJlIHRyaWdnZXJlZCwgYW5kIEtDU0FOIHdvdWxkIGZsYWcgdGhlIGRhdGEgcmFjZS4gVGhhdCdzIGdvb2QuIEJ1dCBJJ20gYWxzbyB0aGlua2luZy4uLiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gSXQncyBpbXBvcnRhbnQgdG8gYmUgdGhvcm91Z2guXG5cbk5vcGUuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgc3luY2hyb25pemF0aW9uLCBzdGF0ZSBjaGVja2luZywgYW5kIGFkZHJlc3NpbmcgdGhvc2UgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb25zLiBUaGVyZSdzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHN3aXRjaCBmcm9tIGJpdGZpZWxkcyB0byBgdThgIHByZXZlbnRzIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIGFkamFjZW50IGZpZWxkcy4gVGhlIHNvY2tldCBsb2NrIGlzIG5vdyB1c2VkIGNvcnJlY3RseS4gVGhlIGluY3JlYXNlZCBzaXplIG9mIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIGJlY2F1c2Ugb2YgdGhlIGB1OGBzIGlzIGltbWF0ZXJpYWwsIGFzIHRoZSBzdHJ1Y3R1cmUgaXMgaW50ZXJuYWwuXG5cbkdpdmVuIGFsbCB0aGF0LCBhbmQgYWZ0ZXIgcmV2aWV3aW5nIHRoYXQgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdCwgYW5kIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gV2UncmUgYWRkcmVzc2luZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGhlcmUsIGlzc3VlcyB0aGF0IGFyZSByZWFkaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgS0NTQU4uIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyLCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjE0OjIyLjQzMzk1MDMxNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAgdG8gdXNlIGZ1bGwgYHU4YCBmaWVsZHMgaW5zdGVhZCBvZiBiaXRmaWVsZHMgZm9yIGBraWxsZWRgLCBgZnJlZWRgLCBhbmQgYG91dF9vZl9zeW5jYCwgcHJldmVudGluZyBkYXRhIHJhY2VzIGNhdXNlZCBieSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGFkamFjZW50IGJpdGZpZWxkcy4gSXQgYWxzbyB1cGRhdGVzIGBzbWNfcnhfcGlwZV9idWZfcmVsZWFzZWAgdG8gY2hlY2sgYGNvbm4tXFx1MDAzZWZyZWVkYCB1bmRlciB0aGUgc29ja2V0IGxvY2sgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgc29ja2V0IHN0YXRlIHdpdGhvdXQgYSBsb2NrLCBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZGF0YSByYWNlcykgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gIHRvIHVzZSBmdWxsIGB1OGAgZmllbGRzIGluc3RlYWQgb2YgYml0ZmllbGRzIGZvciBga2lsbGVkYCwgYGZyZWVkYCwgYW5kIGBvdXRfb2Zfc3luY2AsIHByZXZlbnRpbmcgZGF0YSByYWNlcyBjYXVzZWQgYnkgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucyBvbiBhZGphY2VudCBiaXRmaWVsZHMuIEl0IGFsc28gdXBkYXRlcyBgc21jX3J4X3BpcGVfYnVmX3JlbGVhc2VgIHRvIGNoZWNrIGBjb25uLVxcdTAwM2VmcmVlZGAgdW5kZXIgdGhlIHNvY2tldCBsb2NrIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHNvY2tldCBzdGF0ZSB3aXRob3V0IGEgbG9jaywgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRhdGEgcmFjZXMpIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcpn5m[1] Phase: Succeeded StartedAt: 2026-08-20 08:14:47 +0000 UTC FinishedAt: 2026-08-20 08:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 08:14:47 +0000 UTC FinishedAt: 2026-08-20 08:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2] Phase: Succeeded StartedAt: 2026-08-20 08:14:47 +0000 UTC FinishedAt: 2026-08-20 11:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 08:14:47 +0000 UTC FinishedAt: 2026-08-20 11:59:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 08:14:47 +0000 UTC FinishedAt: 2026-08-20 08:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 08:14:47 +0000 UTC FinishedAt: 2026-08-20 08:14:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowcpn5m/series-workflowcpn5m-convert-artifact-2992939826/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 08:14:57 +0000 UTC FinishedAt: 2026-08-20 08:32:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 08:14:57 +0000 UTC FinishedAt: 2026-08-20 08:32:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3141e72c-e3f5-42db-bb8d-8bbfd18c7e22,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-workflowcpn5m/series-workflowcpn5m-convert-artifact-2992939826/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": "172d503d-ab77-4a97-a550-20f7762dacb2", "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-workflowcpn5m/series-workflowcpn5m-build-action-1172370608/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 08:14:57 +0000 UTC FinishedAt: 2026-08-20 08:32:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3141e72c-e3f5-42db-bb8d-8bbfd18c7e22,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-workflowcpn5m/series-workflowcpn5m-convert-artifact-2992939826/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": "172d503d-ab77-4a97-a550-20f7762dacb2", "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-workflowcpn5m/series-workflowcpn5m-build-action-1172370608/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 08:32:15 +0000 UTC FinishedAt: 2026-08-20 08:32:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 08:32:15 +0000 UTC FinishedAt: 2026-08-20 08:32:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 08:32:15 +0000 UTC FinishedAt: 2026-08-20 08:32:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 08:32:15 +0000 UTC FinishedAt: 2026-08-20 08:32:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowcpn5m/series-workflowcpn5m-convert-artifact-704773965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 08:32:26 +0000 UTC FinishedAt: 2026-08-20 08:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 08:32:26 +0000 UTC FinishedAt: 2026-08-20 08:34:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*172d503d-ab77-4a97-a550-20f7762dacb2,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-workflowcpn5m/series-workflowcpn5m-build-action-1172370608/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-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 08:34:37 +0000 UTC FinishedAt: 2026-08-20 08:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 08:34:37 +0000 UTC FinishedAt: 2026-08-20 08:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 08:34:37 +0000 UTC FinishedAt: 2026-08-20 08:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 08:34:37 +0000 UTC FinishedAt: 2026-08-20 08:53:37 +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:*3141e72c-e3f5-42db-bb8d-8bbfd18c7e22,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-workflowcpn5m/series-workflowcpn5m-convert-artifact-704773965/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": "29b7aace-5973-41ec-a4c6-91fa4e749494", "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-workflowcpn5m/series-workflowcpn5m-build-action-857287977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 08:34:37 +0000 UTC FinishedAt: 2026-08-20 08:53:27 +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:*3141e72c-e3f5-42db-bb8d-8bbfd18c7e22,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-workflowcpn5m/series-workflowcpn5m-convert-artifact-704773965/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": "29b7aace-5973-41ec-a4c6-91fa4e749494", "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-workflowcpn5m/series-workflowcpn5m-build-action-857287977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 08:53:37 +0000 UTC FinishedAt: 2026-08-20 08:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 08:53:37 +0000 UTC FinishedAt: 2026-08-20 08:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 08:53:37 +0000 UTC FinishedAt: 2026-08-20 08:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 08:53:37 +0000 UTC FinishedAt: 2026-08-20 08:55:43 +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:*29b7aace-5973-41ec-a4c6-91fa4e749494,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-workflowcpn5m/series-workflowcpn5m-build-action-857287977/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-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 08:55:53 +0000 UTC FinishedAt: 2026-08-20 11:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 08:55:53 +0000 UTC FinishedAt: 2026-08-20 11:59:28 +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":["smc_splice_read","smc_rx_recvmsg"],"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:*172d503d-ab77-4a97-a550-20f7762dacb2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29b7aace-5973-41ec-a4c6-91fa4e749494,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-workflowcpn5m/series-workflowcpn5m-build-action-1172370608/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-workflowcpn5m/series-workflowcpn5m-build-action-857287977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 08:55:53 +0000 UTC FinishedAt: 2026-08-20 08:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 08:55:53 +0000 UTC FinishedAt: 2026-08-20 08:55:58 +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":["smc_splice_read","smc_rx_recvmsg"],"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-workflowcpn5m/series-workflowcpn5m-convert-artifact-3202207538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 08:55:53 +0000 UTC FinishedAt: 2026-08-20 08:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 08:55:53 +0000 UTC FinishedAt: 2026-08-20 08:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 08:55:53 +0000 UTC FinishedAt: 2026-08-20 08:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 08:56:03 +0000 UTC FinishedAt: 2026-08-20 11:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpn5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_splice_read","smc_rx_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"b9c04bb0-8893-400e-80c2-4c27bd98f949","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 08:56:03 +0000 UTC FinishedAt: 2026-08-20 11:59:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*172d503d-ab77-4a97-a550-20f7762dacb2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29b7aace-5973-41ec-a4c6-91fa4e749494,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-workflowcpn5m/series-workflowcpn5m-build-action-1172370608/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-workflowcpn5m/series-workflowcpn5m-build-action-857287977/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-workflowcpn5m/series-workflowcpn5m-convert-artifact-3202207538/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,}