Name: series-workflowjh4nr Phase: Succeeded StartedAt: 2026-07-20 08:41:47 +0000 UTC FinishedAt: 2026-07-20 13:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[0] Phase: Succeeded StartedAt: 2026-07-20 08:41:47 +0000 UTC FinishedAt: 2026-07-20 09:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 08:41:47 +0000 UTC FinishedAt: 2026-07-20 09:03:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e13caf1c26587434f0b768193100440939c0fb91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e13caf1c26587434f0b768193100440939c0fb91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "f979ded9-9743-486d-b911-69a904c9f4ad" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_recvmsg", "sctp_skb_recv_datagram" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7c2N0cF9za2JfcmVjdl9kYXRhZ3JhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXHUwMDNlbGVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGEgYnVnIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk4ZjdiNzQxZGIxZDVjMmVlMjk4NDhhZjI1ZmJjYzYwZTQxNGExMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTowMjozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXG5pbmRleCBkNTBjMjc4MTI1MDRmMy4uYjg2ZDUwZDZiMTQ2ODggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmhcbkBAIC05Nyw3ICYjNDM7OTcsNyBAQCB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiBleHRlcm4gc3RydWN0IHBlcmNwdV9jb3VudGVyIHNjdHBfc29ja2V0c19hbGxvY2F0ZWQ7XG4gaW50IHNjdHBfYXNjb25mX21nbXQoc3RydWN0IHNjdHBfc29jayAqLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqKTtcbi1zdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqLCBpbnQsIGludCAqKTtcbiYjNDM7c3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xuIFxuIHR5cGVkZWYgaW50ICgqc2N0cF9jYWxsYmFja190KShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdm9pZCAqKTtcbiB2b2lkIHNjdHBfdHJhbnNwb3J0X3dhbGtfc3RhcnQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuY1xuaW5kZXggYzdiOWUzMjVlYzFjZDMuLjJkZWFhNDk4ZTZjZjg5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NvY2tldC5jXG5AQCAtMjEyMyw5ICYjNDM7MjEyMywxMSBAQCBzdGF0aWMgaW50IHNjdHBfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncywgXHUwMDI2ZXJyKTtcbi1cdGlmICghc2tiKVxuJiM0MztcdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHNrYikpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYiYjMzk7cyBpbiB0aGVcbiBcdCAqIGZyYWdfbGlzdC5cbkBAIC05MDgyLDcgJiM0Mzs5MDg0LDcgQEAgc3RhdGljIGludCBzY3RwX3dhaXRfZm9yX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIGludCAqZXJyLCBsb25nICp0aW1lb19wKVxuICAqIE5vdGU6IFRoaXMgaXMgcHJldHR5IG11Y2ggdGhlIHNhbWUgcm91dGluZSBhcyBpbiBjb3JlL2RhdGFncmFtLmNcbiAgKiB3aXRoIGEgZmV3IGNoYW5nZXMgdG8gbWFrZSBsa3NjdHAgd29yay5cbiAgKi9cbi1zdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncywgaW50ICplcnIpXG4mIzQzO3N0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtOTExNywyMSAmIzQzOzkxMTksMTkgQEAgc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsIGludCAqZXJyKVxuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0Z290byBub19wYWNrZXQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSAwO1xuIFx0XHRcdGJyZWFrO1xuLVxuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBVc2VyIGRvZXNuJiMzOTt0IHdhbnQgdG8gd2FpdC4gICovXG4gXHRcdGVycm9yID0gLUVBR0FJTjtcbiBcdFx0aWYgKCF0aW1lbylcbiBcdFx0XHRnb3RvIG5vX3BhY2tldDtcbi1cdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBlcnIsIFx1MDAyNnRpbWVvKSA9PSAwKTtcbi1cbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBcdTAwMjZlcnJvciwgXHUwMDI2dGltZW8pID09IDApO1xuIFxuIG5vX3BhY2tldDpcbi1cdCplcnIgPSBlcnJvcjtcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiB9XG4gXG4gLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbmluZGV4IDg5MjBjYTkyYTAxMTVjLi4yMWFlMGFkYmFlZWZiYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbkBAIC0xMDYxLDEwICYjNDM7MTA2MSw5IEBAIHZvaWQgc2N0cF91bHBldmVudF9yZWFkX254dGluZm8oY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50LFxuIFx0XHRcdFx0c3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRpbnQgZXJyO1xuIFxuLVx0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG4tXHRpZiAoc2tiICE9IE5VTEwpIHtcbiYjNDM7XHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCk7XG4mIzQzO1x0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKSB7XG4gXHRcdF9fc2N0cF91bHBldmVudF9yZWFkX254dGluZm8oc2N0cF9za2IyZXZlbnQoc2tiKSxcbiBcdFx0XHRcdFx0ICAgICBtc2doZHIsIHNrYik7XG4gXHRcdC8qIEp1c3QgcmVsZWFzZSByZWZjb3VudCBoZXJlLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7c2N0cF9za2JfcmVjdl9kYXRhZ3JhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXHUwMDNlbGVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGEgYnVnIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOThmN2I3NDFkYjFkNWMyZWUyOTg0OGFmMjVmYmNjNjBlNDE0YTEyNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDA5OjAyOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCBkNTBjMjc4MTI1MDRmMy4uYjg2ZDUwZDZiMTQ2ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC05Nyw3ICYjNDM7OTcsNyBAQCB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciBzY3RwX3NvY2tldHNfYWxsb2NhdGVkOwogaW50IHNjdHBfYXNjb25mX21nbXQoc3RydWN0IHNjdHBfc29jayAqLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqKTsKLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICosIGludCwgaW50ICopOwomIzQzO3N0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKIAogdHlwZWRlZiBpbnQgKCpzY3RwX2NhbGxiYWNrX3QpKHN0cnVjdCBzY3RwX2VuZHBvaW50ICosIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqLCB2b2lkICopOwogdm9pZCBzY3RwX3RyYW5zcG9ydF93YWxrX3N0YXJ0KHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBjN2I5ZTMyNWVjMWNkMy4uMmRlYWE0OThlNmNmODkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0yMTIzLDkgJiM0MzsyMTIzLDExIEBAIHN0YXRpYyBpbnQgc2N0cF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQlnb3RvIG91dDsKIAl9CiAKLQlza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncywgJmFtcDtlcnIpOwotCWlmICghc2tiKQomIzQzOwlza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyk7CiYjNDM7CWlmIChJU19FUlIoc2tiKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihza2IpOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJLyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYiYjMzk7cyBpbiB0aGUKIAkgKiBmcmFnX2xpc3QuCkBAIC05MDgyLDcgJiM0Mzs5MDg0LDcgQEAgc3RhdGljIGludCBzY3RwX3dhaXRfZm9yX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIGludCAqZXJyLCBsb25nICp0aW1lb19wKQogICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uYwogICogd2l0aCBhIGZldyBjaGFuZ2VzIHRvIG1ha2UgbGtzY3RwIHdvcmsuCiAgKi8KLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycikKJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKIHsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTkxMTcsMjEgJiM0Mzs5MTE5LDE5IEBAIHN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycikKIAkJaWYgKGVycm9yKQogCQkJZ290byBub19wYWNrZXQ7CiAKLQkJaWYgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV04pCiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCWVycm9yID0gMDsKIAkJCWJyZWFrOwotCiYjNDM7CQl9CiAKIAkJLyogVXNlciBkb2VzbiYjMzk7dCB3YW50IHRvIHdhaXQuICAqLwogCQllcnJvciA9IC1FQUdBSU47CiAJCWlmICghdGltZW8pCiAJCQlnb3RvIG5vX3BhY2tldDsKLQl9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgZXJyLCAmYW1wO3RpbWVvKSA9PSAwKTsKLQotCXJldHVybiBOVUxMOwomIzQzOwl9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgJmFtcDtlcnJvciwgJmFtcDt0aW1lbykgPT0gMCk7CiAKIG5vX3BhY2tldDoKLQkqZXJyID0gZXJyb3I7Ci0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KIAogLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC91bHBldmVudC5jIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwppbmRleCA4OTIwY2E5MmEwMTE1Yy4uMjFhZTBhZGJhZWVmYmMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvdWxwZXZlbnQuYwpAQCAtMTA2MSwxMCAmIzQzOzEwNjEsOSBAQCB2b2lkIHNjdHBfdWxwZXZlbnRfcmVhZF9ueHRpbmZvKGNvbnN0IHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCwKIAkJCQlzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgZXJyOwogCi0Jc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQsICZhbXA7ZXJyKTsKLQlpZiAoc2tiICE9IE5VTEwpIHsKJiM0MzsJc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQpOwomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpIHsKIAkJX19zY3RwX3VscGV2ZW50X3JlYWRfbnh0aW5mbyhzY3RwX3NrYjJldmVudChza2IpLAogCQkJCQkgICAgIG1zZ2hkciwgc2tiKTsKIAkJLyogSnVzdCByZWxlYXNlIHJlZmNvdW50IGhlcmUuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIFNvY2tldCBSZWNlaXZlIExvZ2ljIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBTQ1RQIHNvY2tldCByZWNlaXZlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZyb20gdGFraW5nIGFuIGVycm9yIHBvaW50ZXIgdG8gcmV0dXJuaW5nIGFuIGBFUlJfUFRSKGVycm9yKWAgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29uc2VxdWVuY2VzIGFyZSB1bmRlcnN0b29kLgoKVGhlIG9yaWdpbmFsIGNvZGUgaW4gYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3VscGV2ZW50X3JlYWRfbnh0aW5mb2AgdXNlZCB0aGUgb2xkIHNpZ25hdHVyZSB3aXRoIHRoZSBlcnJvciBwb2ludGVyLiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGVycm9yIHBvaW50ZXIgd2l0aCBjaGVja2luZyBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciB3aXRoIHRoZSBgSVNfRVJSYCBtYWNyby4gU28gdGhlIGxvZ2ljIG5vdyBjaGVja3MgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAgaXMgYW4gZXJyb3IgcG9pbnRlci4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7V2FpdCwgaWYgaXQmIzM5O3MgYWx3YXlzIHJldHVybmluZyBhbiBlcnJvciBwb2ludGVyIGluIHBsYWNlIG9mIE5VTEwsIHRoZW4gdGhlIGNoZWNrIG1ha2VzIHNlbnNlJiMzNDsuIEJ1dCB0aGVuIEkgZHVnIGludG8gdGhlIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBjb2RlIGl0c2VsZi4gVGhlcmUmIzM5O3MgYSBjYXNlIHdoZXJlIGBzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOYCBpcyB0cnVlLiBJbiB0aGlzIGNhc2UsIGl0IHNldHMgYGVycm9yID0gMGAgYW5kIGJyZWFrcywgd2hpY2ggbWVhbnMgaXQgd2lsbCByZXR1cm4gYEVSUl9QVFIoMClgLiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBFUlJfUFRSKDApYCAqKmlzKiogTlVMTC4gU28sIHRoZSBmdW5jdGlvbiBjYW4gYWN0dWFsbHkgcmV0dXJuIGBOVUxMYCBpbiB0aGlzIHNjZW5hcmlvISBgSVNfRVJSKE5VTEwpYCBpcyBmYWxzZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY29kZSBpbiBgc2N0cF9yZWN2bXNnYCB3aWxsIHByb2NlZWQgYXMgdGhvdWdoIGl0IGhhcyBhIHZhbGlkIGBza2JgIHdoZW4gaXQgZG9lc24mIzM5O3QuCgpMb29raW5nIGF0IGBzY3RwX3JlY3Ztc2dgLCBpZiBgc2tiYCBpcyBgTlVMTGAsIHRoZSBjb2RlIHdpbGwgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZSBpdCBieSBhY2Nlc3NpbmcgYHNrYi0mZ3Q7bGVuYC4gVGhpcyB3aWxsIGxlYWQgdG8gYSBjcmFzaCEgVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGJ1ZyEgSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgaW1tZWRpYXRlbHkuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgc2N0cF9yZWN2bXNnYCBpcyBzdXBwb3NlZCB0byBoYW5kbGUgdGhlIGBOVUxMYCByZXR1cm4gb3Igd2hldGhlciBpdCYjMzk7cyBhbiBvdmVyc2lnaHQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGVudGlyZSBgbmV0L3NjdHAvc29ja2V0LmNgIGZpbGUgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmM9MjA1Nj1zdGF0aWMgaW50IHNjdHBfc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0yMDk3LSAqL1xubmV0L3NjdHAvc29ja2V0LmM6MjA5ODpzdGF0aWMgaW50IHNjdHBfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9zY3RwL3NvY2tldC5jLTIwOTktXHRcdFx0aW50IGZsYWdzKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTM0MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfY29udGV4dChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMzQ1Ni0gKiBjb21lIGZyb20gYSBkaWZmZXJlbnQgYXNzb2NpYXRpb24gKHRodXMgdGhlIHVzZXIgbXVzdCByZWNlaXZlIGRhdGFcbm5ldC9zY3RwL3NvY2tldC5jOjM0NTc6ICogd2l0aCB0aGUgZXh0ZW5kZWQgY2FsbHMgKGUuZy4gc2N0cF9yZWN2bXNnKSB0byBrZWVwIHRyYWNrIG9mIHdoaWNoXG5uZXQvc2N0cC9zb2NrZXQuYy0zNDU4LSAqIGFzc29jaWF0aW9uIGVhY2ggcmVjZWl2ZSBiZWxvbmdzIHRvLlxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTk2NTQ9c3RydWN0IHByb3RvIHNjdHBfcHJvdCA9IHtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy05NjY3LVx0LnNlbmRtc2cgICAgID1cdHNjdHBfc2VuZG1zZyxcbm5ldC9zY3RwL3NvY2tldC5jOjk2Njg6XHQucmVjdm1zZyAgICAgPVx0c2N0cF9yZWN2bXNnLFxubmV0L3NjdHAvc29ja2V0LmMtOTY2OS1cdC5iaW5kICAgICAgICA9XHRzY3RwX2JpbmQsXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTcwOT1zdHJ1Y3QgcHJvdG8gc2N0cHY2X3Byb3QgPSB7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTcyMi1cdC5zZW5kbXNnXHQ9IHNjdHBfc2VuZG1zZyxcbm5ldC9zY3RwL3NvY2tldC5jOjk3MjM6XHQucmVjdm1zZ1x0PSBzY3RwX3JlY3Ztc2csXG5uZXQvc2N0cC9zb2NrZXQuYy05NzI0LVx0LmJpbmRcdFx0PSBzY3RwX2JpbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgY29uc2lkZXJpbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBgc2N0cF9yZWN2bXNnYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZGlzc2VjdCBgc2N0cF9yZWN2bXNnYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9zY3RwL3NvY2tldC5jYCBmaWxlLCBhcm91bmQgbGluZSAyMTIzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHJlY2VpdmluZyBTQ1RQIG1lc3NhZ2VzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkgd2FudCB0byB6ZXJvIGluIG9uIGl0cyBjb3JlIGxvZ2ljIOKAkyBob3cgaXQgcHVsbHMgZGF0YSBmcm9tIHRoZSB0cmFuc3BvcnQsIGhvdyBpdCBtYW5hZ2VzIG1lc3NhZ2UgYm91bmRhcmllcywgd2hhdCBlcnJvciBjb25kaXRpb25zIGl0IGNoZWNrcyBmb3IsIGFuZCBob3cgaXQgZGVsaXZlcnMgdGhlIGRhdGEgdG8gdGhlIHVzZXIgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRoZSBmaWxlLCB3aGljaCB1c3VhbGx5IGluZm9ybXMgdGhlIGltcGxlbWVudGF0aW9uIGNob2ljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjExMDpcdFxuMjExMTpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuMjExMjpcdFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG4yMTEzOlx0XG4yMTE0Olx0XHRpZiAoc2tfY2FuX2J1c3lfbG9vcChzaykgXHUwMDI2XHUwMDI2XG4yMTE1Olx0XHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxuMjExNjpcdFx0XHRza19idXN5X2xvb3Aoc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMjExNzpcdFxuMjExODpcdFx0bG9ja19zb2NrKHNrKTtcbjIxMTk6XHRcbjIxMjA6XHRcdGlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApIFx1MDAyNlx1MDAyNiAhc2N0cF9zc3RhdGUoc2ssIEVTVEFCTElTSEVEKSBcdTAwMjZcdTAwMjZcbjIxMjE6XHRcdCAgICAhc2N0cF9zc3RhdGUoc2ssIENMT1NJTkcpIFx1MDAyNlx1MDAyNiAhc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpIHtcbjIxMjI6XHRcdFx0ZXJyID0gLUVOT1RDT05OO1xuMjEyMzpcdFx0XHRnb3RvIG91dDtcbjIxMjQ6XHRcdH1cbjIxMjU6XHRcbjIxMjY6XHRcdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzKTtcbjIxMjc6XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMjEyODpcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4yMTI5Olx0XHRcdGdvdG8gb3V0O1xuMjEzMDpcdFx0fVxuMjEzMTpcdFxuMjEzMjpcdFx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYiYjMzk7cyBpbiB0aGVcbjIxMzM6XHRcdCAqIGZyYWdfbGlzdC5cbjIxMzQ6XHRcdCAqL1xuMjEzNTpcdFx0c2tiX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4yMTM2Olx0XG4yMTM3Olx0XHRjb3BpZWQgPSBza2JfbGVuO1xuMjEzODpcdFx0aWYgKGNvcGllZCBcdTAwM2UgbGVuKVxuMjEzOTpcdFx0XHRjb3BpZWQgPSBsZW47XG4yMTQwOlx0XG4yMTQxOlx0XHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCAwLCBtc2csIGNvcGllZCk7XG4yMTQyOlx0XG4yMTQzOlx0XHRldmVudCA9IHNjdHBfc2tiMmV2ZW50KHNrYik7XG4yMTQ0Olx0XG4yMTQ1Olx0XHRpZiAoZXJyKVxuMjE0NjpcdFx0XHRnb3RvIG91dF9mcmVlO1xuMjE0NzpcdFxuMjE0ODpcdFx0aWYgKGV2ZW50LVx1MDAzZWNodW5rIFx1MDAyNlx1MDAyNiBldmVudC1cdTAwM2VjaHVuay1cdTAwM2VoZWFkX3NrYilcbjIxNDk6XHRcdFx0aGVhZF9za2IgPSBldmVudC1cdTAwM2VjaHVuay1cdTAwM2VoZWFkX3NrYjtcbjIxNTA6XHRcdGVsc2VcbjIxNTE6XHRcdFx0aGVhZF9za2IgPSBza2I7XG4yMTUyOlx0XHRzb2NrX3JlY3ZfY21zZ3MobXNnLCBzaywgaGVhZF9za2IpO1xuMjE1MzpcdFx0aWYgKHNjdHBfdWxwZXZlbnRfaXNfbm90aWZpY2F0aW9uKGV2ZW50KSkge1xuMjE1NDpcdFx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19OT1RJRklDQVRJT047XG4yMTU1Olx0XHRcdHNwLVx1MDAzZXBmLVx1MDAzZWV2ZW50X21zZ25hbWUoZXZlbnQsIG1zZy1cdTAwM2Vtc2dfbmFtZSwgXHUwMDI2bXNnLVx1MDAzZW1zZ19uYW1lbGVuKTtcbjIxNTY6XHRcdH0gZWxzZSB7XG4yMTU3Olx0XHRcdHNwLVx1MDAzZXBmLVx1MDAzZXNrYl9tc2duYW1lKGhlYWRfc2tiLCBtc2ctXHUwMDNlbXNnX25hbWUsIFx1MDAyNm1zZy1cdTAwM2Vtc2dfbmFtZWxlbik7XG4yMTU4Olx0XHR9XG4yMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipUaGUgTnVsbCBTS0IgQ29udW5kcnVtKioKCldhaXQgYSBtaW51dGUuLi4gaWYgdGhlIGBza2JgIHBvaW50ZXIgaXMgYWN0dWFsbHkgYE5VTExgLCB0aGVuIGBJU19FUlIoc2tiKWAgaXMgZ29pbmcgdG8gZXZhbHVhdGUgdG8gYGZhbHNlYC4gVGhhdCYjMzk7cyBub3QgZ29vZCwgYmVjYXVzZSB0aGVuIHRoZSBjb2RlIG1vdmVzIG9uIHRvIGBza2JfbGVuID0gc2tiLSZndDtsZW47YC4uLiB3aGljaCBpcyBnb2luZyB0byB0cnkgYW5kIGRlcmVmZXJlbmNlIGEgbnVsbCBwb2ludGVyISBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSByZWNpcGUgZm9yIGEga2VybmVsIHBhbmljLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgc29tZSBzZXJpb3VzbHkgdW5kZWZpbmVkIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGNhc2Ugb2YgYSBgTlVMTCBza2JgIGNvcnJlY3RseS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAgZnVuY3Rpb24gYWdhaW4gYW5kIHJlLWV4YW1pbmUgdGhlIGxvZ2ljLCBsaW5lIGJ5IGxpbmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBhIGd1YXJkIGFnYWluc3QgdGhpcyBwb3NzaWJpbGl0eSwgb3IgaXQmIzM5O3MgYSBjcml0aWNhbCBidWcuIEkgY2FuJiMzOTt0IGJlbGlldmUgSSBhbG1vc3QgbWlzc2VkIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTA4MDpcdFx0cmV0dXJuIGVycm9yO1xuOTA4MTpcdH1cbjkwODI6XHRcbjkwODM6XHQvKiBSZWNlaXZlIGEgZGF0YWdyYW0uXG45MDg0Olx0ICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uY1xuOTA4NTpcdCAqIHdpdGggYSBmZXcgY2hhbmdlcyB0byBtYWtlIGxrc2N0cCB3b3JrLlxuOTA4NjpcdCAqL1xuOTA4NzpcdHN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuOTA4ODpcdHtcbjkwODk6XHRcdGludCBlcnJvcjtcbjkwOTA6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG45MDkxOlx0XHRsb25nIHRpbWVvO1xuOTA5MjpcdFxuOTA5MzpcdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjkwOTQ6XHRcbjkwOTU6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiB0aW1lbzolbGQsIG1heDolbGRcXG5cJiMzNDssIF9fZnVuY19fLCB0aW1lbyxcbjkwOTY6XHRcdFx0IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbjkwOTc6XHRcbjkwOTg6XHRcdGRvIHtcbjkwOTk6XHRcdFx0LyogQWdhaW4gb25seSB1c2VyIGxldmVsIGNvZGUgY2FsbHMgdGhpcyBmdW5jdGlvbixcbjkxMDA6XHRcdFx0ICogc28gbm90aGluZyBpbnRlcnJ1cHQgbGV2ZWxcbjkxMDE6XHRcdFx0ICogd2lsbCBzdWRkZW5seSBlYXQgdGhlIHJlY2VpdmVfcXVldWUuXG45MTAyOlx0XHRcdCAqXG45MTAzOlx0XHRcdCAqICBMb29rIGF0IGN1cnJlbnQgbmZzIGNsaWVudCBieSB0aGUgd2F5Li4uXG45MTA0Olx0XHRcdCAqICBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdhcyBjb3JyZWN0IGluIGFueSBjYXNlLiA4KVxuOTEwNTpcdFx0XHQgKi9cbjkxMDY6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykge1xuOTEwNzpcdFx0XHRcdHNrYiA9IHNrYl9wZWVrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuOTEwODpcdFx0XHRcdGlmIChza2IpXG45MTA5Olx0XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKTtcbjkxMTA6XHRcdFx0fSBlbHNlIHtcbjkxMTE6XHRcdFx0XHRza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuOTExMjpcdFx0XHR9XG45MTEzOlx0XG45MTE0Olx0XHRcdGlmIChza2IpXG45MTE1Olx0XHRcdFx0cmV0dXJuIHNrYjtcbjkxMTY6XHRcbjkxMTc6XHRcdFx0LyogQ2FsbGVyIGlzIGFsbG93ZWQgbm90IHRvIGNoZWNrIHNrLVx1MDAzZXNrX2VyciBiZWZvcmUgY2FsbGluZy4gKi9cbjkxMTg6XHRcdFx0ZXJyb3IgPSBzb2NrX2Vycm9yKHNrKTtcbjkxMTk6XHRcdFx0aWYgKGVycm9yKVxuOTEyMDpcdFx0XHRcdGdvdG8gbm9fcGFja2V0O1xuOTEyMTpcdFxuOTEyMjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xuOTEyMzpcdFx0XHRcdGVycm9yID0gMDtcbjkxMjQ6XHRcdFx0XHRicmVhaztcbjkxMjU6XHRcdFx0fVxuOTEyNjpcdFxuOTEyNzpcdFx0XHQvKiBVc2VyIGRvZXNuJiMzOTt0IHdhbnQgdG8gd2FpdC4gICovXG45MTI4Olx0XHRcdGVycm9yID0gLUVBR0FJTjtcbjkxMjk6XHRcdFx0aWYgKCF0aW1lbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24mIzM5O3MgQ29udHJvbCBGbG93KioKCkFscmlnaHQsIHNvIGlmIGBzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOYCBpcyB0cnVlLCB0aGUgbG9vcCAqaW1tZWRpYXRlbHkqIGV4aXRzLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IGl0IHdvdWxkIGp1bXAgdG8gYG5vX3BhY2tldDpgLCBidXQgbm8sIHRoYXQmIzM5O3MgaW5jb3JyZWN0LiBJdCBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCB0aGUgKnZlcnkgbmV4dCogbGluZSBpcyB0aGUgYHJldHVybiBFUlJfUFRSKGVycm9yKTtgIHN0YXRlbWVudC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGV0YWlsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE9rYXksIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byByZWFkIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbG9naWMgaGVyZS4gSSBjYW4mIzM5O3QganVtcCB0byBhbnkgYXNzdW1wdGlvbnMgeWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NvY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5MTIwOlx0XHRcdFx0Z290byBub19wYWNrZXQ7XG45MTIxOlx0XG45MTIyOlx0XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG45MTIzOlx0XHRcdFx0ZXJyb3IgPSAwO1xuOTEyNDpcdFx0XHRcdGJyZWFrO1xuOTEyNTpcdFx0XHR9XG45MTI2Olx0XG45MTI3Olx0XHRcdC8qIFVzZXIgZG9lc24mIzM5O3Qgd2FudCB0byB3YWl0LiAgKi9cbjkxMjg6XHRcdFx0ZXJyb3IgPSAtRUFHQUlOO1xuOTEyOTpcdFx0XHRpZiAoIXRpbWVvKVxuOTEzMDpcdFx0XHRcdGdvdG8gbm9fcGFja2V0O1xuOTEzMTpcdFx0fSB3aGlsZSAoc2N0cF93YWl0X2Zvcl9wYWNrZXQoc2ssIFx1MDAyNmVycm9yLCBcdTAwMjZ0aW1lbykgPT0gMCk7XG45MTMyOlx0XG45MTMzOlx0bm9fcGFja2V0OlxuOTEzNDpcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuOTEzNTpcdH1cbjkxMzY6XHRcbjkxMzc6XHQvKiBJZiBzbmRidWYgaGFzIGNoYW5nZWQsIHdha2UgdXAgcGVyIGFzc29jaWF0aW9uIHNuZGJ1ZiB3YWl0ZXJzLiAgKi9cbjkxMzg6XHRzdGF0aWMgdm9pZCBfX3NjdHBfd3JpdGVfc3BhY2Uoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG45MTM5Olx0e1xuOTE0MDpcdFx0c3RydWN0IHNvY2sgKnNrID0gYXNvYy1cdTAwM2ViYXNlLnNrO1xuOTE0MTpcdFxuOTE0MjpcdFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFx1MDAzYz0gMClcbjkxNDM6XHRcdFx0cmV0dXJuO1xuOTE0NDpcdFxuOTE0NTpcdFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2YXNvYy1cdTAwM2V3YWl0KSlcbjkxNDY6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmFzb2MtXHUwMDNld2FpdCk7XG45MTQ3Olx0XG45MTQ4Olx0XHRpZiAoc2N0cF93cml0ZWFibGUoc2spKSB7XG45MTQ5Olx0XHRcdHN0cnVjdCBzb2NrZXRfd3EgKndxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgQ3JpdGljYWwgU0NUUCBCdWcgRGlzY292ZXJlZCEqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIHRocm91Z2ggdGhpcyBTQ1RQIGNvZGUsIGFuZCBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIHNvbWV0aGluZyByYXRoZXIgbmFzdHkuIEl0IGxvb2tzIGxpa2UgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGJ1Zy4gTGV0IG1lIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBzZWUgdGhpczoKCmBgYGMKCQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewoJCQllcnJvciA9IDA7CgkJCWJyZWFrOwoJCX0KYGBgCgpJZiBgc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZSwgaW5kaWNhdGluZyBhIHNodXRkb3duIG9uIHRoZSByZWNlaXZlIHNpZGUsIHRoZSBsb29wIGJyZWFrcywgYW5kIGBlcnJvcmAgaXMgc2V0IHRvIDAuIE5vdywgdGhpcyBmZWVkcyBpbnRvIHRoZSBgbm9fcGFja2V0YCBsYWJlbCwgd2hpY2ggcmV0dXJucyBgRVJSX1BUUihlcnJvcilgLiBJbiB0aGlzIGNhc2UgdGhhdCYjMzk7cyBgRVJSX1BUUigwKWAsIHdoaWNoIGV2YWx1YXRlcyB0byBgTlVMTGAuCgpUaGUgcHJvYmxlbT8gYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGNhbiByZXR1cm4gYE5VTExgLiBUaGlzIGlzIGZpbmUsIHRoYXQmIzM5O3MgYSB2YWxpZCByZXR1cm4gZm9yIGFuIGVtcHR5IHF1ZXVlIHdoZW4gc2h1dCBkb3duLCBvciBhbiBlcnJvci4gSG93ZXZlciwgYHNjdHBfcmVjdm1zZ2AgKmNhbGxzKiB0aGlzOgoKYGBgYwoJc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MpOwoJaWYgKElTX0VSUihza2IpKSB7CgkJZXJyID0gUFRSX0VSUihza2IpOwoJCWdvdG8gb3V0OwoJfQoKCS8qIEdldCB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBza2IgaW5jbHVkaW5nIGFueSBza2ImIzM5O3MgaW4gdGhlCgkgKiBmcmFnX2xpc3QuCgkgKi8KCXNrYl9sZW4gPSBza2ItJmd0O2xlbjsKYGBgCgpIZXJlJiMzOTtzIHRoZSBraWNrZXI6IElmIGBza2JgIGlzIGBOVUxMYCwgYElTX0VSUihza2IpYCBpcyBmYWxzZS4gVGhhdCBtZWFucyBpdCAqc2tpcHMqIHRoZSBlcnJvciBjaGVjayBhbmQgZGVyZWZlcmVuY2VzIHRoZSBgc2tiLSZndDtsZW5gLiBCb29tISBOdWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIGEgY3Jhc2guCgpUaGlzIGlzIGRlZmluaXRlbHkgbmV3LCBpdCB1c2VkIHRvIGxvb2sgbGlrZSB0aGlzOgoKYGBgYwoJc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsICZhbXA7ZXJyKTsKCWlmICghc2tiKQoJCWdvdG8gb3V0OwpgYGAKClNvIHByZXZpb3VzbHkgYSBgTlVMTGAgd291bGQgYGdvdG8gb3V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKSSBkb3VibGUtY2hlY2tlZCBgc2N0cF91bHBldmVudF9yZWFkX254dGluZm9gLCBhbmQgdGhhdCBjb2RlICpjb3JyZWN0bHkqIHVzZXMgYCFJU19FUlJfT1JfTlVMTChza2IpYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8uIFNvIGl0IGNvcnJlY3RseSBoYW5kbGVzIE5VTEwuCgpJIGFsc28gY2hlY2tlZCBgSVNfRVJSYCBhZ2FpbiB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyB3YXMgY29ycmVjdC4gYElTX0VSUihOVUxMKWAgaXMgZmFsc2UsIGFzIGV4cGVjdGVkLgoKU28sIGluIHNob3J0OiBgc2N0cF9yZWN2bXNnYCAqd2lsbCogY3Jhc2ggd2hlbiBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAgcmV0dXJucyBgTlVMTGAuIEl0IHJldHVybnMgYE5VTExgIHdoZW4gYHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV05gIGlzIHNldCAqYW5kKiB0aGUgcmVjZWl2ZSBxdWV1ZSBpcyBlbXB0eS4gVGhpcyBpcyBlYXNpbHkgcmVhY2hhYmxlLiBJdCB3aWxsIGNyYXNoIG9uIHRoZSBgc2tiLSZndDtsZW5gIGRlcmVmZXJlbmNlLgoKSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enotd29ydGh5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1Zy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgb24gYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYC4gVGhlIHRhcmdldCBjb25maWcgc2hvdWxkIGJlIGBJUF9TQ1RQYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uZmlnIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBJUF9TQ1RQYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBvbmx5IG9uZSBpbiBwbGF5LiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIFRoZXJlIGNvdWxkIGJlIHJlbGF0ZWQgb3Igb3ZlcmxhcHBpbmcgc2V0dGluZ3MgSSBuZWVkIHRvIGNvbnNpZGVyLCBvciBldmVuIGNvbmZsaWN0aW5nIG9uZXMuIFRoaXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIGEgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgYSBiaWdnZXIgcGljdHVyZSB0byByZWFsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb21wb25lbnRzLiBEaWdnaW5nIGRlZXBlciBpcyBhbHdheXMgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnPTM5PWlmIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNDAtXG5uZXQvc2N0cC9LY29uZmlnOjQxOmNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbm5ldC9zY3RwL0tjb25maWctNDItXHRib29sIFwmIzM0O1NDVFA6IERlYnVnIG9iamVjdCBjb3VudHNcJiMzNDtcbi0tXG5uZXQvc2N0cC9LY29uZmlnPTUyPWNob2ljZVxuLS1cbm5ldC9zY3RwL0tjb25maWctNjEtXG5uZXQvc2N0cC9LY29uZmlnOjYyOmNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XG5uZXQvc2N0cC9LY29uZmlnLTYzLVx0Ym9vbCBcJiMzNDtITUFDLVNIQTI1NlwmIzM0O1xubmV0L3NjdHAvS2NvbmZpZy02NC1cbm5ldC9zY3RwL0tjb25maWc6NjU6Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FXG5uZXQvc2N0cC9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtOb25lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTMKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlIGlzIG9idmlvdXNseSBgSVBfU0NUUGAuIEl0JiMzOTtzIHdoYXQgZHJpdmVzIHRoaXMgd2hvbGUgdGhpbmcuIE5vdywgdGhlIG1lYXQgb2YgdGhlIG1hdHRlci4uLgoKRXNzZW50aWFsbHksIHRoZXJlJiMzOTtzIGEgcGF0Y2ggdGhhdCBhbHRlcnMgdGhlIHJldHVybiBiZWhhdmlvciBvZiBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAuIEl0JiMzOTtzIG5vdyBnb2luZyB0byByZXR1cm4gYEVSUl9QVFJgIGluc3RlYWQgb2YgYE5VTExgLiBUaGUgaXNzdWUgYXJpc2VzIGluIGBzY3RwX3JlY3Ztc2dgLCB3aGVyZSB0aGUgY29kZSBjaGVja3MgZm9yIGBJU19FUlIoc2tiKWAuIEhvd2V2ZXIsIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCAqY2FuKiBzdGlsbCByZXR1cm4gYE5VTExgIOKAkyBzcGVjaWZpY2FsbHksIGBFUlJfUFRSKDApYCDigJMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBuYW1lbHkgd2hlbiBgUkNWX1NIVVRET1dOYCBpcyBzZXQuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IG9uIGBza2ItJmd0O2xlbmAuCgpUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBpbnRyb2R1Y2VzIGEgYnVnLCBhbmQgaXQgaXMgYSBidWcgdGhhdCB3ZSBzaG91bGQgYWJzb2x1dGVseSB0YXJnZXQgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgdGhhdCBuZWVkIHRvIGJlIGluIGZvY3VzIGFyZSBgc2N0cF9yZWN2bXNnYCBhbmQgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzZXQgdXAgdG8gaW5jbHVkZSAmIzM0O0lQX1NDVFAmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7c2N0cF9za2JfcmVjdl9kYXRhZ3JhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXHUwMDNlbGVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGEgYnVnIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3NrYl9yZWN2X2RhdGFncmFtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSB0byByZXR1cm4gRVJSX1BUUiBpbnN0ZWFkIG9mIE5VTEwuIEhvd2V2ZXIsIGluIHNjdHBfcmVjdm1zZywgaXQgY2hlY2tzIElTX0VSUihza2IpIGJ1dCBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIGNhbiBzdGlsbCByZXR1cm4gTlVMTCAoRVJSX1BUUigwKSkgd2hlbiBSQ1ZfU0hVVERPV04gaXMgc2V0LCBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHNrYi1cdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDI6MzYuNDA5NTk5NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM1MTI2NTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9yZWN2bXNnXCIsXG4gICAgXCJzY3RwX3NrYl9yZWN2X2RhdGFncmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIHRvIHJldHVybiBFUlJfUFRSIGluc3RlYWQgb2YgTlVMTC4gSG93ZXZlciwgaW4gc2N0cF9yZWN2bXNnLCBpdCBjaGVja3MgSVNfRVJSKHNrYikgYnV0IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gY2FuIHN0aWxsIHJldHVybiBOVUxMIChFUlJfUFRSKDApKSB3aGVuIFJDVl9TSFVURE9XTiBpcyBzZXQsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gc2tiLVxcdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjozNi40MDk2MDcyNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MTQwODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOThmN2I3NDFkYjFkNWMyZWUyOTg0OGFmMjVmYmNjNjBlNDE0YTEyN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTowMjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXFxuaW5kZXggZDUwYzI3ODEyNTA0ZjMuLmI4NmQ1MGQ2YjE0Njg4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmhcXG5AQCAtOTcsNyArOTcsNyBAQCB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuIGV4dGVybiBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc2N0cF9zb2NrZXRzX2FsbG9jYXRlZDtcXG4gaW50IHNjdHBfYXNjb25mX21nbXQoc3RydWN0IHNjdHBfc29jayAqLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqKTtcXG4tc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKiwgaW50LCBpbnQgKik7XFxuK3N0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTtcXG4gXFxuIHR5cGVkZWYgaW50ICgqc2N0cF9jYWxsYmFja190KShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdm9pZCAqKTtcXG4gdm9pZCBzY3RwX3RyYW5zcG9ydF93YWxrX3N0YXJ0KHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpO1xcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jXFxuaW5kZXggYzdiOWUzMjVlYzFjZDMuLjJkZWFhNDk4ZTZjZjg5IDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3NvY2tldC5jXFxuKysrIGIvbmV0L3NjdHAvc29ja2V0LmNcXG5AQCAtMjEyMyw5ICsyMTIzLDExIEBAIHN0YXRpYyBpbnQgc2N0cF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIFxcdTAwMjZlcnIpO1xcbi1cXHRpZiAoIXNrYilcXG4rXFx0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MpO1xcbitcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYidzIGluIHRoZVxcbiBcXHQgKiBmcmFnX2xpc3QuXFxuQEAgLTkwODIsNyArOTA4NCw3IEBAIHN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9wYWNrZXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmVyciwgbG9uZyAqdGltZW9fcClcXG4gICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uY1xcbiAgKiB3aXRoIGEgZmV3IGNoYW5nZXMgdG8gbWFrZSBsa3NjdHAgd29yay5cXG4gICovXFxuLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycilcXG4rc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbkBAIC05MTE3LDIxICs5MTE5LDE5IEBAIHN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycilcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRnb3RvIG5vX3BhY2tldDtcXG4gXFxuLVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG4rXFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIFVzZXIgZG9lc24ndCB3YW50IHRvIHdhaXQuICAqL1xcbiBcXHRcXHRlcnJvciA9IC1FQUdBSU47XFxuIFxcdFxcdGlmICghdGltZW8pXFxuIFxcdFxcdFxcdGdvdG8gbm9fcGFja2V0O1xcbi1cXHR9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgZXJyLCBcXHUwMDI2dGltZW8pID09IDApO1xcbi1cXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBcXHUwMDI2ZXJyb3IsIFxcdTAwMjZ0aW1lbykgPT0gMCk7XFxuIFxcbiBub19wYWNrZXQ6XFxuLVxcdCplcnIgPSBlcnJvcjtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4gfVxcbiBcXG4gLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscGV2ZW50LmMgYi9uZXQvc2N0cC91bHBldmVudC5jXFxuaW5kZXggODkyMGNhOTJhMDExNWMuLjIxYWUwYWRiYWVlZmJjIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmNcXG4rKysgYi9uZXQvc2N0cC91bHBldmVudC5jXFxuQEAgLTEwNjEsMTAgKzEwNjEsOSBAQCB2b2lkIHNjdHBfdWxwZXZlbnRfcmVhZF9ueHRpbmZvKGNvbnN0IHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdGludCBlcnI7XFxuIFxcbi1cXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCwgXFx1MDAyNmVycik7XFxuLVxcdGlmIChza2IgIT0gTlVMTCkge1xcbitcXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCk7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwoc2tiKSkge1xcbiBcXHRcXHRfX3NjdHBfdWxwZXZlbnRfcmVhZF9ueHRpbmZvKHNjdHBfc2tiMmV2ZW50KHNrYiksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgbXNnaGRyLCBza2IpO1xcbiBcXHRcXHQvKiBKdXN0IHJlbGVhc2UgcmVmY291bnQgaGVyZS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDI6MzcuMjI1MjcyMTEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUzNTU3ODgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9yZWN2bXNnXCIsXG4gICAgXCJzY3RwX3NrYl9yZWN2X2RhdGFncmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIHRvIHJldHVybiBFUlJfUFRSIGluc3RlYWQgb2YgTlVMTC4gSG93ZXZlciwgaW4gc2N0cF9yZWN2bXNnLCBpdCBjaGVja3MgSVNfRVJSKHNrYikgYnV0IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gY2FuIHN0aWxsIHJldHVybiBOVUxMIChFUlJfUFRSKDApKSB3aGVuIFJDVl9TSFVURE9XTiBpcyBzZXQsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gc2tiLVxcdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk4ZjdiNzQxZGIxZDVjMmVlMjk4NDhhZjI1ZmJjYzYwZTQxNGExMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTowMjozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmhcbmluZGV4IGQ1MGMyNzgxMjUwNGYzLi5iODZkNTBkNmIxNDY4OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaFxuQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBzY3RwX3NvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciBzY3RwX3NvY2tldHNfYWxsb2NhdGVkO1xuIGludCBzY3RwX2FzY29uZl9tZ210KHN0cnVjdCBzY3RwX3NvY2sgKiwgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKik7XG4tc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKiwgaW50LCBpbnQgKik7XG4rc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xuIFxuIHR5cGVkZWYgaW50ICgqc2N0cF9jYWxsYmFja190KShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdm9pZCAqKTtcbiB2b2lkIHNjdHBfdHJhbnNwb3J0X3dhbGtfc3RhcnQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuY1xuaW5kZXggYzdiOWUzMjVlYzFjZDMuLjJkZWFhNDk4ZTZjZjg5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc29ja2V0LmNcbisrKyBiL25ldC9zY3RwL3NvY2tldC5jXG5AQCAtMjEyMyw5ICsyMTIzLDExIEBAIHN0YXRpYyBpbnQgc2N0cF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzLCBcdTAwMjZlcnIpO1xuLVx0aWYgKCFza2IpXG4rXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyk7XG4rXHRpZiAoSVNfRVJSKHNrYikpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdC8qIEdldCB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBza2IgaW5jbHVkaW5nIGFueSBza2IncyBpbiB0aGVcbiBcdCAqIGZyYWdfbGlzdC5cbkBAIC05MDgyLDcgKzkwODQsNyBAQCBzdGF0aWMgaW50IHNjdHBfd2FpdF9mb3JfcGFja2V0KHN0cnVjdCBzb2NrICpzaywgaW50ICplcnIsIGxvbmcgKnRpbWVvX3ApXG4gICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uY1xuICAqIHdpdGggYSBmZXcgY2hhbmdlcyB0byBtYWtlIGxrc2N0cCB3b3JrLlxuICAqL1xuLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycilcbitzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTkxMTcsMjEgKzkxMTksMTkgQEAgc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsIGludCAqZXJyKVxuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0Z290byBub19wYWNrZXQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuK1x0XHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xuK1x0XHRcdGVycm9yID0gMDtcbiBcdFx0XHRicmVhaztcbi1cbitcdFx0fVxuIFxuIFx0XHQvKiBVc2VyIGRvZXNuJ3Qgd2FudCB0byB3YWl0LiAgKi9cbiBcdFx0ZXJyb3IgPSAtRUFHQUlOO1xuIFx0XHRpZiAoIXRpbWVvKVxuIFx0XHRcdGdvdG8gbm9fcGFja2V0O1xuLVx0fSB3aGlsZSAoc2N0cF93YWl0X2Zvcl9wYWNrZXQoc2ssIGVyciwgXHUwMDI2dGltZW8pID09IDApO1xuLVxuLVx0cmV0dXJuIE5VTEw7XG4rXHR9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgXHUwMDI2ZXJyb3IsIFx1MDAyNnRpbWVvKSA9PSAwKTtcbiBcbiBub19wYWNrZXQ6XG4tXHQqZXJyID0gZXJyb3I7XG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiB9XG4gXG4gLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbmluZGV4IDg5MjBjYTkyYTAxMTVjLi4yMWFlMGFkYmFlZWZiYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmNcbisrKyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbkBAIC0xMDYxLDEwICsxMDYxLDkgQEAgdm9pZCBzY3RwX3VscGV2ZW50X3JlYWRfbnh0aW5mbyhjb25zdCBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQsXG4gXHRcdFx0XHRzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cdGludCBlcnI7XG4gXG4tXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCwgXHUwMDI2ZXJyKTtcbi1cdGlmIChza2IgIT0gTlVMTCkge1xuK1x0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQpO1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKSB7XG4gXHRcdF9fc2N0cF91bHBldmVudF9yZWFkX254dGluZm8oc2N0cF9za2IyZXZlbnQoc2tiKSxcbiBcdFx0XHRcdFx0ICAgICBtc2doZHIsIHNrYik7XG4gXHRcdC8qIEp1c3QgcmVsZWFzZSByZWZjb3VudCBoZXJlLiAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDI6MzcuMjI1MjczNDkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyOTYwMjIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIFNvY2tldCBSZWNlaXZlIExvZ2ljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgbW9kaWZ5aW5nIHRoZSBTQ1RQIHNvY2tldCByZWNlaXZlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSd2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZnJvbSB0YWtpbmcgYW4gZXJyb3IgcG9pbnRlciB0byByZXR1cm5pbmcgYW4gYEVSUl9QVFIoZXJyb3IpYCBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgaG93IGVycm9ycyBhcmUgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb25zZXF1ZW5jZXMgYXJlIHVuZGVyc3Rvb2QuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGluIGBzY3RwX3JlY3Ztc2dgIGFuZCBgc2N0cF91bHBldmVudF9yZWFkX254dGluZm9gIHVzZWQgdGhlIG9sZCBzaWduYXR1cmUgd2l0aCB0aGUgZXJyb3IgcG9pbnRlci4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBlcnJvciBwb2ludGVyIHdpdGggY2hlY2tpbmcgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3Igd2l0aCB0aGUgYElTX0VSUmAgbWFjcm8uIFNvIHRoZSBsb2dpYyBub3cgY2hlY2tzIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGlzIGFuIGVycm9yIHBvaW50ZXIuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiV2FpdCwgaWYgaXQncyBhbHdheXMgcmV0dXJuaW5nIGFuIGVycm9yIHBvaW50ZXIgaW4gcGxhY2Ugb2YgTlVMTCwgdGhlbiB0aGUgY2hlY2sgbWFrZXMgc2Vuc2VcIi4gQnV0IHRoZW4gSSBkdWcgaW50byB0aGUgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGNvZGUgaXRzZWxmLiBUaGVyZSdzIGEgY2FzZSB3aGVyZSBgc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZS4gSW4gdGhpcyBjYXNlLCBpdCBzZXRzIGBlcnJvciA9IDBgIGFuZCBicmVha3MsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcmV0dXJuIGBFUlJfUFRSKDApYC4gTm93LCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgRVJSX1BUUigwKWAgKippcyoqIE5VTEwuIFNvLCB0aGUgZnVuY3Rpb24gY2FuIGFjdHVhbGx5IHJldHVybiBgTlVMTGAgaW4gdGhpcyBzY2VuYXJpbyEgYElTX0VSUihOVUxMKWAgaXMgZmFsc2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvZGUgaW4gYHNjdHBfcmVjdm1zZ2Agd2lsbCBwcm9jZWVkIGFzIHRob3VnaCBpdCBoYXMgYSB2YWxpZCBgc2tiYCB3aGVuIGl0IGRvZXNuJ3QuXG5cbkxvb2tpbmcgYXQgYHNjdHBfcmVjdm1zZ2AsIGlmIGBza2JgIGlzIGBOVUxMYCwgdGhlIGNvZGUgd2lsbCBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGl0IGJ5IGFjY2Vzc2luZyBgc2tiLVx1MDAzZWxlbmAuIFRoaXMgd2lsbCBsZWFkIHRvIGEgY3Jhc2ghIFRoYXQncyBhIGNyaXRpY2FsIGJ1ZyEgSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBpbW1lZGlhdGVseS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgYHNjdHBfcmVjdm1zZ2AgaXMgc3VwcG9zZWQgdG8gaGFuZGxlIHRoZSBgTlVMTGAgcmV0dXJuIG9yIHdoZXRoZXIgaXQncyBhbiBvdmVyc2lnaHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZW50aXJlIGBuZXQvc2N0cC9zb2NrZXQuY2AgZmlsZSB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAyOjQ3LjUyMTI5ODAzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTgzMjM4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NvY2tldC5jPTIwNTY9c3RhdGljIGludCBzY3RwX3NrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0yMDk3LSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjIwOTg6c3RhdGljIGludCBzY3RwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3NjdHAvc29ja2V0LmMtMjA5OS1cXHRcXHRcXHRpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz0zNDA5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2NvbnRleHQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMzQ1Ni0gKiBjb21lIGZyb20gYSBkaWZmZXJlbnQgYXNzb2NpYXRpb24gKHRodXMgdGhlIHVzZXIgbXVzdCByZWNlaXZlIGRhdGFcXG5uZXQvc2N0cC9zb2NrZXQuYzozNDU3OiAqIHdpdGggdGhlIGV4dGVuZGVkIGNhbGxzIChlLmcuIHNjdHBfcmVjdm1zZykgdG8ga2VlcCB0cmFjayBvZiB3aGljaFxcbm5ldC9zY3RwL3NvY2tldC5jLTM0NTgtICogYXNzb2NpYXRpb24gZWFjaCByZWNlaXZlIGJlbG9uZ3MgdG8uXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05NjU0PXN0cnVjdCBwcm90byBzY3RwX3Byb3QgPSB7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy05NjY3LVxcdC5zZW5kbXNnICAgICA9XFx0c2N0cF9zZW5kbXNnLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk2Njg6XFx0LnJlY3Ztc2cgICAgID1cXHRzY3RwX3JlY3Ztc2csXFxubmV0L3NjdHAvc29ja2V0LmMtOTY2OS1cXHQuYmluZCAgICAgICAgPVxcdHNjdHBfYmluZCxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTk3MDk9c3RydWN0IHByb3RvIHNjdHB2Nl9wcm90ID0ge1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtOTcyMi1cXHQuc2VuZG1zZ1xcdD0gc2N0cF9zZW5kbXNnLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk3MjM6XFx0LnJlY3Ztc2dcXHQ9IHNjdHBfcmVjdm1zZyxcXG5uZXQvc2N0cC9zb2NrZXQuYy05NzI0LVxcdC5iaW5kXFx0XFx0PSBzY3RwX2JpbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAyOjQ4LjAzOTYyOTc4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTQ5NjM4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2N0cF9yZWN2bXNnYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpc3NlY3QgYHNjdHBfcmVjdm1zZ2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvc2N0cC9zb2NrZXQuY2AgZmlsZSwgYXJvdW5kIGxpbmUgMjEyMy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyByZWNlaXZpbmcgU0NUUCBtZXNzYWdlcyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIHdhbnQgdG8gemVybyBpbiBvbiBpdHMgY29yZSBsb2dpYyDigJMgaG93IGl0IHB1bGxzIGRhdGEgZnJvbSB0aGUgdHJhbnNwb3J0LCBob3cgaXQgbWFuYWdlcyBtZXNzYWdlIGJvdW5kYXJpZXMsIHdoYXQgZXJyb3IgY29uZGl0aW9ucyBpdCBjaGVja3MgZm9yLCBhbmQgaG93IGl0IGRlbGl2ZXJzIHRoZSBkYXRhIHRvIHRoZSB1c2VyIHNwYWNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRoZSBmaWxlLCB3aGljaCB1c3VhbGx5IGluZm9ybXMgdGhlIGltcGxlbWVudGF0aW9uIGNob2ljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1Mi4zNTQ1OTYxNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjExMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjExMDpcXHRcXG4yMTExOlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuMjExMjpcXHRcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuMjExMzpcXHRcXG4yMTE0OlxcdFxcdGlmIChza19jYW5fYnVzeV9sb29wKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjIxMTU6XFx0XFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxcbjIxMTY6XFx0XFx0XFx0c2tfYnVzeV9sb29wKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMjExNzpcXHRcXG4yMTE4OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjExOTpcXHRcXG4yMTIwOlxcdFxcdGlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApIFxcdTAwMjZcXHUwMDI2ICFzY3RwX3NzdGF0ZShzaywgRVNUQUJMSVNIRUQpIFxcdTAwMjZcXHUwMDI2XFxuMjEyMTpcXHRcXHQgICAgIXNjdHBfc3N0YXRlKHNrLCBDTE9TSU5HKSBcXHUwMDI2XFx1MDAyNiAhc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpIHtcXG4yMTIyOlxcdFxcdFxcdGVyciA9IC1FTk9UQ09OTjtcXG4yMTIzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIxMjQ6XFx0XFx0fVxcbjIxMjU6XFx0XFxuMjEyNjpcXHRcXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyk7XFxuMjEyNzpcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4yMTI4OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4yMTI5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIxMzA6XFx0XFx0fVxcbjIxMzE6XFx0XFxuMjEzMjpcXHRcXHQvKiBHZXQgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgc2tiIGluY2x1ZGluZyBhbnkgc2tiJ3MgaW4gdGhlXFxuMjEzMzpcXHRcXHQgKiBmcmFnX2xpc3QuXFxuMjEzNDpcXHRcXHQgKi9cXG4yMTM1OlxcdFxcdHNrYl9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4yMTM2OlxcdFxcbjIxMzc6XFx0XFx0Y29waWVkID0gc2tiX2xlbjtcXG4yMTM4OlxcdFxcdGlmIChjb3BpZWQgXFx1MDAzZSBsZW4pXFxuMjEzOTpcXHRcXHRcXHRjb3BpZWQgPSBsZW47XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdGVyciA9IHNrYl9jb3B5X2RhdGFncmFtX21zZyhza2IsIDAsIG1zZywgY29waWVkKTtcXG4yMTQyOlxcdFxcbjIxNDM6XFx0XFx0ZXZlbnQgPSBzY3RwX3NrYjJldmVudChza2IpO1xcbjIxNDQ6XFx0XFxuMjE0NTpcXHRcXHRpZiAoZXJyKVxcbjIxNDY6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4yMTQ3OlxcdFxcbjIxNDg6XFx0XFx0aWYgKGV2ZW50LVxcdTAwM2VjaHVuayBcXHUwMDI2XFx1MDAyNiBldmVudC1cXHUwMDNlY2h1bmstXFx1MDAzZWhlYWRfc2tiKVxcbjIxNDk6XFx0XFx0XFx0aGVhZF9za2IgPSBldmVudC1cXHUwMDNlY2h1bmstXFx1MDAzZWhlYWRfc2tiO1xcbjIxNTA6XFx0XFx0ZWxzZVxcbjIxNTE6XFx0XFx0XFx0aGVhZF9za2IgPSBza2I7XFxuMjE1MjpcXHRcXHRzb2NrX3JlY3ZfY21zZ3MobXNnLCBzaywgaGVhZF9za2IpO1xcbjIxNTM6XFx0XFx0aWYgKHNjdHBfdWxwZXZlbnRfaXNfbm90aWZpY2F0aW9uKGV2ZW50KSkge1xcbjIxNTQ6XFx0XFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX05PVElGSUNBVElPTjtcXG4yMTU1OlxcdFxcdFxcdHNwLVxcdTAwM2VwZi1cXHUwMDNlZXZlbnRfbXNnbmFtZShldmVudCwgbXNnLVxcdTAwM2Vtc2dfbmFtZSwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX25hbWVsZW4pO1xcbjIxNTY6XFx0XFx0fSBlbHNlIHtcXG4yMTU3OlxcdFxcdFxcdHNwLVxcdTAwM2VwZi1cXHUwMDNlc2tiX21zZ25hbWUoaGVhZF9za2IsIG1zZy1cXHUwMDNlbXNnX25hbWUsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19uYW1lbGVuKTtcXG4yMTU4OlxcdFxcdH1cXG4yMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1Mi4zNTQ5OTYyNDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU0MTI1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKlRoZSBOdWxsIFNLQiBDb251bmRydW0qKlxuXG5XYWl0IGEgbWludXRlLi4uIGlmIHRoZSBgc2tiYCBwb2ludGVyIGlzIGFjdHVhbGx5IGBOVUxMYCwgdGhlbiBgSVNfRVJSKHNrYilgIGlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGBmYWxzZWAuIFRoYXQncyBub3QgZ29vZCwgYmVjYXVzZSB0aGVuIHRoZSBjb2RlIG1vdmVzIG9uIHRvIGBza2JfbGVuID0gc2tiLVx1MDAzZWxlbjtgLi4uIHdoaWNoIGlzIGdvaW5nIHRvIHRyeSBhbmQgZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIhIEknbSBwcmV0dHkgc3VyZSB0aGF0J3MgYSByZWNpcGUgZm9yIGEga2VybmVsIHBhbmljLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgc29tZSBzZXJpb3VzbHkgdW5kZWZpbmVkIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCB3ZSdyZSBoYW5kbGluZyB0aGUgY2FzZSBvZiBhIGBOVUxMIHNrYmAgY29ycmVjdGx5LiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGZ1bmN0aW9uIGFnYWluIGFuZCByZS1leGFtaW5lIHRoZSBsb2dpYywgbGluZSBieSBsaW5lLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUncyBhIGd1YXJkIGFnYWluc3QgdGhpcyBwb3NzaWJpbGl0eSwgb3IgaXQncyBhIGNyaXRpY2FsIGJ1Zy4gSSBjYW4ndCBiZWxpZXZlIEkgYWxtb3N0IG1pc3NlZCB0aGlzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1NS43MDkxMjQwNjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTA4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTA4MDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuOTA4MTpcXHR9XFxuOTA4MjpcXHRcXG45MDgzOlxcdC8qIFJlY2VpdmUgYSBkYXRhZ3JhbS5cXG45MDg0OlxcdCAqIE5vdGU6IFRoaXMgaXMgcHJldHR5IG11Y2ggdGhlIHNhbWUgcm91dGluZSBhcyBpbiBjb3JlL2RhdGFncmFtLmNcXG45MDg1OlxcdCAqIHdpdGggYSBmZXcgY2hhbmdlcyB0byBtYWtlIGxrc2N0cCB3b3JrLlxcbjkwODY6XFx0ICovXFxuOTA4NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG45MDg4OlxcdHtcXG45MDg5OlxcdFxcdGludCBlcnJvcjtcXG45MDkwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuOTA5MTpcXHRcXHRsb25nIHRpbWVvO1xcbjkwOTI6XFx0XFxuOTA5MzpcXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG45MDk0OlxcdFxcbjkwOTU6XFx0XFx0cHJfZGVidWcoXFxcIiVzOiB0aW1lbzolbGQsIG1heDolbGRcXFxcblxcXCIsIF9fZnVuY19fLCB0aW1lbyxcXG45MDk2OlxcdFxcdFxcdCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XFxuOTA5NzpcXHRcXG45MDk4OlxcdFxcdGRvIHtcXG45MDk5OlxcdFxcdFxcdC8qIEFnYWluIG9ubHkgdXNlciBsZXZlbCBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24sXFxuOTEwMDpcXHRcXHRcXHQgKiBzbyBub3RoaW5nIGludGVycnVwdCBsZXZlbFxcbjkxMDE6XFx0XFx0XFx0ICogd2lsbCBzdWRkZW5seSBlYXQgdGhlIHJlY2VpdmVfcXVldWUuXFxuOTEwMjpcXHRcXHRcXHQgKlxcbjkxMDM6XFx0XFx0XFx0ICogIExvb2sgYXQgY3VycmVudCBuZnMgY2xpZW50IGJ5IHRoZSB3YXkuLi5cXG45MTA0OlxcdFxcdFxcdCAqICBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdhcyBjb3JyZWN0IGluIGFueSBjYXNlLiA4KVxcbjkxMDU6XFx0XFx0XFx0ICovXFxuOTEwNjpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfUEVFSykge1xcbjkxMDc6XFx0XFx0XFx0XFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG45MTA4OlxcdFxcdFxcdFxcdGlmIChza2IpXFxuOTEwOTpcXHRcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpO1xcbjkxMTA6XFx0XFx0XFx0fSBlbHNlIHtcXG45MTExOlxcdFxcdFxcdFxcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG45MTEyOlxcdFxcdFxcdH1cXG45MTEzOlxcdFxcbjkxMTQ6XFx0XFx0XFx0aWYgKHNrYilcXG45MTE1OlxcdFxcdFxcdFxcdHJldHVybiBza2I7XFxuOTExNjpcXHRcXG45MTE3OlxcdFxcdFxcdC8qIENhbGxlciBpcyBhbGxvd2VkIG5vdCB0byBjaGVjayBzay1cXHUwMDNlc2tfZXJyIGJlZm9yZSBjYWxsaW5nLiAqL1xcbjkxMTg6XFx0XFx0XFx0ZXJyb3IgPSBzb2NrX2Vycm9yKHNrKTtcXG45MTE5OlxcdFxcdFxcdGlmIChlcnJvcilcXG45MTIwOlxcdFxcdFxcdFxcdGdvdG8gbm9fcGFja2V0O1xcbjkxMjE6XFx0XFxuOTEyMjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxuOTEyMzpcXHRcXHRcXHRcXHRlcnJvciA9IDA7XFxuOTEyNDpcXHRcXHRcXHRcXHRicmVhaztcXG45MTI1OlxcdFxcdFxcdH1cXG45MTI2OlxcdFxcbjkxMjc6XFx0XFx0XFx0LyogVXNlciBkb2Vzbid0IHdhbnQgdG8gd2FpdC4gICovXFxuOTEyODpcXHRcXHRcXHRlcnJvciA9IC1FQUdBSU47XFxuOTEyOTpcXHRcXHRcXHRpZiAoIXRpbWVvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1NS43MDk1NDc3NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA1MzkzNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24ncyBDb250cm9sIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBpZiBgc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZSwgdGhlIGxvb3AgKmltbWVkaWF0ZWx5KiBleGl0cy4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCBpdCB3b3VsZCBqdW1wIHRvIGBub19wYWNrZXQ6YCwgYnV0IG5vLCB0aGF0J3MgaW5jb3JyZWN0LiBJdCBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCB0aGUgKnZlcnkgbmV4dCogbGluZSBpcyB0aGUgYHJldHVybiBFUlJfUFRSKGVycm9yKTtgIHN0YXRlbWVudC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gT2theSwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gcmVhZCB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuIEkgY2FuJ3QganVtcCB0byBhbnkgYXNzdW1wdGlvbnMgeWV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTMxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1OS4wMTQ5NDM5MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgxODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkxMjA6XFx0XFx0XFx0XFx0Z290byBub19wYWNrZXQ7XFxuOTEyMTpcXHRcXG45MTIyOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG45MTIzOlxcdFxcdFxcdFxcdGVycm9yID0gMDtcXG45MTI0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjkxMjU6XFx0XFx0XFx0fVxcbjkxMjY6XFx0XFxuOTEyNzpcXHRcXHRcXHQvKiBVc2VyIGRvZXNuJ3Qgd2FudCB0byB3YWl0LiAgKi9cXG45MTI4OlxcdFxcdFxcdGVycm9yID0gLUVBR0FJTjtcXG45MTI5OlxcdFxcdFxcdGlmICghdGltZW8pXFxuOTEzMDpcXHRcXHRcXHRcXHRnb3RvIG5vX3BhY2tldDtcXG45MTMxOlxcdFxcdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBcXHUwMDI2ZXJyb3IsIFxcdTAwMjZ0aW1lbykgPT0gMCk7XFxuOTEzMjpcXHRcXG45MTMzOlxcdG5vX3BhY2tldDpcXG45MTM0OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG45MTM1OlxcdH1cXG45MTM2OlxcdFxcbjkxMzc6XFx0LyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXFxuOTEzODpcXHRzdGF0aWMgdm9pZCBfX3NjdHBfd3JpdGVfc3BhY2Uoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuOTEzOTpcXHR7XFxuOTE0MDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLVxcdTAwM2ViYXNlLnNrO1xcbjkxNDE6XFx0XFxuOTE0MjpcXHRcXHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXFx1MDAzYz0gMClcXG45MTQzOlxcdFxcdFxcdHJldHVybjtcXG45MTQ0OlxcdFxcbjkxNDU6XFx0XFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNmFzb2MtXFx1MDAzZXdhaXQpKVxcbjkxNDY6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZhc29jLVxcdTAwM2V3YWl0KTtcXG45MTQ3OlxcdFxcbjkxNDg6XFx0XFx0aWYgKHNjdHBfd3JpdGVhYmxlKHNrKSkge1xcbjkxNDk6XFx0XFx0XFx0c3RydWN0IHNvY2tldF93cSAqd3E7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAyOjU5LjAxNTMyODY0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODk5ODI1MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkEgQ3JpdGljYWwgU0NUUCBCdWcgRGlzY292ZXJlZCEqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyB0aHJvdWdoIHRoaXMgU0NUUCBjb2RlLCBhbmQgSSd2ZSBzdHVtYmxlZCB1cG9uIHNvbWV0aGluZyByYXRoZXIgbmFzdHkuIEl0IGxvb2tzIGxpa2UgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGJ1Zy4gTGV0IG1lIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0LCBJIHNlZSB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcblx0XHRcdGVycm9yID0gMDtcblx0XHRcdGJyZWFrO1xuXHRcdH1cbmBgYFxuXG5JZiBgc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZSwgaW5kaWNhdGluZyBhIHNodXRkb3duIG9uIHRoZSByZWNlaXZlIHNpZGUsIHRoZSBsb29wIGJyZWFrcywgYW5kIGBlcnJvcmAgaXMgc2V0IHRvIDAuIE5vdywgdGhpcyBmZWVkcyBpbnRvIHRoZSBgbm9fcGFja2V0YCBsYWJlbCwgd2hpY2ggcmV0dXJucyBgRVJSX1BUUihlcnJvcilgLiBJbiB0aGlzIGNhc2UgdGhhdCdzIGBFUlJfUFRSKDApYCwgd2hpY2ggZXZhbHVhdGVzIHRvIGBOVUxMYC5cblxuVGhlIHByb2JsZW0/IGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBjYW4gcmV0dXJuIGBOVUxMYC4gVGhpcyBpcyBmaW5lLCB0aGF0J3MgYSB2YWxpZCByZXR1cm4gZm9yIGFuIGVtcHR5IHF1ZXVlIHdoZW4gc2h1dCBkb3duLCBvciBhbiBlcnJvci4gSG93ZXZlciwgYHNjdHBfcmVjdm1zZ2AgKmNhbGxzKiB0aGlzOlxuXG5gYGBjXG5cdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzKTtcblx0aWYgKElTX0VSUihza2IpKSB7XG5cdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuXHRcdGdvdG8gb3V0O1xuXHR9XG5cblx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYidzIGluIHRoZVxuXHQgKiBmcmFnX2xpc3QuXG5cdCAqL1xuXHRza2JfbGVuID0gc2tiLVx1MDAzZWxlbjtcbmBgYFxuXG5IZXJlJ3MgdGhlIGtpY2tlcjogSWYgYHNrYmAgaXMgYE5VTExgLCBgSVNfRVJSKHNrYilgIGlzIGZhbHNlLiBUaGF0IG1lYW5zIGl0ICpza2lwcyogdGhlIGVycm9yIGNoZWNrIGFuZCBkZXJlZmVyZW5jZXMgdGhlIGBza2ItXHUwMDNlbGVuYC4gQm9vbSEgTnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBhIGNyYXNoLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgbmV3LCBpdCB1c2VkIHRvIGxvb2sgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzLCBcdTAwMjZlcnIpO1xuXHRpZiAoIXNrYilcblx0XHRnb3RvIG91dDtcbmBgYFxuXG5TbyBwcmV2aW91c2x5IGEgYE5VTExgIHdvdWxkIGBnb3RvIG91dGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuSSBkb3VibGUtY2hlY2tlZCBgc2N0cF91bHBldmVudF9yZWFkX254dGluZm9gLCBhbmQgdGhhdCBjb2RlICpjb3JyZWN0bHkqIHVzZXMgYCFJU19FUlJfT1JfTlVMTChza2IpYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8uIFNvIGl0IGNvcnJlY3RseSBoYW5kbGVzIE5VTEwuXG5cbkkgYWxzbyBjaGVja2VkIGBJU19FUlJgIGFnYWluIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIHdhcyBjb3JyZWN0LiBgSVNfRVJSKE5VTEwpYCBpcyBmYWxzZSwgYXMgZXhwZWN0ZWQuXG5cblNvLCBpbiBzaG9ydDogYHNjdHBfcmVjdm1zZ2AgKndpbGwqIGNyYXNoIHdoZW4gYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIHJldHVybnMgYE5VTExgLiBJdCByZXR1cm5zIGBOVUxMYCB3aGVuIGBzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOYCBpcyBzZXQgKmFuZCogdGhlIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuIFRoaXMgaXMgZWFzaWx5IHJlYWNoYWJsZS4gSXQgd2lsbCBjcmFzaCBvbiB0aGUgYHNrYi1cdTAwM2VsZW5gIGRlcmVmZXJlbmNlLlxuXG5JJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1Zy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgb24gYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYC4gVGhlIHRhcmdldCBjb25maWcgc2hvdWxkIGJlIGBJUF9TQ1RQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAzOjA4LjkxNTE1NjIwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNDUzNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TQ1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvS2NvbmZpZy01LVxcbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMzowOS4zMzY2MTM4MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MzIwNjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgY29uZmlnIEknbSB3b3JraW5nIHdpdGggaXMgYElQX1NDVFBgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIG9ubHkgb25lIGluIHBsYXkuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGVyZSBjb3VsZCBiZSByZWxhdGVkIG9yIG92ZXJsYXBwaW5nIHNldHRpbmdzIEkgbmVlZCB0byBjb25zaWRlciwgb3IgZXZlbiBjb25mbGljdGluZyBvbmVzLiBUaGlzIGluaXRpYWwgY29uZmlndXJhdGlvbiBtaWdodCBiZSBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIGEgYmlnZ2VyIHBpY3R1cmUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cy4gRGlnZ2luZyBkZWVwZXIgaXMgYWx3YXlzIHRoZSBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDM6MTIuMjI5ODIxOTY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2MTQ2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnPTM5PWlmIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTQwLVxcbm5ldC9zY3RwL0tjb25maWc6NDE6Y29uZmlnIFNDVFBfREJHX09CSkNOVFxcbm5ldC9zY3RwL0tjb25maWctNDItXFx0Ym9vbCBcXFwiU0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1xcXCJcXG4tLVxcbm5ldC9zY3RwL0tjb25maWc9NTI9Y2hvaWNlXFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnLTYxLVxcbm5ldC9zY3RwL0tjb25maWc6NjI6Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcXG5uZXQvc2N0cC9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIkhNQUMtU0hBMjU2XFxcIlxcbm5ldC9zY3RwL0tjb25maWctNjQtXFxubmV0L3NjdHAvS2NvbmZpZzo2NTpjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcXG5uZXQvc2N0cC9LY29uZmlnLTY2LVxcdGJvb2wgXFxcIk5vbmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAzOjEyLjMzMTQ0MDc0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgxMzA1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBvYnZpb3VzbHkgYElQX1NDVFBgLiBJdCdzIHdoYXQgZHJpdmVzIHRoaXMgd2hvbGUgdGhpbmcuIE5vdywgdGhlIG1lYXQgb2YgdGhlIG1hdHRlci4uLlxuXG5Fc3NlbnRpYWxseSwgdGhlcmUncyBhIHBhdGNoIHRoYXQgYWx0ZXJzIHRoZSByZXR1cm4gYmVoYXZpb3Igb2YgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gLiBJdCdzIG5vdyBnb2luZyB0byByZXR1cm4gYEVSUl9QVFJgIGluc3RlYWQgb2YgYE5VTExgLiBUaGUgaXNzdWUgYXJpc2VzIGluIGBzY3RwX3JlY3Ztc2dgLCB3aGVyZSB0aGUgY29kZSBjaGVja3MgZm9yIGBJU19FUlIoc2tiKWAuIEhvd2V2ZXIsIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCAqY2FuKiBzdGlsbCByZXR1cm4gYE5VTExgIOKAkyBzcGVjaWZpY2FsbHksIGBFUlJfUFRSKDApYCDigJMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBuYW1lbHkgd2hlbiBgUkNWX1NIVVRET1dOYCBpcyBzZXQuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IG9uIGBza2ItXHUwMDNlbGVuYC5cblxuVGhlcmVmb3JlLCB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgaW50cm9kdWNlcyBhIGJ1ZywgYW5kIGl0IGlzIGEgYnVnIHRoYXQgd2Ugc2hvdWxkIGFic29sdXRlbHkgdGFyZ2V0IGZvciBmdXp6aW5nLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRoYXQgbmVlZCB0byBiZSBpbiBmb2N1cyBhcmUgYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc2V0IHVwIHRvIGluY2x1ZGUgXCJJUF9TQ1RQXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTMsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAzOjE3LjYxMjc0ODYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDk0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9yZWN2bXNnXCIsXG4gICAgXCJzY3RwX3NrYl9yZWN2X2RhdGFncmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIHRvIHJldHVybiBFUlJfUFRSIGluc3RlYWQgb2YgTlVMTC4gSG93ZXZlciwgaW4gc2N0cF9yZWN2bXNnLCBpdCBjaGVja3MgSVNfRVJSKHNrYikgYnV0IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gY2FuIHN0aWxsIHJldHVybiBOVUxMIChFUlJfUFRSKDApKSB3aGVuIFJDVl9TSFVURE9XTiBpcyBzZXQsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gc2tiLVxcdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3JlY3Ztc2dcIixcbiAgICBcInNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXFx1MDAzZWxlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhIGJ1ZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 08:41:47 +0000 UTC FinishedAt: 2026-07-20 09:03:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e13caf1c26587434f0b768193100440939c0fb91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e13caf1c26587434f0b768193100440939c0fb91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "f979ded9-9743-486d-b911-69a904c9f4ad" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_recvmsg", "sctp_skb_recv_datagram" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7c2N0cF9za2JfcmVjdl9kYXRhZ3JhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXHUwMDNlbGVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGEgYnVnIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk4ZjdiNzQxZGIxZDVjMmVlMjk4NDhhZjI1ZmJjYzYwZTQxNGExMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTowMjozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXG5pbmRleCBkNTBjMjc4MTI1MDRmMy4uYjg2ZDUwZDZiMTQ2ODggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmhcbkBAIC05Nyw3ICYjNDM7OTcsNyBAQCB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiBleHRlcm4gc3RydWN0IHBlcmNwdV9jb3VudGVyIHNjdHBfc29ja2V0c19hbGxvY2F0ZWQ7XG4gaW50IHNjdHBfYXNjb25mX21nbXQoc3RydWN0IHNjdHBfc29jayAqLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqKTtcbi1zdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqLCBpbnQsIGludCAqKTtcbiYjNDM7c3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xuIFxuIHR5cGVkZWYgaW50ICgqc2N0cF9jYWxsYmFja190KShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdm9pZCAqKTtcbiB2b2lkIHNjdHBfdHJhbnNwb3J0X3dhbGtfc3RhcnQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuY1xuaW5kZXggYzdiOWUzMjVlYzFjZDMuLjJkZWFhNDk4ZTZjZjg5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NvY2tldC5jXG5AQCAtMjEyMyw5ICYjNDM7MjEyMywxMSBAQCBzdGF0aWMgaW50IHNjdHBfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncywgXHUwMDI2ZXJyKTtcbi1cdGlmICghc2tiKVxuJiM0MztcdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHNrYikpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYiYjMzk7cyBpbiB0aGVcbiBcdCAqIGZyYWdfbGlzdC5cbkBAIC05MDgyLDcgJiM0Mzs5MDg0LDcgQEAgc3RhdGljIGludCBzY3RwX3dhaXRfZm9yX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIGludCAqZXJyLCBsb25nICp0aW1lb19wKVxuICAqIE5vdGU6IFRoaXMgaXMgcHJldHR5IG11Y2ggdGhlIHNhbWUgcm91dGluZSBhcyBpbiBjb3JlL2RhdGFncmFtLmNcbiAgKiB3aXRoIGEgZmV3IGNoYW5nZXMgdG8gbWFrZSBsa3NjdHAgd29yay5cbiAgKi9cbi1zdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncywgaW50ICplcnIpXG4mIzQzO3N0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtOTExNywyMSAmIzQzOzkxMTksMTkgQEAgc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsIGludCAqZXJyKVxuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0Z290byBub19wYWNrZXQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSAwO1xuIFx0XHRcdGJyZWFrO1xuLVxuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBVc2VyIGRvZXNuJiMzOTt0IHdhbnQgdG8gd2FpdC4gICovXG4gXHRcdGVycm9yID0gLUVBR0FJTjtcbiBcdFx0aWYgKCF0aW1lbylcbiBcdFx0XHRnb3RvIG5vX3BhY2tldDtcbi1cdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBlcnIsIFx1MDAyNnRpbWVvKSA9PSAwKTtcbi1cbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBcdTAwMjZlcnJvciwgXHUwMDI2dGltZW8pID09IDApO1xuIFxuIG5vX3BhY2tldDpcbi1cdCplcnIgPSBlcnJvcjtcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiB9XG4gXG4gLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbmluZGV4IDg5MjBjYTkyYTAxMTVjLi4yMWFlMGFkYmFlZWZiYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbkBAIC0xMDYxLDEwICYjNDM7MTA2MSw5IEBAIHZvaWQgc2N0cF91bHBldmVudF9yZWFkX254dGluZm8oY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50LFxuIFx0XHRcdFx0c3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRpbnQgZXJyO1xuIFxuLVx0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG4tXHRpZiAoc2tiICE9IE5VTEwpIHtcbiYjNDM7XHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCk7XG4mIzQzO1x0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKSB7XG4gXHRcdF9fc2N0cF91bHBldmVudF9yZWFkX254dGluZm8oc2N0cF9za2IyZXZlbnQoc2tiKSxcbiBcdFx0XHRcdFx0ICAgICBtc2doZHIsIHNrYik7XG4gXHRcdC8qIEp1c3QgcmVsZWFzZSByZWZjb3VudCBoZXJlLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7c2N0cF9za2JfcmVjdl9kYXRhZ3JhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXHUwMDNlbGVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGEgYnVnIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOThmN2I3NDFkYjFkNWMyZWUyOTg0OGFmMjVmYmNjNjBlNDE0YTEyNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDA5OjAyOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCBkNTBjMjc4MTI1MDRmMy4uYjg2ZDUwZDZiMTQ2ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC05Nyw3ICYjNDM7OTcsNyBAQCB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciBzY3RwX3NvY2tldHNfYWxsb2NhdGVkOwogaW50IHNjdHBfYXNjb25mX21nbXQoc3RydWN0IHNjdHBfc29jayAqLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqKTsKLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICosIGludCwgaW50ICopOwomIzQzO3N0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKIAogdHlwZWRlZiBpbnQgKCpzY3RwX2NhbGxiYWNrX3QpKHN0cnVjdCBzY3RwX2VuZHBvaW50ICosIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqLCB2b2lkICopOwogdm9pZCBzY3RwX3RyYW5zcG9ydF93YWxrX3N0YXJ0KHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBjN2I5ZTMyNWVjMWNkMy4uMmRlYWE0OThlNmNmODkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0yMTIzLDkgJiM0MzsyMTIzLDExIEBAIHN0YXRpYyBpbnQgc2N0cF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQlnb3RvIG91dDsKIAl9CiAKLQlza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncywgJmFtcDtlcnIpOwotCWlmICghc2tiKQomIzQzOwlza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyk7CiYjNDM7CWlmIChJU19FUlIoc2tiKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihza2IpOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJLyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYiYjMzk7cyBpbiB0aGUKIAkgKiBmcmFnX2xpc3QuCkBAIC05MDgyLDcgJiM0Mzs5MDg0LDcgQEAgc3RhdGljIGludCBzY3RwX3dhaXRfZm9yX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIGludCAqZXJyLCBsb25nICp0aW1lb19wKQogICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uYwogICogd2l0aCBhIGZldyBjaGFuZ2VzIHRvIG1ha2UgbGtzY3RwIHdvcmsuCiAgKi8KLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycikKJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKIHsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTkxMTcsMjEgJiM0Mzs5MTE5LDE5IEBAIHN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycikKIAkJaWYgKGVycm9yKQogCQkJZ290byBub19wYWNrZXQ7CiAKLQkJaWYgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV04pCiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCWVycm9yID0gMDsKIAkJCWJyZWFrOwotCiYjNDM7CQl9CiAKIAkJLyogVXNlciBkb2VzbiYjMzk7dCB3YW50IHRvIHdhaXQuICAqLwogCQllcnJvciA9IC1FQUdBSU47CiAJCWlmICghdGltZW8pCiAJCQlnb3RvIG5vX3BhY2tldDsKLQl9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgZXJyLCAmYW1wO3RpbWVvKSA9PSAwKTsKLQotCXJldHVybiBOVUxMOwomIzQzOwl9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgJmFtcDtlcnJvciwgJmFtcDt0aW1lbykgPT0gMCk7CiAKIG5vX3BhY2tldDoKLQkqZXJyID0gZXJyb3I7Ci0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KIAogLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC91bHBldmVudC5jIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwppbmRleCA4OTIwY2E5MmEwMTE1Yy4uMjFhZTBhZGJhZWVmYmMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvdWxwZXZlbnQuYwpAQCAtMTA2MSwxMCAmIzQzOzEwNjEsOSBAQCB2b2lkIHNjdHBfdWxwZXZlbnRfcmVhZF9ueHRpbmZvKGNvbnN0IHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCwKIAkJCQlzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgZXJyOwogCi0Jc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQsICZhbXA7ZXJyKTsKLQlpZiAoc2tiICE9IE5VTEwpIHsKJiM0MzsJc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQpOwomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpIHsKIAkJX19zY3RwX3VscGV2ZW50X3JlYWRfbnh0aW5mbyhzY3RwX3NrYjJldmVudChza2IpLAogCQkJCQkgICAgIG1zZ2hkciwgc2tiKTsKIAkJLyogSnVzdCByZWxlYXNlIHJlZmNvdW50IGhlcmUuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIFNvY2tldCBSZWNlaXZlIExvZ2ljIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBTQ1RQIHNvY2tldCByZWNlaXZlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZyb20gdGFraW5nIGFuIGVycm9yIHBvaW50ZXIgdG8gcmV0dXJuaW5nIGFuIGBFUlJfUFRSKGVycm9yKWAgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29uc2VxdWVuY2VzIGFyZSB1bmRlcnN0b29kLgoKVGhlIG9yaWdpbmFsIGNvZGUgaW4gYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3VscGV2ZW50X3JlYWRfbnh0aW5mb2AgdXNlZCB0aGUgb2xkIHNpZ25hdHVyZSB3aXRoIHRoZSBlcnJvciBwb2ludGVyLiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGVycm9yIHBvaW50ZXIgd2l0aCBjaGVja2luZyBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciB3aXRoIHRoZSBgSVNfRVJSYCBtYWNyby4gU28gdGhlIGxvZ2ljIG5vdyBjaGVja3MgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAgaXMgYW4gZXJyb3IgcG9pbnRlci4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7V2FpdCwgaWYgaXQmIzM5O3MgYWx3YXlzIHJldHVybmluZyBhbiBlcnJvciBwb2ludGVyIGluIHBsYWNlIG9mIE5VTEwsIHRoZW4gdGhlIGNoZWNrIG1ha2VzIHNlbnNlJiMzNDsuIEJ1dCB0aGVuIEkgZHVnIGludG8gdGhlIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBjb2RlIGl0c2VsZi4gVGhlcmUmIzM5O3MgYSBjYXNlIHdoZXJlIGBzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOYCBpcyB0cnVlLiBJbiB0aGlzIGNhc2UsIGl0IHNldHMgYGVycm9yID0gMGAgYW5kIGJyZWFrcywgd2hpY2ggbWVhbnMgaXQgd2lsbCByZXR1cm4gYEVSUl9QVFIoMClgLiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBFUlJfUFRSKDApYCAqKmlzKiogTlVMTC4gU28sIHRoZSBmdW5jdGlvbiBjYW4gYWN0dWFsbHkgcmV0dXJuIGBOVUxMYCBpbiB0aGlzIHNjZW5hcmlvISBgSVNfRVJSKE5VTEwpYCBpcyBmYWxzZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY29kZSBpbiBgc2N0cF9yZWN2bXNnYCB3aWxsIHByb2NlZWQgYXMgdGhvdWdoIGl0IGhhcyBhIHZhbGlkIGBza2JgIHdoZW4gaXQgZG9lc24mIzM5O3QuCgpMb29raW5nIGF0IGBzY3RwX3JlY3Ztc2dgLCBpZiBgc2tiYCBpcyBgTlVMTGAsIHRoZSBjb2RlIHdpbGwgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZSBpdCBieSBhY2Nlc3NpbmcgYHNrYi0mZ3Q7bGVuYC4gVGhpcyB3aWxsIGxlYWQgdG8gYSBjcmFzaCEgVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGJ1ZyEgSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgaW1tZWRpYXRlbHkuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgc2N0cF9yZWN2bXNnYCBpcyBzdXBwb3NlZCB0byBoYW5kbGUgdGhlIGBOVUxMYCByZXR1cm4gb3Igd2hldGhlciBpdCYjMzk7cyBhbiBvdmVyc2lnaHQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGVudGlyZSBgbmV0L3NjdHAvc29ja2V0LmNgIGZpbGUgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmM9MjA1Nj1zdGF0aWMgaW50IHNjdHBfc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0yMDk3LSAqL1xubmV0L3NjdHAvc29ja2V0LmM6MjA5ODpzdGF0aWMgaW50IHNjdHBfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9zY3RwL3NvY2tldC5jLTIwOTktXHRcdFx0aW50IGZsYWdzKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTM0MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfY29udGV4dChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMzQ1Ni0gKiBjb21lIGZyb20gYSBkaWZmZXJlbnQgYXNzb2NpYXRpb24gKHRodXMgdGhlIHVzZXIgbXVzdCByZWNlaXZlIGRhdGFcbm5ldC9zY3RwL3NvY2tldC5jOjM0NTc6ICogd2l0aCB0aGUgZXh0ZW5kZWQgY2FsbHMgKGUuZy4gc2N0cF9yZWN2bXNnKSB0byBrZWVwIHRyYWNrIG9mIHdoaWNoXG5uZXQvc2N0cC9zb2NrZXQuYy0zNDU4LSAqIGFzc29jaWF0aW9uIGVhY2ggcmVjZWl2ZSBiZWxvbmdzIHRvLlxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTk2NTQ9c3RydWN0IHByb3RvIHNjdHBfcHJvdCA9IHtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy05NjY3LVx0LnNlbmRtc2cgICAgID1cdHNjdHBfc2VuZG1zZyxcbm5ldC9zY3RwL3NvY2tldC5jOjk2Njg6XHQucmVjdm1zZyAgICAgPVx0c2N0cF9yZWN2bXNnLFxubmV0L3NjdHAvc29ja2V0LmMtOTY2OS1cdC5iaW5kICAgICAgICA9XHRzY3RwX2JpbmQsXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTcwOT1zdHJ1Y3QgcHJvdG8gc2N0cHY2X3Byb3QgPSB7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTcyMi1cdC5zZW5kbXNnXHQ9IHNjdHBfc2VuZG1zZyxcbm5ldC9zY3RwL3NvY2tldC5jOjk3MjM6XHQucmVjdm1zZ1x0PSBzY3RwX3JlY3Ztc2csXG5uZXQvc2N0cC9zb2NrZXQuYy05NzI0LVx0LmJpbmRcdFx0PSBzY3RwX2JpbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgY29uc2lkZXJpbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBgc2N0cF9yZWN2bXNnYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZGlzc2VjdCBgc2N0cF9yZWN2bXNnYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9zY3RwL3NvY2tldC5jYCBmaWxlLCBhcm91bmQgbGluZSAyMTIzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHJlY2VpdmluZyBTQ1RQIG1lc3NhZ2VzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkgd2FudCB0byB6ZXJvIGluIG9uIGl0cyBjb3JlIGxvZ2ljIOKAkyBob3cgaXQgcHVsbHMgZGF0YSBmcm9tIHRoZSB0cmFuc3BvcnQsIGhvdyBpdCBtYW5hZ2VzIG1lc3NhZ2UgYm91bmRhcmllcywgd2hhdCBlcnJvciBjb25kaXRpb25zIGl0IGNoZWNrcyBmb3IsIGFuZCBob3cgaXQgZGVsaXZlcnMgdGhlIGRhdGEgdG8gdGhlIHVzZXIgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRoZSBmaWxlLCB3aGljaCB1c3VhbGx5IGluZm9ybXMgdGhlIGltcGxlbWVudGF0aW9uIGNob2ljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjExMDpcdFxuMjExMTpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuMjExMjpcdFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG4yMTEzOlx0XG4yMTE0Olx0XHRpZiAoc2tfY2FuX2J1c3lfbG9vcChzaykgXHUwMDI2XHUwMDI2XG4yMTE1Olx0XHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxuMjExNjpcdFx0XHRza19idXN5X2xvb3Aoc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMjExNzpcdFxuMjExODpcdFx0bG9ja19zb2NrKHNrKTtcbjIxMTk6XHRcbjIxMjA6XHRcdGlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApIFx1MDAyNlx1MDAyNiAhc2N0cF9zc3RhdGUoc2ssIEVTVEFCTElTSEVEKSBcdTAwMjZcdTAwMjZcbjIxMjE6XHRcdCAgICAhc2N0cF9zc3RhdGUoc2ssIENMT1NJTkcpIFx1MDAyNlx1MDAyNiAhc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpIHtcbjIxMjI6XHRcdFx0ZXJyID0gLUVOT1RDT05OO1xuMjEyMzpcdFx0XHRnb3RvIG91dDtcbjIxMjQ6XHRcdH1cbjIxMjU6XHRcbjIxMjY6XHRcdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzKTtcbjIxMjc6XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMjEyODpcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4yMTI5Olx0XHRcdGdvdG8gb3V0O1xuMjEzMDpcdFx0fVxuMjEzMTpcdFxuMjEzMjpcdFx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYiYjMzk7cyBpbiB0aGVcbjIxMzM6XHRcdCAqIGZyYWdfbGlzdC5cbjIxMzQ6XHRcdCAqL1xuMjEzNTpcdFx0c2tiX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4yMTM2Olx0XG4yMTM3Olx0XHRjb3BpZWQgPSBza2JfbGVuO1xuMjEzODpcdFx0aWYgKGNvcGllZCBcdTAwM2UgbGVuKVxuMjEzOTpcdFx0XHRjb3BpZWQgPSBsZW47XG4yMTQwOlx0XG4yMTQxOlx0XHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCAwLCBtc2csIGNvcGllZCk7XG4yMTQyOlx0XG4yMTQzOlx0XHRldmVudCA9IHNjdHBfc2tiMmV2ZW50KHNrYik7XG4yMTQ0Olx0XG4yMTQ1Olx0XHRpZiAoZXJyKVxuMjE0NjpcdFx0XHRnb3RvIG91dF9mcmVlO1xuMjE0NzpcdFxuMjE0ODpcdFx0aWYgKGV2ZW50LVx1MDAzZWNodW5rIFx1MDAyNlx1MDAyNiBldmVudC1cdTAwM2VjaHVuay1cdTAwM2VoZWFkX3NrYilcbjIxNDk6XHRcdFx0aGVhZF9za2IgPSBldmVudC1cdTAwM2VjaHVuay1cdTAwM2VoZWFkX3NrYjtcbjIxNTA6XHRcdGVsc2VcbjIxNTE6XHRcdFx0aGVhZF9za2IgPSBza2I7XG4yMTUyOlx0XHRzb2NrX3JlY3ZfY21zZ3MobXNnLCBzaywgaGVhZF9za2IpO1xuMjE1MzpcdFx0aWYgKHNjdHBfdWxwZXZlbnRfaXNfbm90aWZpY2F0aW9uKGV2ZW50KSkge1xuMjE1NDpcdFx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19OT1RJRklDQVRJT047XG4yMTU1Olx0XHRcdHNwLVx1MDAzZXBmLVx1MDAzZWV2ZW50X21zZ25hbWUoZXZlbnQsIG1zZy1cdTAwM2Vtc2dfbmFtZSwgXHUwMDI2bXNnLVx1MDAzZW1zZ19uYW1lbGVuKTtcbjIxNTY6XHRcdH0gZWxzZSB7XG4yMTU3Olx0XHRcdHNwLVx1MDAzZXBmLVx1MDAzZXNrYl9tc2duYW1lKGhlYWRfc2tiLCBtc2ctXHUwMDNlbXNnX25hbWUsIFx1MDAyNm1zZy1cdTAwM2Vtc2dfbmFtZWxlbik7XG4yMTU4Olx0XHR9XG4yMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipUaGUgTnVsbCBTS0IgQ29udW5kcnVtKioKCldhaXQgYSBtaW51dGUuLi4gaWYgdGhlIGBza2JgIHBvaW50ZXIgaXMgYWN0dWFsbHkgYE5VTExgLCB0aGVuIGBJU19FUlIoc2tiKWAgaXMgZ29pbmcgdG8gZXZhbHVhdGUgdG8gYGZhbHNlYC4gVGhhdCYjMzk7cyBub3QgZ29vZCwgYmVjYXVzZSB0aGVuIHRoZSBjb2RlIG1vdmVzIG9uIHRvIGBza2JfbGVuID0gc2tiLSZndDtsZW47YC4uLiB3aGljaCBpcyBnb2luZyB0byB0cnkgYW5kIGRlcmVmZXJlbmNlIGEgbnVsbCBwb2ludGVyISBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSByZWNpcGUgZm9yIGEga2VybmVsIHBhbmljLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgc29tZSBzZXJpb3VzbHkgdW5kZWZpbmVkIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGNhc2Ugb2YgYSBgTlVMTCBza2JgIGNvcnJlY3RseS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAgZnVuY3Rpb24gYWdhaW4gYW5kIHJlLWV4YW1pbmUgdGhlIGxvZ2ljLCBsaW5lIGJ5IGxpbmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBhIGd1YXJkIGFnYWluc3QgdGhpcyBwb3NzaWJpbGl0eSwgb3IgaXQmIzM5O3MgYSBjcml0aWNhbCBidWcuIEkgY2FuJiMzOTt0IGJlbGlldmUgSSBhbG1vc3QgbWlzc2VkIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTA4MDpcdFx0cmV0dXJuIGVycm9yO1xuOTA4MTpcdH1cbjkwODI6XHRcbjkwODM6XHQvKiBSZWNlaXZlIGEgZGF0YWdyYW0uXG45MDg0Olx0ICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uY1xuOTA4NTpcdCAqIHdpdGggYSBmZXcgY2hhbmdlcyB0byBtYWtlIGxrc2N0cCB3b3JrLlxuOTA4NjpcdCAqL1xuOTA4NzpcdHN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuOTA4ODpcdHtcbjkwODk6XHRcdGludCBlcnJvcjtcbjkwOTA6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG45MDkxOlx0XHRsb25nIHRpbWVvO1xuOTA5MjpcdFxuOTA5MzpcdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjkwOTQ6XHRcbjkwOTU6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiB0aW1lbzolbGQsIG1heDolbGRcXG5cJiMzNDssIF9fZnVuY19fLCB0aW1lbyxcbjkwOTY6XHRcdFx0IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbjkwOTc6XHRcbjkwOTg6XHRcdGRvIHtcbjkwOTk6XHRcdFx0LyogQWdhaW4gb25seSB1c2VyIGxldmVsIGNvZGUgY2FsbHMgdGhpcyBmdW5jdGlvbixcbjkxMDA6XHRcdFx0ICogc28gbm90aGluZyBpbnRlcnJ1cHQgbGV2ZWxcbjkxMDE6XHRcdFx0ICogd2lsbCBzdWRkZW5seSBlYXQgdGhlIHJlY2VpdmVfcXVldWUuXG45MTAyOlx0XHRcdCAqXG45MTAzOlx0XHRcdCAqICBMb29rIGF0IGN1cnJlbnQgbmZzIGNsaWVudCBieSB0aGUgd2F5Li4uXG45MTA0Olx0XHRcdCAqICBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdhcyBjb3JyZWN0IGluIGFueSBjYXNlLiA4KVxuOTEwNTpcdFx0XHQgKi9cbjkxMDY6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykge1xuOTEwNzpcdFx0XHRcdHNrYiA9IHNrYl9wZWVrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuOTEwODpcdFx0XHRcdGlmIChza2IpXG45MTA5Olx0XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKTtcbjkxMTA6XHRcdFx0fSBlbHNlIHtcbjkxMTE6XHRcdFx0XHRza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuOTExMjpcdFx0XHR9XG45MTEzOlx0XG45MTE0Olx0XHRcdGlmIChza2IpXG45MTE1Olx0XHRcdFx0cmV0dXJuIHNrYjtcbjkxMTY6XHRcbjkxMTc6XHRcdFx0LyogQ2FsbGVyIGlzIGFsbG93ZWQgbm90IHRvIGNoZWNrIHNrLVx1MDAzZXNrX2VyciBiZWZvcmUgY2FsbGluZy4gKi9cbjkxMTg6XHRcdFx0ZXJyb3IgPSBzb2NrX2Vycm9yKHNrKTtcbjkxMTk6XHRcdFx0aWYgKGVycm9yKVxuOTEyMDpcdFx0XHRcdGdvdG8gbm9fcGFja2V0O1xuOTEyMTpcdFxuOTEyMjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xuOTEyMzpcdFx0XHRcdGVycm9yID0gMDtcbjkxMjQ6XHRcdFx0XHRicmVhaztcbjkxMjU6XHRcdFx0fVxuOTEyNjpcdFxuOTEyNzpcdFx0XHQvKiBVc2VyIGRvZXNuJiMzOTt0IHdhbnQgdG8gd2FpdC4gICovXG45MTI4Olx0XHRcdGVycm9yID0gLUVBR0FJTjtcbjkxMjk6XHRcdFx0aWYgKCF0aW1lbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24mIzM5O3MgQ29udHJvbCBGbG93KioKCkFscmlnaHQsIHNvIGlmIGBzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOYCBpcyB0cnVlLCB0aGUgbG9vcCAqaW1tZWRpYXRlbHkqIGV4aXRzLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IGl0IHdvdWxkIGp1bXAgdG8gYG5vX3BhY2tldDpgLCBidXQgbm8sIHRoYXQmIzM5O3MgaW5jb3JyZWN0LiBJdCBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCB0aGUgKnZlcnkgbmV4dCogbGluZSBpcyB0aGUgYHJldHVybiBFUlJfUFRSKGVycm9yKTtgIHN0YXRlbWVudC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGV0YWlsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE9rYXksIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byByZWFkIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbG9naWMgaGVyZS4gSSBjYW4mIzM5O3QganVtcCB0byBhbnkgYXNzdW1wdGlvbnMgeWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NvY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5MTIwOlx0XHRcdFx0Z290byBub19wYWNrZXQ7XG45MTIxOlx0XG45MTIyOlx0XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG45MTIzOlx0XHRcdFx0ZXJyb3IgPSAwO1xuOTEyNDpcdFx0XHRcdGJyZWFrO1xuOTEyNTpcdFx0XHR9XG45MTI2Olx0XG45MTI3Olx0XHRcdC8qIFVzZXIgZG9lc24mIzM5O3Qgd2FudCB0byB3YWl0LiAgKi9cbjkxMjg6XHRcdFx0ZXJyb3IgPSAtRUFHQUlOO1xuOTEyOTpcdFx0XHRpZiAoIXRpbWVvKVxuOTEzMDpcdFx0XHRcdGdvdG8gbm9fcGFja2V0O1xuOTEzMTpcdFx0fSB3aGlsZSAoc2N0cF93YWl0X2Zvcl9wYWNrZXQoc2ssIFx1MDAyNmVycm9yLCBcdTAwMjZ0aW1lbykgPT0gMCk7XG45MTMyOlx0XG45MTMzOlx0bm9fcGFja2V0OlxuOTEzNDpcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuOTEzNTpcdH1cbjkxMzY6XHRcbjkxMzc6XHQvKiBJZiBzbmRidWYgaGFzIGNoYW5nZWQsIHdha2UgdXAgcGVyIGFzc29jaWF0aW9uIHNuZGJ1ZiB3YWl0ZXJzLiAgKi9cbjkxMzg6XHRzdGF0aWMgdm9pZCBfX3NjdHBfd3JpdGVfc3BhY2Uoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG45MTM5Olx0e1xuOTE0MDpcdFx0c3RydWN0IHNvY2sgKnNrID0gYXNvYy1cdTAwM2ViYXNlLnNrO1xuOTE0MTpcdFxuOTE0MjpcdFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFx1MDAzYz0gMClcbjkxNDM6XHRcdFx0cmV0dXJuO1xuOTE0NDpcdFxuOTE0NTpcdFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2YXNvYy1cdTAwM2V3YWl0KSlcbjkxNDY6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmFzb2MtXHUwMDNld2FpdCk7XG45MTQ3Olx0XG45MTQ4Olx0XHRpZiAoc2N0cF93cml0ZWFibGUoc2spKSB7XG45MTQ5Olx0XHRcdHN0cnVjdCBzb2NrZXRfd3EgKndxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgQ3JpdGljYWwgU0NUUCBCdWcgRGlzY292ZXJlZCEqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIHRocm91Z2ggdGhpcyBTQ1RQIGNvZGUsIGFuZCBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIHNvbWV0aGluZyByYXRoZXIgbmFzdHkuIEl0IGxvb2tzIGxpa2UgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGJ1Zy4gTGV0IG1lIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBzZWUgdGhpczoKCmBgYGMKCQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewoJCQllcnJvciA9IDA7CgkJCWJyZWFrOwoJCX0KYGBgCgpJZiBgc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZSwgaW5kaWNhdGluZyBhIHNodXRkb3duIG9uIHRoZSByZWNlaXZlIHNpZGUsIHRoZSBsb29wIGJyZWFrcywgYW5kIGBlcnJvcmAgaXMgc2V0IHRvIDAuIE5vdywgdGhpcyBmZWVkcyBpbnRvIHRoZSBgbm9fcGFja2V0YCBsYWJlbCwgd2hpY2ggcmV0dXJucyBgRVJSX1BUUihlcnJvcilgLiBJbiB0aGlzIGNhc2UgdGhhdCYjMzk7cyBgRVJSX1BUUigwKWAsIHdoaWNoIGV2YWx1YXRlcyB0byBgTlVMTGAuCgpUaGUgcHJvYmxlbT8gYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGNhbiByZXR1cm4gYE5VTExgLiBUaGlzIGlzIGZpbmUsIHRoYXQmIzM5O3MgYSB2YWxpZCByZXR1cm4gZm9yIGFuIGVtcHR5IHF1ZXVlIHdoZW4gc2h1dCBkb3duLCBvciBhbiBlcnJvci4gSG93ZXZlciwgYHNjdHBfcmVjdm1zZ2AgKmNhbGxzKiB0aGlzOgoKYGBgYwoJc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MpOwoJaWYgKElTX0VSUihza2IpKSB7CgkJZXJyID0gUFRSX0VSUihza2IpOwoJCWdvdG8gb3V0OwoJfQoKCS8qIEdldCB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBza2IgaW5jbHVkaW5nIGFueSBza2ImIzM5O3MgaW4gdGhlCgkgKiBmcmFnX2xpc3QuCgkgKi8KCXNrYl9sZW4gPSBza2ItJmd0O2xlbjsKYGBgCgpIZXJlJiMzOTtzIHRoZSBraWNrZXI6IElmIGBza2JgIGlzIGBOVUxMYCwgYElTX0VSUihza2IpYCBpcyBmYWxzZS4gVGhhdCBtZWFucyBpdCAqc2tpcHMqIHRoZSBlcnJvciBjaGVjayBhbmQgZGVyZWZlcmVuY2VzIHRoZSBgc2tiLSZndDtsZW5gLiBCb29tISBOdWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIGEgY3Jhc2guCgpUaGlzIGlzIGRlZmluaXRlbHkgbmV3LCBpdCB1c2VkIHRvIGxvb2sgbGlrZSB0aGlzOgoKYGBgYwoJc2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsICZhbXA7ZXJyKTsKCWlmICghc2tiKQoJCWdvdG8gb3V0OwpgYGAKClNvIHByZXZpb3VzbHkgYSBgTlVMTGAgd291bGQgYGdvdG8gb3V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKSSBkb3VibGUtY2hlY2tlZCBgc2N0cF91bHBldmVudF9yZWFkX254dGluZm9gLCBhbmQgdGhhdCBjb2RlICpjb3JyZWN0bHkqIHVzZXMgYCFJU19FUlJfT1JfTlVMTChza2IpYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8uIFNvIGl0IGNvcnJlY3RseSBoYW5kbGVzIE5VTEwuCgpJIGFsc28gY2hlY2tlZCBgSVNfRVJSYCBhZ2FpbiB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyB3YXMgY29ycmVjdC4gYElTX0VSUihOVUxMKWAgaXMgZmFsc2UsIGFzIGV4cGVjdGVkLgoKU28sIGluIHNob3J0OiBgc2N0cF9yZWN2bXNnYCAqd2lsbCogY3Jhc2ggd2hlbiBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAgcmV0dXJucyBgTlVMTGAuIEl0IHJldHVybnMgYE5VTExgIHdoZW4gYHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV05gIGlzIHNldCAqYW5kKiB0aGUgcmVjZWl2ZSBxdWV1ZSBpcyBlbXB0eS4gVGhpcyBpcyBlYXNpbHkgcmVhY2hhYmxlLiBJdCB3aWxsIGNyYXNoIG9uIHRoZSBgc2tiLSZndDtsZW5gIGRlcmVmZXJlbmNlLgoKSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enotd29ydGh5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1Zy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgb24gYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYC4gVGhlIHRhcmdldCBjb25maWcgc2hvdWxkIGJlIGBJUF9TQ1RQYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uZmlnIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBJUF9TQ1RQYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBvbmx5IG9uZSBpbiBwbGF5LiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIFRoZXJlIGNvdWxkIGJlIHJlbGF0ZWQgb3Igb3ZlcmxhcHBpbmcgc2V0dGluZ3MgSSBuZWVkIHRvIGNvbnNpZGVyLCBvciBldmVuIGNvbmZsaWN0aW5nIG9uZXMuIFRoaXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIGEgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgYSBiaWdnZXIgcGljdHVyZSB0byByZWFsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb21wb25lbnRzLiBEaWdnaW5nIGRlZXBlciBpcyBhbHdheXMgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnPTM5PWlmIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNDAtXG5uZXQvc2N0cC9LY29uZmlnOjQxOmNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbm5ldC9zY3RwL0tjb25maWctNDItXHRib29sIFwmIzM0O1NDVFA6IERlYnVnIG9iamVjdCBjb3VudHNcJiMzNDtcbi0tXG5uZXQvc2N0cC9LY29uZmlnPTUyPWNob2ljZVxuLS1cbm5ldC9zY3RwL0tjb25maWctNjEtXG5uZXQvc2N0cC9LY29uZmlnOjYyOmNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XG5uZXQvc2N0cC9LY29uZmlnLTYzLVx0Ym9vbCBcJiMzNDtITUFDLVNIQTI1NlwmIzM0O1xubmV0L3NjdHAvS2NvbmZpZy02NC1cbm5ldC9zY3RwL0tjb25maWc6NjU6Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FXG5uZXQvc2N0cC9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtOb25lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTMKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlIGlzIG9idmlvdXNseSBgSVBfU0NUUGAuIEl0JiMzOTtzIHdoYXQgZHJpdmVzIHRoaXMgd2hvbGUgdGhpbmcuIE5vdywgdGhlIG1lYXQgb2YgdGhlIG1hdHRlci4uLgoKRXNzZW50aWFsbHksIHRoZXJlJiMzOTtzIGEgcGF0Y2ggdGhhdCBhbHRlcnMgdGhlIHJldHVybiBiZWhhdmlvciBvZiBgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbWAuIEl0JiMzOTtzIG5vdyBnb2luZyB0byByZXR1cm4gYEVSUl9QVFJgIGluc3RlYWQgb2YgYE5VTExgLiBUaGUgaXNzdWUgYXJpc2VzIGluIGBzY3RwX3JlY3Ztc2dgLCB3aGVyZSB0aGUgY29kZSBjaGVja3MgZm9yIGBJU19FUlIoc2tiKWAuIEhvd2V2ZXIsIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCAqY2FuKiBzdGlsbCByZXR1cm4gYE5VTExgIOKAkyBzcGVjaWZpY2FsbHksIGBFUlJfUFRSKDApYCDigJMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBuYW1lbHkgd2hlbiBgUkNWX1NIVVRET1dOYCBpcyBzZXQuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IG9uIGBza2ItJmd0O2xlbmAuCgpUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBpbnRyb2R1Y2VzIGEgYnVnLCBhbmQgaXQgaXMgYSBidWcgdGhhdCB3ZSBzaG91bGQgYWJzb2x1dGVseSB0YXJnZXQgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgdGhhdCBuZWVkIHRvIGJlIGluIGZvY3VzIGFyZSBgc2N0cF9yZWN2bXNnYCBhbmQgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzZXQgdXAgdG8gaW5jbHVkZSAmIzM0O0lQX1NDVFAmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7c2N0cF9za2JfcmVjdl9kYXRhZ3JhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXHUwMDNlbGVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGEgYnVnIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3NrYl9yZWN2X2RhdGFncmFtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSB0byByZXR1cm4gRVJSX1BUUiBpbnN0ZWFkIG9mIE5VTEwuIEhvd2V2ZXIsIGluIHNjdHBfcmVjdm1zZywgaXQgY2hlY2tzIElTX0VSUihza2IpIGJ1dCBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIGNhbiBzdGlsbCByZXR1cm4gTlVMTCAoRVJSX1BUUigwKSkgd2hlbiBSQ1ZfU0hVVERPV04gaXMgc2V0LCBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHNrYi1cdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDI6MzYuNDA5NTk5NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM1MTI2NTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9yZWN2bXNnXCIsXG4gICAgXCJzY3RwX3NrYl9yZWN2X2RhdGFncmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIHRvIHJldHVybiBFUlJfUFRSIGluc3RlYWQgb2YgTlVMTC4gSG93ZXZlciwgaW4gc2N0cF9yZWN2bXNnLCBpdCBjaGVja3MgSVNfRVJSKHNrYikgYnV0IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gY2FuIHN0aWxsIHJldHVybiBOVUxMIChFUlJfUFRSKDApKSB3aGVuIFJDVl9TSFVURE9XTiBpcyBzZXQsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gc2tiLVxcdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjozNi40MDk2MDcyNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MTQwODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOThmN2I3NDFkYjFkNWMyZWUyOTg0OGFmMjVmYmNjNjBlNDE0YTEyN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTowMjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXFxuaW5kZXggZDUwYzI3ODEyNTA0ZjMuLmI4NmQ1MGQ2YjE0Njg4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmhcXG5AQCAtOTcsNyArOTcsNyBAQCB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuIGV4dGVybiBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc2N0cF9zb2NrZXRzX2FsbG9jYXRlZDtcXG4gaW50IHNjdHBfYXNjb25mX21nbXQoc3RydWN0IHNjdHBfc29jayAqLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqKTtcXG4tc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKiwgaW50LCBpbnQgKik7XFxuK3N0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTtcXG4gXFxuIHR5cGVkZWYgaW50ICgqc2N0cF9jYWxsYmFja190KShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdm9pZCAqKTtcXG4gdm9pZCBzY3RwX3RyYW5zcG9ydF93YWxrX3N0YXJ0KHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpO1xcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jXFxuaW5kZXggYzdiOWUzMjVlYzFjZDMuLjJkZWFhNDk4ZTZjZjg5IDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3NvY2tldC5jXFxuKysrIGIvbmV0L3NjdHAvc29ja2V0LmNcXG5AQCAtMjEyMyw5ICsyMTIzLDExIEBAIHN0YXRpYyBpbnQgc2N0cF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIFxcdTAwMjZlcnIpO1xcbi1cXHRpZiAoIXNrYilcXG4rXFx0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MpO1xcbitcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYidzIGluIHRoZVxcbiBcXHQgKiBmcmFnX2xpc3QuXFxuQEAgLTkwODIsNyArOTA4NCw3IEBAIHN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9wYWNrZXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmVyciwgbG9uZyAqdGltZW9fcClcXG4gICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uY1xcbiAgKiB3aXRoIGEgZmV3IGNoYW5nZXMgdG8gbWFrZSBsa3NjdHAgd29yay5cXG4gICovXFxuLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycilcXG4rc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbkBAIC05MTE3LDIxICs5MTE5LDE5IEBAIHN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycilcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRnb3RvIG5vX3BhY2tldDtcXG4gXFxuLVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG4rXFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIFVzZXIgZG9lc24ndCB3YW50IHRvIHdhaXQuICAqL1xcbiBcXHRcXHRlcnJvciA9IC1FQUdBSU47XFxuIFxcdFxcdGlmICghdGltZW8pXFxuIFxcdFxcdFxcdGdvdG8gbm9fcGFja2V0O1xcbi1cXHR9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgZXJyLCBcXHUwMDI2dGltZW8pID09IDApO1xcbi1cXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBcXHUwMDI2ZXJyb3IsIFxcdTAwMjZ0aW1lbykgPT0gMCk7XFxuIFxcbiBub19wYWNrZXQ6XFxuLVxcdCplcnIgPSBlcnJvcjtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4gfVxcbiBcXG4gLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscGV2ZW50LmMgYi9uZXQvc2N0cC91bHBldmVudC5jXFxuaW5kZXggODkyMGNhOTJhMDExNWMuLjIxYWUwYWRiYWVlZmJjIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmNcXG4rKysgYi9uZXQvc2N0cC91bHBldmVudC5jXFxuQEAgLTEwNjEsMTAgKzEwNjEsOSBAQCB2b2lkIHNjdHBfdWxwZXZlbnRfcmVhZF9ueHRpbmZvKGNvbnN0IHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdGludCBlcnI7XFxuIFxcbi1cXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCwgXFx1MDAyNmVycik7XFxuLVxcdGlmIChza2IgIT0gTlVMTCkge1xcbitcXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCk7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwoc2tiKSkge1xcbiBcXHRcXHRfX3NjdHBfdWxwZXZlbnRfcmVhZF9ueHRpbmZvKHNjdHBfc2tiMmV2ZW50KHNrYiksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgbXNnaGRyLCBza2IpO1xcbiBcXHRcXHQvKiBKdXN0IHJlbGVhc2UgcmVmY291bnQgaGVyZS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDI6MzcuMjI1MjcyMTEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUzNTU3ODgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9yZWN2bXNnXCIsXG4gICAgXCJzY3RwX3NrYl9yZWN2X2RhdGFncmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIHRvIHJldHVybiBFUlJfUFRSIGluc3RlYWQgb2YgTlVMTC4gSG93ZXZlciwgaW4gc2N0cF9yZWN2bXNnLCBpdCBjaGVja3MgSVNfRVJSKHNrYikgYnV0IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gY2FuIHN0aWxsIHJldHVybiBOVUxMIChFUlJfUFRSKDApKSB3aGVuIFJDVl9TSFVURE9XTiBpcyBzZXQsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gc2tiLVxcdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk4ZjdiNzQxZGIxZDVjMmVlMjk4NDhhZjI1ZmJjYzYwZTQxNGExMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTowMjozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmhcbmluZGV4IGQ1MGMyNzgxMjUwNGYzLi5iODZkNTBkNmIxNDY4OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaFxuQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBzY3RwX3NvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciBzY3RwX3NvY2tldHNfYWxsb2NhdGVkO1xuIGludCBzY3RwX2FzY29uZl9tZ210KHN0cnVjdCBzY3RwX3NvY2sgKiwgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKik7XG4tc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKiwgaW50LCBpbnQgKik7XG4rc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xuIFxuIHR5cGVkZWYgaW50ICgqc2N0cF9jYWxsYmFja190KShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdm9pZCAqKTtcbiB2b2lkIHNjdHBfdHJhbnNwb3J0X3dhbGtfc3RhcnQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuY1xuaW5kZXggYzdiOWUzMjVlYzFjZDMuLjJkZWFhNDk4ZTZjZjg5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc29ja2V0LmNcbisrKyBiL25ldC9zY3RwL3NvY2tldC5jXG5AQCAtMjEyMyw5ICsyMTIzLDExIEBAIHN0YXRpYyBpbnQgc2N0cF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzLCBcdTAwMjZlcnIpO1xuLVx0aWYgKCFza2IpXG4rXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyk7XG4rXHRpZiAoSVNfRVJSKHNrYikpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdC8qIEdldCB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBza2IgaW5jbHVkaW5nIGFueSBza2IncyBpbiB0aGVcbiBcdCAqIGZyYWdfbGlzdC5cbkBAIC05MDgyLDcgKzkwODQsNyBAQCBzdGF0aWMgaW50IHNjdHBfd2FpdF9mb3JfcGFja2V0KHN0cnVjdCBzb2NrICpzaywgaW50ICplcnIsIGxvbmcgKnRpbWVvX3ApXG4gICogTm90ZTogVGhpcyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSByb3V0aW5lIGFzIGluIGNvcmUvZGF0YWdyYW0uY1xuICAqIHdpdGggYSBmZXcgY2hhbmdlcyB0byBtYWtlIGxrc2N0cCB3b3JrLlxuICAqL1xuLXN0cnVjdCBza19idWZmICpzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycilcbitzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTkxMTcsMjEgKzkxMTksMTkgQEAgc3RydWN0IHNrX2J1ZmYgKnNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsIGludCAqZXJyKVxuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0Z290byBub19wYWNrZXQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuK1x0XHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xuK1x0XHRcdGVycm9yID0gMDtcbiBcdFx0XHRicmVhaztcbi1cbitcdFx0fVxuIFxuIFx0XHQvKiBVc2VyIGRvZXNuJ3Qgd2FudCB0byB3YWl0LiAgKi9cbiBcdFx0ZXJyb3IgPSAtRUFHQUlOO1xuIFx0XHRpZiAoIXRpbWVvKVxuIFx0XHRcdGdvdG8gbm9fcGFja2V0O1xuLVx0fSB3aGlsZSAoc2N0cF93YWl0X2Zvcl9wYWNrZXQoc2ssIGVyciwgXHUwMDI2dGltZW8pID09IDApO1xuLVxuLVx0cmV0dXJuIE5VTEw7XG4rXHR9IHdoaWxlIChzY3RwX3dhaXRfZm9yX3BhY2tldChzaywgXHUwMDI2ZXJyb3IsIFx1MDAyNnRpbWVvKSA9PSAwKTtcbiBcbiBub19wYWNrZXQ6XG4tXHQqZXJyID0gZXJyb3I7XG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiB9XG4gXG4gLyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbmluZGV4IDg5MjBjYTkyYTAxMTVjLi4yMWFlMGFkYmFlZWZiYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmNcbisrKyBiL25ldC9zY3RwL3VscGV2ZW50LmNcbkBAIC0xMDYxLDEwICsxMDYxLDkgQEAgdm9pZCBzY3RwX3VscGV2ZW50X3JlYWRfbnh0aW5mbyhjb25zdCBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQsXG4gXHRcdFx0XHRzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cdGludCBlcnI7XG4gXG4tXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBNU0dfUEVFSyB8IE1TR19ET05UV0FJVCwgXHUwMDI2ZXJyKTtcbi1cdGlmIChza2IgIT0gTlVMTCkge1xuK1x0c2tiID0gc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzaywgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQpO1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKSB7XG4gXHRcdF9fc2N0cF91bHBldmVudF9yZWFkX254dGluZm8oc2N0cF9za2IyZXZlbnQoc2tiKSxcbiBcdFx0XHRcdFx0ICAgICBtc2doZHIsIHNrYik7XG4gXHRcdC8qIEp1c3QgcmVsZWFzZSByZWZjb3VudCBoZXJlLiAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDI6MzcuMjI1MjczNDkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyOTYwMjIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIFNvY2tldCBSZWNlaXZlIExvZ2ljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgbW9kaWZ5aW5nIHRoZSBTQ1RQIHNvY2tldCByZWNlaXZlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSd2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZnJvbSB0YWtpbmcgYW4gZXJyb3IgcG9pbnRlciB0byByZXR1cm5pbmcgYW4gYEVSUl9QVFIoZXJyb3IpYCBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgaG93IGVycm9ycyBhcmUgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb25zZXF1ZW5jZXMgYXJlIHVuZGVyc3Rvb2QuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGluIGBzY3RwX3JlY3Ztc2dgIGFuZCBgc2N0cF91bHBldmVudF9yZWFkX254dGluZm9gIHVzZWQgdGhlIG9sZCBzaWduYXR1cmUgd2l0aCB0aGUgZXJyb3IgcG9pbnRlci4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBlcnJvciBwb2ludGVyIHdpdGggY2hlY2tpbmcgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3Igd2l0aCB0aGUgYElTX0VSUmAgbWFjcm8uIFNvIHRoZSBsb2dpYyBub3cgY2hlY2tzIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGlzIGFuIGVycm9yIHBvaW50ZXIuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiV2FpdCwgaWYgaXQncyBhbHdheXMgcmV0dXJuaW5nIGFuIGVycm9yIHBvaW50ZXIgaW4gcGxhY2Ugb2YgTlVMTCwgdGhlbiB0aGUgY2hlY2sgbWFrZXMgc2Vuc2VcIi4gQnV0IHRoZW4gSSBkdWcgaW50byB0aGUgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGNvZGUgaXRzZWxmLiBUaGVyZSdzIGEgY2FzZSB3aGVyZSBgc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZS4gSW4gdGhpcyBjYXNlLCBpdCBzZXRzIGBlcnJvciA9IDBgIGFuZCBicmVha3MsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcmV0dXJuIGBFUlJfUFRSKDApYC4gTm93LCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgRVJSX1BUUigwKWAgKippcyoqIE5VTEwuIFNvLCB0aGUgZnVuY3Rpb24gY2FuIGFjdHVhbGx5IHJldHVybiBgTlVMTGAgaW4gdGhpcyBzY2VuYXJpbyEgYElTX0VSUihOVUxMKWAgaXMgZmFsc2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvZGUgaW4gYHNjdHBfcmVjdm1zZ2Agd2lsbCBwcm9jZWVkIGFzIHRob3VnaCBpdCBoYXMgYSB2YWxpZCBgc2tiYCB3aGVuIGl0IGRvZXNuJ3QuXG5cbkxvb2tpbmcgYXQgYHNjdHBfcmVjdm1zZ2AsIGlmIGBza2JgIGlzIGBOVUxMYCwgdGhlIGNvZGUgd2lsbCBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGl0IGJ5IGFjY2Vzc2luZyBgc2tiLVx1MDAzZWxlbmAuIFRoaXMgd2lsbCBsZWFkIHRvIGEgY3Jhc2ghIFRoYXQncyBhIGNyaXRpY2FsIGJ1ZyEgSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBpbW1lZGlhdGVseS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgYHNjdHBfcmVjdm1zZ2AgaXMgc3VwcG9zZWQgdG8gaGFuZGxlIHRoZSBgTlVMTGAgcmV0dXJuIG9yIHdoZXRoZXIgaXQncyBhbiBvdmVyc2lnaHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZW50aXJlIGBuZXQvc2N0cC9zb2NrZXQuY2AgZmlsZSB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAyOjQ3LjUyMTI5ODAzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTgzMjM4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NvY2tldC5jPTIwNTY9c3RhdGljIGludCBzY3RwX3NrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0yMDk3LSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjIwOTg6c3RhdGljIGludCBzY3RwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3NjdHAvc29ja2V0LmMtMjA5OS1cXHRcXHRcXHRpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz0zNDA5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2NvbnRleHQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMzQ1Ni0gKiBjb21lIGZyb20gYSBkaWZmZXJlbnQgYXNzb2NpYXRpb24gKHRodXMgdGhlIHVzZXIgbXVzdCByZWNlaXZlIGRhdGFcXG5uZXQvc2N0cC9zb2NrZXQuYzozNDU3OiAqIHdpdGggdGhlIGV4dGVuZGVkIGNhbGxzIChlLmcuIHNjdHBfcmVjdm1zZykgdG8ga2VlcCB0cmFjayBvZiB3aGljaFxcbm5ldC9zY3RwL3NvY2tldC5jLTM0NTgtICogYXNzb2NpYXRpb24gZWFjaCByZWNlaXZlIGJlbG9uZ3MgdG8uXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05NjU0PXN0cnVjdCBwcm90byBzY3RwX3Byb3QgPSB7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy05NjY3LVxcdC5zZW5kbXNnICAgICA9XFx0c2N0cF9zZW5kbXNnLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk2Njg6XFx0LnJlY3Ztc2cgICAgID1cXHRzY3RwX3JlY3Ztc2csXFxubmV0L3NjdHAvc29ja2V0LmMtOTY2OS1cXHQuYmluZCAgICAgICAgPVxcdHNjdHBfYmluZCxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTk3MDk9c3RydWN0IHByb3RvIHNjdHB2Nl9wcm90ID0ge1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtOTcyMi1cXHQuc2VuZG1zZ1xcdD0gc2N0cF9zZW5kbXNnLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk3MjM6XFx0LnJlY3Ztc2dcXHQ9IHNjdHBfcmVjdm1zZyxcXG5uZXQvc2N0cC9zb2NrZXQuYy05NzI0LVxcdC5iaW5kXFx0XFx0PSBzY3RwX2JpbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAyOjQ4LjAzOTYyOTc4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTQ5NjM4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2N0cF9yZWN2bXNnYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpc3NlY3QgYHNjdHBfcmVjdm1zZ2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvc2N0cC9zb2NrZXQuY2AgZmlsZSwgYXJvdW5kIGxpbmUgMjEyMy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyByZWNlaXZpbmcgU0NUUCBtZXNzYWdlcyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIHdhbnQgdG8gemVybyBpbiBvbiBpdHMgY29yZSBsb2dpYyDigJMgaG93IGl0IHB1bGxzIGRhdGEgZnJvbSB0aGUgdHJhbnNwb3J0LCBob3cgaXQgbWFuYWdlcyBtZXNzYWdlIGJvdW5kYXJpZXMsIHdoYXQgZXJyb3IgY29uZGl0aW9ucyBpdCBjaGVja3MgZm9yLCBhbmQgaG93IGl0IGRlbGl2ZXJzIHRoZSBkYXRhIHRvIHRoZSB1c2VyIHNwYWNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRoZSBmaWxlLCB3aGljaCB1c3VhbGx5IGluZm9ybXMgdGhlIGltcGxlbWVudGF0aW9uIGNob2ljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1Mi4zNTQ1OTYxNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjExMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjExMDpcXHRcXG4yMTExOlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuMjExMjpcXHRcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuMjExMzpcXHRcXG4yMTE0OlxcdFxcdGlmIChza19jYW5fYnVzeV9sb29wKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjIxMTU6XFx0XFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxcbjIxMTY6XFx0XFx0XFx0c2tfYnVzeV9sb29wKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMjExNzpcXHRcXG4yMTE4OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjExOTpcXHRcXG4yMTIwOlxcdFxcdGlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApIFxcdTAwMjZcXHUwMDI2ICFzY3RwX3NzdGF0ZShzaywgRVNUQUJMSVNIRUQpIFxcdTAwMjZcXHUwMDI2XFxuMjEyMTpcXHRcXHQgICAgIXNjdHBfc3N0YXRlKHNrLCBDTE9TSU5HKSBcXHUwMDI2XFx1MDAyNiAhc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpIHtcXG4yMTIyOlxcdFxcdFxcdGVyciA9IC1FTk9UQ09OTjtcXG4yMTIzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIxMjQ6XFx0XFx0fVxcbjIxMjU6XFx0XFxuMjEyNjpcXHRcXHRza2IgPSBzY3RwX3NrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyk7XFxuMjEyNzpcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4yMTI4OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4yMTI5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIxMzA6XFx0XFx0fVxcbjIxMzE6XFx0XFxuMjEzMjpcXHRcXHQvKiBHZXQgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgc2tiIGluY2x1ZGluZyBhbnkgc2tiJ3MgaW4gdGhlXFxuMjEzMzpcXHRcXHQgKiBmcmFnX2xpc3QuXFxuMjEzNDpcXHRcXHQgKi9cXG4yMTM1OlxcdFxcdHNrYl9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4yMTM2OlxcdFxcbjIxMzc6XFx0XFx0Y29waWVkID0gc2tiX2xlbjtcXG4yMTM4OlxcdFxcdGlmIChjb3BpZWQgXFx1MDAzZSBsZW4pXFxuMjEzOTpcXHRcXHRcXHRjb3BpZWQgPSBsZW47XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdGVyciA9IHNrYl9jb3B5X2RhdGFncmFtX21zZyhza2IsIDAsIG1zZywgY29waWVkKTtcXG4yMTQyOlxcdFxcbjIxNDM6XFx0XFx0ZXZlbnQgPSBzY3RwX3NrYjJldmVudChza2IpO1xcbjIxNDQ6XFx0XFxuMjE0NTpcXHRcXHRpZiAoZXJyKVxcbjIxNDY6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4yMTQ3OlxcdFxcbjIxNDg6XFx0XFx0aWYgKGV2ZW50LVxcdTAwM2VjaHVuayBcXHUwMDI2XFx1MDAyNiBldmVudC1cXHUwMDNlY2h1bmstXFx1MDAzZWhlYWRfc2tiKVxcbjIxNDk6XFx0XFx0XFx0aGVhZF9za2IgPSBldmVudC1cXHUwMDNlY2h1bmstXFx1MDAzZWhlYWRfc2tiO1xcbjIxNTA6XFx0XFx0ZWxzZVxcbjIxNTE6XFx0XFx0XFx0aGVhZF9za2IgPSBza2I7XFxuMjE1MjpcXHRcXHRzb2NrX3JlY3ZfY21zZ3MobXNnLCBzaywgaGVhZF9za2IpO1xcbjIxNTM6XFx0XFx0aWYgKHNjdHBfdWxwZXZlbnRfaXNfbm90aWZpY2F0aW9uKGV2ZW50KSkge1xcbjIxNTQ6XFx0XFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX05PVElGSUNBVElPTjtcXG4yMTU1OlxcdFxcdFxcdHNwLVxcdTAwM2VwZi1cXHUwMDNlZXZlbnRfbXNnbmFtZShldmVudCwgbXNnLVxcdTAwM2Vtc2dfbmFtZSwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX25hbWVsZW4pO1xcbjIxNTY6XFx0XFx0fSBlbHNlIHtcXG4yMTU3OlxcdFxcdFxcdHNwLVxcdTAwM2VwZi1cXHUwMDNlc2tiX21zZ25hbWUoaGVhZF9za2IsIG1zZy1cXHUwMDNlbXNnX25hbWUsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19uYW1lbGVuKTtcXG4yMTU4OlxcdFxcdH1cXG4yMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1Mi4zNTQ5OTYyNDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU0MTI1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKlRoZSBOdWxsIFNLQiBDb251bmRydW0qKlxuXG5XYWl0IGEgbWludXRlLi4uIGlmIHRoZSBgc2tiYCBwb2ludGVyIGlzIGFjdHVhbGx5IGBOVUxMYCwgdGhlbiBgSVNfRVJSKHNrYilgIGlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGBmYWxzZWAuIFRoYXQncyBub3QgZ29vZCwgYmVjYXVzZSB0aGVuIHRoZSBjb2RlIG1vdmVzIG9uIHRvIGBza2JfbGVuID0gc2tiLVx1MDAzZWxlbjtgLi4uIHdoaWNoIGlzIGdvaW5nIHRvIHRyeSBhbmQgZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIhIEknbSBwcmV0dHkgc3VyZSB0aGF0J3MgYSByZWNpcGUgZm9yIGEga2VybmVsIHBhbmljLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgc29tZSBzZXJpb3VzbHkgdW5kZWZpbmVkIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCB3ZSdyZSBoYW5kbGluZyB0aGUgY2FzZSBvZiBhIGBOVUxMIHNrYmAgY29ycmVjdGx5LiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIGZ1bmN0aW9uIGFnYWluIGFuZCByZS1leGFtaW5lIHRoZSBsb2dpYywgbGluZSBieSBsaW5lLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUncyBhIGd1YXJkIGFnYWluc3QgdGhpcyBwb3NzaWJpbGl0eSwgb3IgaXQncyBhIGNyaXRpY2FsIGJ1Zy4gSSBjYW4ndCBiZWxpZXZlIEkgYWxtb3N0IG1pc3NlZCB0aGlzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1NS43MDkxMjQwNjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTA4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTA4MDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuOTA4MTpcXHR9XFxuOTA4MjpcXHRcXG45MDgzOlxcdC8qIFJlY2VpdmUgYSBkYXRhZ3JhbS5cXG45MDg0OlxcdCAqIE5vdGU6IFRoaXMgaXMgcHJldHR5IG11Y2ggdGhlIHNhbWUgcm91dGluZSBhcyBpbiBjb3JlL2RhdGFncmFtLmNcXG45MDg1OlxcdCAqIHdpdGggYSBmZXcgY2hhbmdlcyB0byBtYWtlIGxrc2N0cCB3b3JrLlxcbjkwODY6XFx0ICovXFxuOTA4NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9za2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG45MDg4OlxcdHtcXG45MDg5OlxcdFxcdGludCBlcnJvcjtcXG45MDkwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuOTA5MTpcXHRcXHRsb25nIHRpbWVvO1xcbjkwOTI6XFx0XFxuOTA5MzpcXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG45MDk0OlxcdFxcbjkwOTU6XFx0XFx0cHJfZGVidWcoXFxcIiVzOiB0aW1lbzolbGQsIG1heDolbGRcXFxcblxcXCIsIF9fZnVuY19fLCB0aW1lbyxcXG45MDk2OlxcdFxcdFxcdCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XFxuOTA5NzpcXHRcXG45MDk4OlxcdFxcdGRvIHtcXG45MDk5OlxcdFxcdFxcdC8qIEFnYWluIG9ubHkgdXNlciBsZXZlbCBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24sXFxuOTEwMDpcXHRcXHRcXHQgKiBzbyBub3RoaW5nIGludGVycnVwdCBsZXZlbFxcbjkxMDE6XFx0XFx0XFx0ICogd2lsbCBzdWRkZW5seSBlYXQgdGhlIHJlY2VpdmVfcXVldWUuXFxuOTEwMjpcXHRcXHRcXHQgKlxcbjkxMDM6XFx0XFx0XFx0ICogIExvb2sgYXQgY3VycmVudCBuZnMgY2xpZW50IGJ5IHRoZSB3YXkuLi5cXG45MTA0OlxcdFxcdFxcdCAqICBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdhcyBjb3JyZWN0IGluIGFueSBjYXNlLiA4KVxcbjkxMDU6XFx0XFx0XFx0ICovXFxuOTEwNjpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfUEVFSykge1xcbjkxMDc6XFx0XFx0XFx0XFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG45MTA4OlxcdFxcdFxcdFxcdGlmIChza2IpXFxuOTEwOTpcXHRcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpO1xcbjkxMTA6XFx0XFx0XFx0fSBlbHNlIHtcXG45MTExOlxcdFxcdFxcdFxcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG45MTEyOlxcdFxcdFxcdH1cXG45MTEzOlxcdFxcbjkxMTQ6XFx0XFx0XFx0aWYgKHNrYilcXG45MTE1OlxcdFxcdFxcdFxcdHJldHVybiBza2I7XFxuOTExNjpcXHRcXG45MTE3OlxcdFxcdFxcdC8qIENhbGxlciBpcyBhbGxvd2VkIG5vdCB0byBjaGVjayBzay1cXHUwMDNlc2tfZXJyIGJlZm9yZSBjYWxsaW5nLiAqL1xcbjkxMTg6XFx0XFx0XFx0ZXJyb3IgPSBzb2NrX2Vycm9yKHNrKTtcXG45MTE5OlxcdFxcdFxcdGlmIChlcnJvcilcXG45MTIwOlxcdFxcdFxcdFxcdGdvdG8gbm9fcGFja2V0O1xcbjkxMjE6XFx0XFxuOTEyMjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxuOTEyMzpcXHRcXHRcXHRcXHRlcnJvciA9IDA7XFxuOTEyNDpcXHRcXHRcXHRcXHRicmVhaztcXG45MTI1OlxcdFxcdFxcdH1cXG45MTI2OlxcdFxcbjkxMjc6XFx0XFx0XFx0LyogVXNlciBkb2Vzbid0IHdhbnQgdG8gd2FpdC4gICovXFxuOTEyODpcXHRcXHRcXHRlcnJvciA9IC1FQUdBSU47XFxuOTEyOTpcXHRcXHRcXHRpZiAoIXRpbWVvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1NS43MDk1NDc3NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA1MzkzNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24ncyBDb250cm9sIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBpZiBgc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZSwgdGhlIGxvb3AgKmltbWVkaWF0ZWx5KiBleGl0cy4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCBpdCB3b3VsZCBqdW1wIHRvIGBub19wYWNrZXQ6YCwgYnV0IG5vLCB0aGF0J3MgaW5jb3JyZWN0LiBJdCBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCB0aGUgKnZlcnkgbmV4dCogbGluZSBpcyB0aGUgYHJldHVybiBFUlJfUFRSKGVycm9yKTtgIHN0YXRlbWVudC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gT2theSwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gcmVhZCB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuIEkgY2FuJ3QganVtcCB0byBhbnkgYXNzdW1wdGlvbnMgeWV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTMxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMjo1OS4wMTQ5NDM5MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgxODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkxMjA6XFx0XFx0XFx0XFx0Z290byBub19wYWNrZXQ7XFxuOTEyMTpcXHRcXG45MTIyOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG45MTIzOlxcdFxcdFxcdFxcdGVycm9yID0gMDtcXG45MTI0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjkxMjU6XFx0XFx0XFx0fVxcbjkxMjY6XFx0XFxuOTEyNzpcXHRcXHRcXHQvKiBVc2VyIGRvZXNuJ3Qgd2FudCB0byB3YWl0LiAgKi9cXG45MTI4OlxcdFxcdFxcdGVycm9yID0gLUVBR0FJTjtcXG45MTI5OlxcdFxcdFxcdGlmICghdGltZW8pXFxuOTEzMDpcXHRcXHRcXHRcXHRnb3RvIG5vX3BhY2tldDtcXG45MTMxOlxcdFxcdH0gd2hpbGUgKHNjdHBfd2FpdF9mb3JfcGFja2V0KHNrLCBcXHUwMDI2ZXJyb3IsIFxcdTAwMjZ0aW1lbykgPT0gMCk7XFxuOTEzMjpcXHRcXG45MTMzOlxcdG5vX3BhY2tldDpcXG45MTM0OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG45MTM1OlxcdH1cXG45MTM2OlxcdFxcbjkxMzc6XFx0LyogSWYgc25kYnVmIGhhcyBjaGFuZ2VkLCB3YWtlIHVwIHBlciBhc3NvY2lhdGlvbiBzbmRidWYgd2FpdGVycy4gICovXFxuOTEzODpcXHRzdGF0aWMgdm9pZCBfX3NjdHBfd3JpdGVfc3BhY2Uoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuOTEzOTpcXHR7XFxuOTE0MDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLVxcdTAwM2ViYXNlLnNrO1xcbjkxNDE6XFx0XFxuOTE0MjpcXHRcXHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXFx1MDAzYz0gMClcXG45MTQzOlxcdFxcdFxcdHJldHVybjtcXG45MTQ0OlxcdFxcbjkxNDU6XFx0XFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNmFzb2MtXFx1MDAzZXdhaXQpKVxcbjkxNDY6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZhc29jLVxcdTAwM2V3YWl0KTtcXG45MTQ3OlxcdFxcbjkxNDg6XFx0XFx0aWYgKHNjdHBfd3JpdGVhYmxlKHNrKSkge1xcbjkxNDk6XFx0XFx0XFx0c3RydWN0IHNvY2tldF93cSAqd3E7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAyOjU5LjAxNTMyODY0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODk5ODI1MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkEgQ3JpdGljYWwgU0NUUCBCdWcgRGlzY292ZXJlZCEqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyB0aHJvdWdoIHRoaXMgU0NUUCBjb2RlLCBhbmQgSSd2ZSBzdHVtYmxlZCB1cG9uIHNvbWV0aGluZyByYXRoZXIgbmFzdHkuIEl0IGxvb2tzIGxpa2UgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGJ1Zy4gTGV0IG1lIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0LCBJIHNlZSB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcblx0XHRcdGVycm9yID0gMDtcblx0XHRcdGJyZWFrO1xuXHRcdH1cbmBgYFxuXG5JZiBgc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTmAgaXMgdHJ1ZSwgaW5kaWNhdGluZyBhIHNodXRkb3duIG9uIHRoZSByZWNlaXZlIHNpZGUsIHRoZSBsb29wIGJyZWFrcywgYW5kIGBlcnJvcmAgaXMgc2V0IHRvIDAuIE5vdywgdGhpcyBmZWVkcyBpbnRvIHRoZSBgbm9fcGFja2V0YCBsYWJlbCwgd2hpY2ggcmV0dXJucyBgRVJSX1BUUihlcnJvcilgLiBJbiB0aGlzIGNhc2UgdGhhdCdzIGBFUlJfUFRSKDApYCwgd2hpY2ggZXZhbHVhdGVzIHRvIGBOVUxMYC5cblxuVGhlIHByb2JsZW0/IGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBjYW4gcmV0dXJuIGBOVUxMYC4gVGhpcyBpcyBmaW5lLCB0aGF0J3MgYSB2YWxpZCByZXR1cm4gZm9yIGFuIGVtcHR5IHF1ZXVlIHdoZW4gc2h1dCBkb3duLCBvciBhbiBlcnJvci4gSG93ZXZlciwgYHNjdHBfcmVjdm1zZ2AgKmNhbGxzKiB0aGlzOlxuXG5gYGBjXG5cdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzKTtcblx0aWYgKElTX0VSUihza2IpKSB7XG5cdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuXHRcdGdvdG8gb3V0O1xuXHR9XG5cblx0LyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNrYiBpbmNsdWRpbmcgYW55IHNrYidzIGluIHRoZVxuXHQgKiBmcmFnX2xpc3QuXG5cdCAqL1xuXHRza2JfbGVuID0gc2tiLVx1MDAzZWxlbjtcbmBgYFxuXG5IZXJlJ3MgdGhlIGtpY2tlcjogSWYgYHNrYmAgaXMgYE5VTExgLCBgSVNfRVJSKHNrYilgIGlzIGZhbHNlLiBUaGF0IG1lYW5zIGl0ICpza2lwcyogdGhlIGVycm9yIGNoZWNrIGFuZCBkZXJlZmVyZW5jZXMgdGhlIGBza2ItXHUwMDNlbGVuYC4gQm9vbSEgTnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBhIGNyYXNoLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgbmV3LCBpdCB1c2VkIHRvIGxvb2sgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdHNrYiA9IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzLCBcdTAwMjZlcnIpO1xuXHRpZiAoIXNrYilcblx0XHRnb3RvIG91dDtcbmBgYFxuXG5TbyBwcmV2aW91c2x5IGEgYE5VTExgIHdvdWxkIGBnb3RvIG91dGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuSSBkb3VibGUtY2hlY2tlZCBgc2N0cF91bHBldmVudF9yZWFkX254dGluZm9gLCBhbmQgdGhhdCBjb2RlICpjb3JyZWN0bHkqIHVzZXMgYCFJU19FUlJfT1JfTlVMTChza2IpYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8uIFNvIGl0IGNvcnJlY3RseSBoYW5kbGVzIE5VTEwuXG5cbkkgYWxzbyBjaGVja2VkIGBJU19FUlJgIGFnYWluIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIHdhcyBjb3JyZWN0LiBgSVNfRVJSKE5VTEwpYCBpcyBmYWxzZSwgYXMgZXhwZWN0ZWQuXG5cblNvLCBpbiBzaG9ydDogYHNjdHBfcmVjdm1zZ2AgKndpbGwqIGNyYXNoIHdoZW4gYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gIHJldHVybnMgYE5VTExgLiBJdCByZXR1cm5zIGBOVUxMYCB3aGVuIGBzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOYCBpcyBzZXQgKmFuZCogdGhlIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuIFRoaXMgaXMgZWFzaWx5IHJlYWNoYWJsZS4gSXQgd2lsbCBjcmFzaCBvbiB0aGUgYHNrYi1cdTAwM2VsZW5gIGRlcmVmZXJlbmNlLlxuXG5JJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1Zy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgb24gYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYC4gVGhlIHRhcmdldCBjb25maWcgc2hvdWxkIGJlIGBJUF9TQ1RQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAzOjA4LjkxNTE1NjIwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNDUzNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TQ1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvS2NvbmZpZy01LVxcbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTowMzowOS4zMzY2MTM4MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MzIwNjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgY29uZmlnIEknbSB3b3JraW5nIHdpdGggaXMgYElQX1NDVFBgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIG9ubHkgb25lIGluIHBsYXkuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGVyZSBjb3VsZCBiZSByZWxhdGVkIG9yIG92ZXJsYXBwaW5nIHNldHRpbmdzIEkgbmVlZCB0byBjb25zaWRlciwgb3IgZXZlbiBjb25mbGljdGluZyBvbmVzLiBUaGlzIGluaXRpYWwgY29uZmlndXJhdGlvbiBtaWdodCBiZSBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIGEgYmlnZ2VyIHBpY3R1cmUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cy4gRGlnZ2luZyBkZWVwZXIgaXMgYWx3YXlzIHRoZSBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6MDM6MTIuMjI5ODIxOTY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2MTQ2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnPTM5PWlmIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTQwLVxcbm5ldC9zY3RwL0tjb25maWc6NDE6Y29uZmlnIFNDVFBfREJHX09CSkNOVFxcbm5ldC9zY3RwL0tjb25maWctNDItXFx0Ym9vbCBcXFwiU0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1xcXCJcXG4tLVxcbm5ldC9zY3RwL0tjb25maWc9NTI9Y2hvaWNlXFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnLTYxLVxcbm5ldC9zY3RwL0tjb25maWc6NjI6Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcXG5uZXQvc2N0cC9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIkhNQUMtU0hBMjU2XFxcIlxcbm5ldC9zY3RwL0tjb25maWctNjQtXFxubmV0L3NjdHAvS2NvbmZpZzo2NTpjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcXG5uZXQvc2N0cC9LY29uZmlnLTY2LVxcdGJvb2wgXFxcIk5vbmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAzOjEyLjMzMTQ0MDc0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgxMzA1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBvYnZpb3VzbHkgYElQX1NDVFBgLiBJdCdzIHdoYXQgZHJpdmVzIHRoaXMgd2hvbGUgdGhpbmcuIE5vdywgdGhlIG1lYXQgb2YgdGhlIG1hdHRlci4uLlxuXG5Fc3NlbnRpYWxseSwgdGhlcmUncyBhIHBhdGNoIHRoYXQgYWx0ZXJzIHRoZSByZXR1cm4gYmVoYXZpb3Igb2YgYHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1gLiBJdCdzIG5vdyBnb2luZyB0byByZXR1cm4gYEVSUl9QVFJgIGluc3RlYWQgb2YgYE5VTExgLiBUaGUgaXNzdWUgYXJpc2VzIGluIGBzY3RwX3JlY3Ztc2dgLCB3aGVyZSB0aGUgY29kZSBjaGVja3MgZm9yIGBJU19FUlIoc2tiKWAuIEhvd2V2ZXIsIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCAqY2FuKiBzdGlsbCByZXR1cm4gYE5VTExgIOKAkyBzcGVjaWZpY2FsbHksIGBFUlJfUFRSKDApYCDigJMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBuYW1lbHkgd2hlbiBgUkNWX1NIVVRET1dOYCBpcyBzZXQuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IG9uIGBza2ItXHUwMDNlbGVuYC5cblxuVGhlcmVmb3JlLCB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgaW50cm9kdWNlcyBhIGJ1ZywgYW5kIGl0IGlzIGEgYnVnIHRoYXQgd2Ugc2hvdWxkIGFic29sdXRlbHkgdGFyZ2V0IGZvciBmdXp6aW5nLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRoYXQgbmVlZCB0byBiZSBpbiBmb2N1cyBhcmUgYHNjdHBfcmVjdm1zZ2AgYW5kIGBzY3RwX3NrYl9yZWN2X2RhdGFncmFtYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc2V0IHVwIHRvIGluY2x1ZGUgXCJJUF9TQ1RQXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTMsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjAzOjE3LjYxMjc0ODYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDk0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9yZWN2bXNnXCIsXG4gICAgXCJzY3RwX3NrYl9yZWN2X2RhdGFncmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBzY3RwX3NrYl9yZWN2X2RhdGFncmFtIHRvIHJldHVybiBFUlJfUFRSIGluc3RlYWQgb2YgTlVMTC4gSG93ZXZlciwgaW4gc2N0cF9yZWN2bXNnLCBpdCBjaGVja3MgSVNfRVJSKHNrYikgYnV0IHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gY2FuIHN0aWxsIHJldHVybiBOVUxMIChFUlJfUFRSKDApKSB3aGVuIFJDVl9TSFVURE9XTiBpcyBzZXQsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gc2tiLVxcdTAwM2VsZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYSBidWcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3JlY3Ztc2dcIixcbiAgICBcInNjdHBfc2tiX3JlY3ZfZGF0YWdyYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNjdHBfc2tiX3JlY3ZfZGF0YWdyYW0gdG8gcmV0dXJuIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMLiBIb3dldmVyLCBpbiBzY3RwX3JlY3Ztc2csIGl0IGNoZWNrcyBJU19FUlIoc2tiKSBidXQgc2N0cF9za2JfcmVjdl9kYXRhZ3JhbSBjYW4gc3RpbGwgcmV0dXJuIE5VTEwgKEVSUl9QVFIoMCkpIHdoZW4gUkNWX1NIVVRET1dOIGlzIHNldCwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBza2ItXFx1MDAzZWxlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhIGJ1ZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[1] Phase: Succeeded StartedAt: 2026-07-20 09:03:41 +0000 UTC FinishedAt: 2026-07-20 09:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 09:03:41 +0000 UTC FinishedAt: 2026-07-20 09:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2] Phase: Succeeded StartedAt: 2026-07-20 09:03:41 +0000 UTC FinishedAt: 2026-07-20 13:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 09:03:41 +0000 UTC FinishedAt: 2026-07-20 13:25:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 09:03:41 +0000 UTC FinishedAt: 2026-07-20 09:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 09:03:41 +0000 UTC FinishedAt: 2026-07-20 09:03:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjh4nr/series-workflowjh4nr-convert-artifact-616241922/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 09:04:01 +0000 UTC FinishedAt: 2026-07-20 09:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 09:04:01 +0000 UTC FinishedAt: 2026-07-20 09:37:30 +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:*28a02983-4bd4-4290-b617-e73686cdbf50,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-workflowjh4nr/series-workflowjh4nr-convert-artifact-616241922/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": "8db2bcf4-16aa-4aa9-8d23-498396d45c05", "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-workflowjh4nr/series-workflowjh4nr-build-action-2291837376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 09:04:01 +0000 UTC FinishedAt: 2026-07-20 09:37:20 +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:*28a02983-4bd4-4290-b617-e73686cdbf50,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-workflowjh4nr/series-workflowjh4nr-convert-artifact-616241922/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": "8db2bcf4-16aa-4aa9-8d23-498396d45c05", "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-workflowjh4nr/series-workflowjh4nr-build-action-2291837376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 09:37:30 +0000 UTC FinishedAt: 2026-07-20 09:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 09:37:30 +0000 UTC FinishedAt: 2026-07-20 09:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 09:37:30 +0000 UTC FinishedAt: 2026-07-20 09:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 09:37:30 +0000 UTC FinishedAt: 2026-07-20 09:37:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjh4nr/series-workflowjh4nr-convert-artifact-304599389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 09:37:40 +0000 UTC FinishedAt: 2026-07-20 09:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 09:37:40 +0000 UTC FinishedAt: 2026-07-20 09:40:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8db2bcf4-16aa-4aa9-8d23-498396d45c05,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-workflowjh4nr/series-workflowjh4nr-build-action-2291837376/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-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 09:40:50 +0000 UTC FinishedAt: 2026-07-20 09:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 09:40:50 +0000 UTC FinishedAt: 2026-07-20 09:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 09:40:50 +0000 UTC FinishedAt: 2026-07-20 10:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 09:40:50 +0000 UTC FinishedAt: 2026-07-20 10:20:40 +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:*28a02983-4bd4-4290-b617-e73686cdbf50,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-workflowjh4nr/series-workflowjh4nr-convert-artifact-304599389/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": "e4b39daf-f862-498e-8aeb-c22b5a168551", "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-workflowjh4nr/series-workflowjh4nr-build-action-1031606841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 09:40:50 +0000 UTC FinishedAt: 2026-07-20 10:20:30 +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:*28a02983-4bd4-4290-b617-e73686cdbf50,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-workflowjh4nr/series-workflowjh4nr-convert-artifact-304599389/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": "e4b39daf-f862-498e-8aeb-c22b5a168551", "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-workflowjh4nr/series-workflowjh4nr-build-action-1031606841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 10:20:40 +0000 UTC FinishedAt: 2026-07-20 10:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 10:20:40 +0000 UTC FinishedAt: 2026-07-20 10:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 10:20:40 +0000 UTC FinishedAt: 2026-07-20 10:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 10:20:40 +0000 UTC FinishedAt: 2026-07-20 10:22:21 +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:*e4b39daf-f862-498e-8aeb-c22b5a168551,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-workflowjh4nr/series-workflowjh4nr-build-action-1031606841/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-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 10:22:32 +0000 UTC FinishedAt: 2026-07-20 13:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 10:22:32 +0000 UTC FinishedAt: 2026-07-20 13:25:57 +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":["sctp_recvmsg","sctp_skb_recv_datagram"],"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:*8db2bcf4-16aa-4aa9-8d23-498396d45c05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4b39daf-f862-498e-8aeb-c22b5a168551,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-workflowjh4nr/series-workflowjh4nr-build-action-2291837376/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-workflowjh4nr/series-workflowjh4nr-build-action-1031606841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 10:22:32 +0000 UTC FinishedAt: 2026-07-20 10:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 10:22:32 +0000 UTC FinishedAt: 2026-07-20 10:22:41 +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":["sctp_recvmsg","sctp_skb_recv_datagram"],"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-workflowjh4nr/series-workflowjh4nr-convert-artifact-1605251554/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 10:22:32 +0000 UTC FinishedAt: 2026-07-20 10:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 10:22:32 +0000 UTC FinishedAt: 2026-07-20 10:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 10:22:32 +0000 UTC FinishedAt: 2026-07-20 10:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 10:22:53 +0000 UTC FinishedAt: 2026-07-20 13:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjh4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_recvmsg","sctp_skb_recv_datagram"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e13caf1c26587434f0b768193100440939c0fb91","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f979ded9-9743-486d-b911-69a904c9f4ad","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 10:22:53 +0000 UTC FinishedAt: 2026-07-20 13:25:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8db2bcf4-16aa-4aa9-8d23-498396d45c05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4b39daf-f862-498e-8aeb-c22b5a168551,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-workflowjh4nr/series-workflowjh4nr-build-action-2291837376/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-workflowjh4nr/series-workflowjh4nr-build-action-1031606841/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-workflowjh4nr/series-workflowjh4nr-convert-artifact-1605251554/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,}