Name: series-workflowckdnm Phase: Succeeded StartedAt: 2026-09-02 23:22:04 +0000 UTC FinishedAt: 2026-09-03 03:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[0] Phase: Succeeded StartedAt: 2026-09-02 23:22:04 +0000 UTC FinishedAt: 2026-09-02 23:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 23:22:04 +0000 UTC FinishedAt: 2026-09-02 23:25:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "5bf14877-d43f-4bab-8e13-e061bc97cf74" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_symlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZGApIGJlZm9yZSBpbnZva2luZyBgYWxsb3dfbGlua2AuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmcyBzeW1saW5rIGhhbmRsaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgcmFjZXMgd2hlbiBzeW1saW5rcyBhcmUgY3JlYXRlZCB1bmRlciBkZWZhdWx0IGdyb3VwcyBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZyBpdGVtIGFuZCBjaGVja2luZyBpZiB0aGUgZGlyZWN0b3J5IGZyYWdtZW50IGhhcyBiZWVuIG1hcmtlZCBkZWFkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIzOjI0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNWZlMzcyMmJkZGNmMSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgJiM0MzsxMzEsMTkgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHJvb3RfZGVudHJ5KSB7XG4mIzQzO1x0XHRzZCA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuJiM0MztcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDtcbiYjNDM7fVxuIFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG5AQCAtMTM5LDYgJiM0MzsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XG4gXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiBcbiBcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuQEAgLTE1Nyw2ICYjNDM7MTcxLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiYjNDM7XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbkBAIC0xOTIsOCAmIzQzOzIxMiwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRlbHNlXG4gXHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0aWYgKHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWQpXG4mIzQzO1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xuJiM0MztcdH1cbiBcdGlmICghcmV0KSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gXHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbkBAIC0yMDcsNiAmIzQzOzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBvdXRfcHV0OlxuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbiYjNDM7XHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmcyBzeW1saW5rIGhhbmRsaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgcmFjZXMgd2hlbiBzeW1saW5rcyBhcmUgY3JlYXRlZCB1bmRlciBkZWZhdWx0IGdyb3VwcyBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZyBpdGVtIGFuZCBjaGVja2luZyBpZiB0aGUgZGlyZWN0b3J5IGZyYWdtZW50IGhhcyBiZWVuIG1hcmtlZCBkZWFkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIzOjI0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLjVmZTM3MjJiZGRjZjEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSw2ICYjNDM7MTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5OwomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJd2hpbGUgKHJvb3RfZGVudHJ5KSB7CiYjNDM7CQlzZCA9IHJvb3RfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCkBAIC0xMzksNiAmIzQzOzE1Miw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiAKIAlzZCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwpAQCAtMTU3LDYgJiM0MzsxNzEsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwogCS8qCiAJICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mCiAJICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWQKQEAgLTE5Miw4ICYjNDM7MjEyLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAllbHNlCiAJCXJldCA9IGlub2RlX3Blcm1pc3Npb24oJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsCiAJCQkJICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCWlmIChzZC0mZ3Q7c19mcmFnLSZndDtmcmFnX2RlYWQpCiYjNDM7CQkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXQgPSB0eXBlLSZndDtjdF9pdGVtX29wcy0mZ3Q7YWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pOwomIzQzOwl9CiAJaWYgKCFyZXQpIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpOwogCQlyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7CkBAIC0yMDcsNiAmIzQzOzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogb3V0X3B1dDoKIAljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwomIzQzOwljb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgd29ydGggdGFyZ2V0aW5nIHdpdGggZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWdmc19zeW1saW5rKClgIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeSlgIGFuZCBwaW5uaW5nIHRoZSByb290IG9iamVjdC4gVGhlIGludGVudCBoZXJlIGlzIG9idmlvdXNseSB0byBwcmV2ZW50IHRoZSBgcGFyZW50X2l0ZW1gLCB3aGljaCBjb3VsZCBiZSBhIGRlZmF1bHQgZ3JvdXAsIGZyb20gYmVpbmcgZnJlZWQgcHJlbWF0dXJlbHkgd2hpbGUgdGhlIGxvY2sgaXMgYmVpbmcgZHJvcHBlZC4gU21hcnQuIEFsc28sIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrIGluIHBsYWNlIGZvciBgc2QtJmd0O3NfZnJhZy0mZ3Q7ZnJhZ19kZWFkYC4gQW5kIGZpbmFsbHksIHRoZSBjb2RlJiMzOTtzIHB1dHRpbmcgYHJvb3RfaXRlbWAgYXQgY2xlYW51cC4KCk5vdywgbXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgYGZzL2NvbmZpZ2ZzL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRoZW4sIG9uY2UgSSBoYXZlIGEgYmV0dGVyIGlkZWEgb2YgdGhlIG92ZXJhbGwgZnVuY3Rpb24sIEnigJlsbCBydW4gc29tZSBmdXp6aW5nIHRvb2xzIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT01Nz1vYmotJChDT05GSUdfU1lTRlMpXHRcdCYjNDM7PSBzeXNmcy9cbmZzL01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcdCYjNDM7PSBjb25maWdmcy9cbmZzL01ha2VmaWxlLTU5LW9iai15XHRcdFx0XHQmIzQzOz0gZGV2cHRzL1xuLS1cbmZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNS1cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0JiM0Mzs9IGNvbmZpZ2ZzLm9cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlLTctXG4tLVxuZnMvZGxtL0tjb25maWc9Mj1tZW51Y29uZmlnIERMTVxuLS1cbmZzL2RsbS9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIElORVRcbmZzL2RsbS9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuZnMvZGxtL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9nZnMyL0tjb25maWc9Mjc9Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cbi0tXG5mcy9nZnMyL0tjb25maWctMjktXHRkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBJTkVUIFx1MDAyNlx1MDAyNiBcXFxuZnMvZ2ZzMi9LY29uZmlnOjMwOlx0XHRDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IChETE09eSB8fCBETE09R0ZTMl9GUylcbmZzL2dmczIvS2NvbmZpZy0zMS1cdGhlbHBcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuZnMvb2NmczIvS2NvbmZpZy01LVx0c2VsZWN0IEJVRkZFUl9IRUFEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgY29uZmlnZnMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGNvbmZpZ2ZzYCBpbXBsZW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHR3byBzcGVjaWZpYyBhcmVhcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGZzL2NvbmZpZ2ZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgbW9kdWxlLCBzbyB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxldmFudCBidWlsZC10aW1lIHNldHRpbmdzLiBJdCB3aWxsIGdpdmUgbWUgdGhlIGJyb2FkIGNvbnRleHQuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBjb2RlIHRoYXQgaGFuZGxlcyBzeW1ib2xpYyBsaW5rIGNyZWF0aW9uIGFuZCByZXNvbHV0aW9uIHRoZXJlLiBUaGF0IHdvdWxkIGJlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGhvdyBzeW1ib2xpYyBsaW5rcyBhcmUgaW1wbGVtZW50ZWQgd2l0aGluIGBjb25maWdmc2AsIGFueSBzcGVjaWZpYyBjaGVja3MsIG9yIHVuaXF1ZSBiZWhhdmlvcnMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXNpZ24uIFRob3NlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBjb25maWdmc2AgaGFuZGxlcyBzeW1ib2xpYyBsaW5rcyBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENPTkZJR0ZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBjb25maWdmcyBpcyBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlXG4gICA2Olx0XHQgIG9mIHN5c2ZzJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIFdoZXJlIHN5c2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZFxuICAgNzpcdFx0ICB2aWV3IG9mIGtlcm5lbCBvYmplY3RzLCBjb25maWdmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWQgbWFuYWdlclxuICAgODpcdFx0ICBvZiBrZXJuZWwgb2JqZWN0cywgb3IgY29uZmlnX2l0ZW1zLlxuICAgOTpcdFxuICAxMDpcdFx0ICBCb3RoIHN5c2ZzIGFuZCBjb25maWdmcyBjYW4gYW5kIHNob3VsZCBleGlzdCB0b2dldGhlciBvbiB0aGVcbiAgMTE6XHRcdCAgc2FtZSBzeXN0ZW0uIE9uZSBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgdGhlIG90aGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUga2VybmVsOgoKKipEZWx2aW5nIGludG8gdGhlIFN5bWJvbGljIExpbmsgTG9naWMgaW4gQ29uZmlnRlMqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgc3Vycm91bmRpbmcgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGhvdyBzeW1ib2xpYyBsaW5rcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIENvbmZpZ0ZTIGZyYW1ld29yay4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBib3RoIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBjcmVhdGlvbiwgcmVzb2x1dGlvbiwgYW5kIGRlbGV0aW9uIG9mIHRoZXNlIGxpbmtzIHdpdGhpbiB0aGUgQ29uZmlnRlMgaGllcmFyY2h5LiBBcmUgdGhlcmUgYW55IGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcsIHN1Y2ggYXMgbG9vcCBkZXRlY3Rpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBvciBwb3RlbnRpYWwgcmVzb3VyY2UgZXhoYXVzdGlvbiB2dWxuZXJhYmlsaXRpZXM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBgaW5vZGVgIGFuZCBgZGVudHJ5YCBvcGVyYXRpb25zIGhlcmUsIGZvY3VzaW5nIG9uIHRoZSBsaW5rJiMzOTtzIGNyZWF0aW9uIGFuZCB3aGF0IGhvb2tzIGFyZSB1c2VkIGZvciBpdHMgcmVzb2x1dGlvbi4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgQ29uZmlnRlMtbGV2ZWwgY2hlY2tzIGJleW9uZCB0aGUgc3RhbmRhcmQgZmlsZSBzeXN0ZW0gb25lcy4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwYXRoIGZyb20gdGhlIHVzZXIgc3BhY2UgYHN5bWxpbmsoKWAgY2FsbCB0byB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgaW50ZXJuYWwgaGFuZGxpbmcgYW5kIGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTMxOlx0XHRyZXR1cm4gMDtcbiAxMzI6XHR9XG4gMTMzOlx0XG4gMTM0Olx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XG4gMTM3Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlIChyb290X2RlbnRyeSkge1xuIDE0MDpcdFx0XHRzZCA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuIDE0MTpcdFx0XHRpZiAoIXNkIHx8ICEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxuIDE0MjpcdFx0XHRcdGJyZWFrO1xuIDE0MzpcdFx0XHRyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuIDE0NDpcdFx0fVxuIDE0NTpcdFx0cmV0dXJuIHJvb3RfZGVudHJ5ID8gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KSA6IE5VTEw7XG4gMTQ2Olx0fVxuIDE0NzpcdFxuIDE0ODpcdGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiAxNDk6XHRcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4gMTUwOlx0e1xuIDE1MTpcdFx0aW50IHJldDtcbiAxNTI6XHRcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuIDE1MzpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcbiAxNTQ6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xuIDE1NTpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xuIDE1NjpcdFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4gMTU3Olx0XG4gMTU4Olx0XHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbiAxNTk6XHRcdC8qXG4gMTYwOlx0XHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxuIDE2MTpcdFx0ICogYmVpbmcgYXR0YWNoZWRcbiAxNjI6XHRcdCAqL1xuIDE2MzpcdFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxNjU6XHRcbiAxNjY6XHRcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTY3Olx0XHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiAxNjg6XHRcbiAxNjk6XHRcdHJldCA9IC1FUEVSTTtcbiAxNzA6XHRcdGlmICghdHlwZSB8fCAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcyB8fFxuIDE3MTpcdFx0ICAgICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmspXG4gMTcyOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAxNzM6XHRcbiAxNzQ6XHRcdC8qXG4gMTc1Olx0XHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiAxNzY6XHRcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxuIDE3NzpcdFx0ICovXG4gMTc4Olx0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTc5Olx0XG4gMTgwOlx0XHQvKlxuIDE4MTpcdFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXG4gMTgyOlx0XHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxuIDE4MzpcdFx0ICogYXQgc3lzY2FsbCB0aW1lIChhcyBsaW5rKDIpIHdvdWxkJiMzOTt2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcbiAxODQ6XHRcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJiMzOTt2ZSByZWZ1c2VkIHRvIGRvKSAqQU5EKiBiZSBhIGRlZXBcbiAxODU6XHRcdCAqIGZ1Y2tpbmcgbWFnaWMsIG1ha2luZyB0aGUgdGFyZ2V0IGJ1c3kgZnJvbSBybWRpciBQT1YuXG4gMTg2Olx0XHQgKiBzeW1saW5rKDIpIGlzIG5vdGhpbmcgb2YgdGhhdCBzb3J0LCBhbmQgdGhlIGxvY2tpbmcgaXRcbiAxODc6XHRcdCAqIGdldHMgbWF0Y2hlcyB0aGUgbm9ybWFsIHN5bWxpbmsoMikgc2VtYW50aWNzLiAgV2l0aG91dFxuIDE4ODpcdFx0ICogYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgdGFyZ2V0ICh3aGljaCBtaWdodCB2ZXJ5IHdlbGxcbiAxODk6XHRcdCAqIG5vdCBldmVuIGV4aXN0IHlldCkgZG9uZSBwcmlvciB0byBsb2NraW5nIHRoZSBwYXJlbnRcbiAxOTA6XHRcdCAqIGRpcmVjdG9yeS4gIFRoaXMgcGVydmVyc2lvbiwgT1RPSCwgbmVlZHMgdG8gcmVzb2x2ZVxuIDE5MTpcdFx0ICogdGhlIHRhcmdldCwgd2hpY2ggd291bGQgbGVhZCB0byBvYnZpb3VzIGRlYWRsb2NrcyBpZlxuIDE5MjpcdFx0ICogYXR0ZW1wdGVkIHdpdGggYW55IGRpcmVjdG9yaWVzIGxvY2tlZC5cbiAxOTM6XHRcdCAqXG4gMTk0Olx0XHQgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGdhcmJhZ2UgaXMgdXNlcmxhbmQgQUJJIGFuZCB3ZSBzaG91bGQmIzM5O3ZlXG4gMTk1Olx0XHQgKiBzYWlkIFwmIzM0O25vXCYjMzQ7IGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXG4gMTk2Olx0XHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXG4gMTk3Olx0XHQgKlxuIDE5ODpcdFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcbiAxOTk6XHRcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXG4gMjAwOlx0XHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XG4gMjAxOlx0XHQgKlxuIDIwMjpcdFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxuIDIwMzpcdFx0ICovXG4gMjA0Olx0XHRpbm9kZV91bmxvY2soZGlyKTtcbiAyMDU6XHRcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXHUwMDI2dGFyZ2V0X2l0ZW0sIGRlbnRyeS1cdTAwM2VkX3NiKTtcbiAyMDY6XHRcdGlub2RlX2xvY2soZGlyKTtcbiAyMDc6XHRcdGlmIChyZXQpXG4gMjA4Olx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMDk6XHRcbiAyMTA6XHRcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gMjExOlx0XHRcdHJldCA9IC1FRVhJU1Q7XG4gMjEyOlx0XHRlbHNlXG4gMjEzOlx0XHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIDIxNDpcdFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiAyMTU6XHRcdGlmICghcmV0KSB7XG4gMjE2Olx0XHRcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkKVxuIDIxNzpcdFx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMjE4Olx0XHRcdGVsc2VcbiAyMTk6XHRcdFx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbiAyMjA6XHRcdH1cbiAyMjE6XHRcdGlmICghcmV0KSB7XG4gMjIyOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gMjIzOlx0XHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbiAyMjQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuIDIyNTpcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWRyb3BfbGluaylcbiAyMjY6XHRcdFx0XHR0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWRyb3BfbGluayhwYXJlbnRfaXRlbSxcbiAyMjc6XHRcdFx0XHRcdFx0XHQgICAgIHRhcmdldF9pdGVtKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQyCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBjb25maWdmc19zeW1saW5rYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBjb25maWdmc19zeW1saW5rYCBpcyBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgaW5vZGUgb3BlcmF0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzeW1saW5rIGNyZWF0aW9uIHdpdGhpbiBjb25maWdmcyBkaXJlY3Rvcmllcy4gRXNzZW50aWFsbHksIHdoZW5ldmVyIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYWxscyBgc3ltbGluaygyKWAgb24gYSBjb25maWdmcyBtb3VudCwgdGhpcyBmdW5jdGlvbiBnZXRzIGV4ZWN1dGVkLiBUaGlzIGlzIGEga2V5IHBpZWNlIG9mIGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiB0aGUgVkZTLCBzcGVjaWZpY2FsbHkgaW4gaG93IGNvbmZpZ2ZzIGJlaGF2ZXMsIGFuZCBpdCYjMzk7cyBlYXNpbHkgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIGV2ZW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLgoKVGhlIG1haW4gZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHJlc29sdmluZyB0aGUgc3ltbGluayYjMzk7cyB0YXJnZXQgb3IgaWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMgZGVsZXRlZCBjb25jdXJyZW50bHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBsb2NraW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIGBjb25maWdmc19zeW1saW5rYCBvcGVyYXRpb24uCgpEaXZpbmcgZGVlcGVyLCB0aGUgYW5hbHlzaXMgc2hvd3MgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIFRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzLCBuYXR1cmFsbHksIGBjb25maWdmc19zeW1saW5rYC4gQSBoZWxwZXIgZnVuY3Rpb24sIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCwgd2FzIGFsc28gYWRkZWQuIFRoZSBwcmltYXJ5IGZvY3VzIGZvciB0ZXN0aW5nIG9yIGZ1enppbmcgd2lsbCBiZSB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9uLCBzaW5jZSBpdCBpcyB0aGUgZW50cnlwb2ludCBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4KCk5vdywgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4gSXQgYXBwZWFycyB0aGUgb25seSBLY29uZmlnIG9wdGlvbiByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdGU19GU2AuIEEgcXVpY2sgbG9vayBhdCBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgY29uZmlybXMgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdGU19GU2AuIEl0JiMzOTtzIGEgc3RhbmRhbG9uZSBmZWF0dXJlLgoKRmluYWxseSwgY29uZmlybWluZyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYToKKiAgIEl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBjcmVhdGlvbiBvZiBjb25maWdmcyBzeW1saW5rcyBhbmQgcmVsYXRlZCBpdGVtIHBpbm5pbmcuCiogICBJdCYjMzk7cyByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzOyBtb3VudGluZyBjb25maWdmcyBhbmQgY3JlYXRpbmcgc3ltbGlua3Mgd2l0aCBgc3ltbGluaygyKWAuCiogICBUaGUgZm9jdXMgc3ltYm9sIGlzIGNsZWFybHkgYGNvbmZpZ2ZzX3N5bWxpbmtgLgoqICAgVGhlIGVuYWJsaW5nIGNvbmZpZyBpcyBgQ09ORklHRlNfRlNgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmcyBzeW1saW5rIGhhbmRsaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgcmFjZXMgd2hlbiBzeW1saW5rcyBhcmUgY3JlYXRlZCB1bmRlciBkZWZhdWx0IGdyb3VwcyBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZyBpdGVtIGFuZCBjaGVja2luZyBpZiB0aGUgZGlyZWN0b3J5IGZyYWdtZW50IGhhcyBiZWVuIG1hcmtlZCBkZWFkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzIHN5bWxpbmsgaGFuZGxpbmcgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSByYWNlcyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIHVuZGVyIGRlZmF1bHQgZ3JvdXBzIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnIGl0ZW0gYW5kIGNoZWNraW5nIGlmIHRoZSBkaXJlY3RvcnkgZnJhZ21lbnQgaGFzIGJlZW4gbWFya2VkIGRlYWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGNvbmZpZ2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgc3ltbGluayBjcmVhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSByb290IGNvbmZpZ19pdGVtIGhpZXJhcmNoeSAocHJldmVudGluZyBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwIGl0ZW1zIGZyb20gYmVpbmcgZnJlZWQgd2hpbGUgaW5vZGUgbG9ja3MgYXJlIHRlbXBvcmFyaWx5IGRyb3BwZWQpIGFuZCBjaGVja3MgaWYgdGhlIGZyYWdtZW50IGlzIGRlYWQgKGBzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkYCkgYmVmb3JlIGludm9raW5nIGBhbGxvd19saW5rYC5cblxuVGhpcyBjaGFuZ2Ugc29sZWx5IGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZywgcG9pbnRlciBuYXZpZ2F0aW9uLCBhbmQgY29udHJvbCBmbG93IGZvciBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBidWZmZXJzIHRvIHVzZXJzcGFjZS4gVUFGIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLCBtZWFuaW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIzOjI0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLjVmZTM3MjJiZGRjZjEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSw2ICYjNDM7MTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5OwomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJd2hpbGUgKHJvb3RfZGVudHJ5KSB7CiYjNDM7CQlzZCA9IHJvb3RfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCkBAIC0xMzksNiAmIzQzOzE1Miw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiAKIAlzZCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwpAQCAtMTU3LDYgJiM0MzsxNzEsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwogCS8qCiAJICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mCiAJICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWQKQEAgLTE5Miw4ICYjNDM7MjEyLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAllbHNlCiAJCXJldCA9IGlub2RlX3Blcm1pc3Npb24oJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsCiAJCQkJICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCWlmIChzZC0mZ3Q7c19mcmFnLSZndDtmcmFnX2RlYWQpCiYjNDM7CQkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXQgPSB0eXBlLSZndDtjdF9pdGVtX29wcy0mZ3Q7YWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pOwomIzQzOwl9CiAJaWYgKCFyZXQpIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpOwogCQlyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7CkBAIC0yMDcsNiAmIzQzOzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogb3V0X3B1dDoKIAljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwomIzQzOwljb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgU3ltbGluayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBmb3IgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgaGVyZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdG8gZGl2ZSBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBjaGFuZ2UgaXMgZG9pbmcuIFRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYWRkaXRpb24gb2YgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KWAuIFRoaXMgc291bmRzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHdhbGtpbmcgdXAgdGhlIGRlbnRyeSB0cmVlLCBjaGVja2luZyBgc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFRgIGFsb25nIHRoZSB3YXksIHRvIGxvY2F0ZSB0aGUgcm9vdCBpdGVtLiBUaGVuIGl0IHBpbnMgdGhlIHJvb3QgaXRlbSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtYC4gVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIHNvcnQgb2YgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBpbiBDb25maWdGUywgYW5kIHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gZmluZCB0aGUgdG9wIGxldmVsIG9mIHRoYXQgaGllcmFyY2h5LgoKVGhlbiwgbG9va2luZyBhdCBgY29uZmlnZnNfc3ltbGluaygpYCBpdHNlbGYsIGl0IHVzZXMgdGhhdCBuZXdseSBkZWZpbmVkIGBjb25maWdmc19nZXRfcm9vdF9pdGVtKClgIHRvIGdyYWIgdGhlIHJvb3Qgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkuIEl0IGRvZXMgc29tZSBjaGVja3MgcmVsYXRlZCB0byBgc2QtJmd0O3NfZnJhZy0mZ3Q7ZnJhZ19kZWFkYCBhbmQgdGhlbiBjYWxscyBgdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmsoLi4uKWAgcG90ZW50aWFsbHkgcGVyZm9ybWluZyBzb21lIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gVGhlIHVzZSBvZiBgZnJhZ19kZWFkYCBpcyB3b3J0aCBub3Rpbmc7IGl0IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBkZWZlcnJlZCBvciBsYXp5IGJlaGF2aW9yIGluIHRoZSBmaWxlIHN5c3RlbS4gQW5kIGZpbmFsbHksIGluIHRoZSBgb3V0X3B1dDpgIHNlY3Rpb24sIGl0IHJlbGVhc2VzIHRoZSByb290IGl0ZW0gdXNpbmcgYGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pYC4gVGhhdCBpbXBsaWVzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBnb29kIHRvIHNlZS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCB6b29tIG91dCBhbmQgdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIGBjb25maWdmc19zeW1saW5rYCB3aXRoaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sLCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9yIHBvc3NpYmx5IGJvdGgsIHRvIHRob3JvdWdobHkgZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBwYXRjaCB3YXMgbmVjZXNzYXJ5IGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgbWlnaHQgZXhpc3QuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDEzMTpcdFx0cmV0dXJuIDA7XG4gMTMyOlx0fVxuIDEzMzpcdFxuIDEzNDpcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIDEzNTpcdHtcbiAxMzY6XHRcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuIDEzNzpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTM4Olx0XG4gMTM5Olx0XHR3aGlsZSAocm9vdF9kZW50cnkpIHtcbiAxNDA6XHRcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiAxNDE6XHRcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiAxNDI6XHRcdFx0XHRicmVhaztcbiAxNDM6XHRcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiAxNDQ6XHRcdH1cbiAxNDU6XHRcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHRpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gMTQ5Olx0XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIDE1MDpcdHtcbiAxNTE6XHRcdGludCByZXQ7XG4gMTUyOlx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxNTM6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gMTU0Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiAxNTU6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiAxNTY6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDE1NzpcdFxuIDE1ODpcdFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gMTU5Olx0XHQvKlxuIDE2MDpcdFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcbiAxNjE6XHRcdCAqIGJlaW5nIGF0dGFjaGVkXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcbiAxNjQ6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTY1Olx0XG4gMTY2Olx0XHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE2NzpcdFx0dHlwZSA9IHBhcmVudF9pdGVtLVx1MDAzZWNpX3R5cGU7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZXQgPSAtRVBFUk07XG4gMTcwOlx0XHRpZiAoIXR5cGUgfHwgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMgfHxcbiAxNzE6XHRcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIDE3MjpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTczOlx0XG4gMTc0Olx0XHQvKlxuIDE3NTpcdFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4gMTc2Olx0XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiAxNzc6XHRcdCAqL1xuIDE3ODpcdFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE3OTpcdFxuIDE4MDpcdFx0LypcbiAxODE6XHRcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIDE4MjpcdFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbiAxODM6XHRcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCYjMzk7dmUgZG9uZSksIGJlIGEgZGlyZWN0b3J5XG4gMTg0Olx0XHQgKiAod2hpY2ggbGluaygyKSB3b3VsZCYjMzk7dmUgcmVmdXNlZCB0byBkbykgKkFORCogYmUgYSBkZWVwXG4gMTg1Olx0XHQgKiBmdWNraW5nIG1hZ2ljLCBtYWtpbmcgdGhlIHRhcmdldCBidXN5IGZyb20gcm1kaXIgUE9WLlxuIDE4NjpcdFx0ICogc3ltbGluaygyKSBpcyBub3RoaW5nIG9mIHRoYXQgc29ydCwgYW5kIHRoZSBsb2NraW5nIGl0XG4gMTg3Olx0XHQgKiBnZXRzIG1hdGNoZXMgdGhlIG5vcm1hbCBzeW1saW5rKDIpIHNlbWFudGljcy4gIFdpdGhvdXRcbiAxODg6XHRcdCAqIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHRhcmdldCAod2hpY2ggbWlnaHQgdmVyeSB3ZWxsXG4gMTg5Olx0XHQgKiBub3QgZXZlbiBleGlzdCB5ZXQpIGRvbmUgcHJpb3IgdG8gbG9ja2luZyB0aGUgcGFyZW50XG4gMTkwOlx0XHQgKiBkaXJlY3RvcnkuICBUaGlzIHBlcnZlcnNpb24sIE9UT0gsIG5lZWRzIHRvIHJlc29sdmVcbiAxOTE6XHRcdCAqIHRoZSB0YXJnZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gb2J2aW91cyBkZWFkbG9ja3MgaWZcbiAxOTI6XHRcdCAqIGF0dGVtcHRlZCB3aXRoIGFueSBkaXJlY3RvcmllcyBsb2NrZWQuXG4gMTkzOlx0XHQgKlxuIDE5NDpcdFx0ICogVW5mb3J0dW5hdGVseSwgdGhhdCBnYXJiYWdlIGlzIHVzZXJsYW5kIEFCSSBhbmQgd2Ugc2hvdWxkJiMzOTt2ZVxuIDE5NTpcdFx0ICogc2FpZCBcJiMzNDtub1wmIzM0OyBiYWNrIGluIDIwMDUuICBUb28gbGF0ZSBub3csIHNvIHdlIGdldCB0b1xuIDE5NjpcdFx0ICogcGxheSB2ZXJ5IHVnbHkgZ2FtZXMgd2l0aCBsb2NraW5nLlxuIDE5NzpcdFx0ICpcbiAxOTg6XHRcdCAqIFRyeSAqQU5ZVEhJTkcqIG9mIHRoYXQgc29ydCBpbiBuZXcgY29kZSwgYW5kIHlvdSB3aWxsXG4gMTk5Olx0XHQgKiByZWFsbHkgcmVncmV0IGl0LiAgSnVzdCBhc2sgeW91cnNlbGYgLSB3aGF0IGNvdWxkIGEgQk9GSFxuIDIwMDpcdFx0ICogZG8gdG8gbWUgYW5kIGRvIEkgd2FudCB0byBmaW5kIGl0IG91dCBmaXJzdC1oYW5kP1xuIDIwMTpcdFx0ICpcbiAyMDI6XHRcdCAqICBBViwgYSB0aG9yb3VnaGx5IGFubm95ZWQgYmFzdGFyZC5cbiAyMDM6XHRcdCAqL1xuIDIwNDpcdFx0aW5vZGVfdW5sb2NrKGRpcik7XG4gMjA1Olx0XHRyZXQgPSBnZXRfdGFyZ2V0KHN5bW5hbWUsIFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXHUwMDNlZF9zYik7XG4gMjA2Olx0XHRpbm9kZV9sb2NrKGRpcik7XG4gMjA3Olx0XHRpZiAocmV0KVxuIDIwODpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMjA5Olx0XG4gMjEwOlx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxuIDIxMTpcdFx0XHRyZXQgPSAtRUVYSVNUO1xuIDIxMjpcdFx0ZWxzZVxuIDIxMzpcdFx0XHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcbiAyMTQ6XHRcdFx0XHRcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gMjE1Olx0XHRpZiAoIXJldCkge1xuIDIxNjpcdFx0XHRpZiAoc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZClcbiAyMTc6XHRcdFx0XHRyZXQgPSAtRU5PRU5UO1xuIDIxODpcdFx0XHRlbHNlXG4gMjE5Olx0XHRcdFx0cmV0ID0gdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XG4gMjIwOlx0XHR9XG4gMjIxOlx0XHRpZiAoIXJldCkge1xuIDIyMjpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuIDIyMzpcdFx0XHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XG4gMjI0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcbiAyMjU6XHRcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmspXG4gMjI2Olx0XHRcdFx0dHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmsocGFyZW50X2l0ZW0sXG4gMjI3Olx0XHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gMjI4Olx0XHR9XG4gMjI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjAKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGFuZCB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gcHJldmVudGluZyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGFuZCBvYmplY3QgbGlmZXRpbWUgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgcGFyZW50X2l0ZW1gLCBwb3RlbnRpYWxseSBhbiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwLCBjb3VsZCBiZSBmcmVlZCB3aGlsZSB0aGUgZGlyZWN0b3J5IGlub2RlIChgZGlyYCkgaXMgdW5sb2NrZWQgZHVyaW5nIGBnZXRfdGFyZ2V0KClgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBLQVNBTiBzY2VuYXJpbywgYW5kIHRoZSBwYXRjaCBhZGRyZXNzZXMgaXQgZGlyZWN0bHkuIEl0IGFsc28gaW5jbHVkZXMgYSBjaGVjayBmb3IgYHNkLSZndDtzX2ZyYWctJmd0O2ZyYWdfZGVhZGAgYmVmb3JlIGNhbGxpbmcgYGFsbG93X2xpbmtgLCB3aGljaCBzb3VuZHMgbGlrZSBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUuIEFuZCBvZiBjb3Vyc2UsIHRoZSBwYXRjaCBpcyBhbHNvIHRha2luZyBjYXJlIHRvIHByb3Blcmx5IG1hbmFnZSB0aGUgcmVmY291bnQgb2YgdGhlIHJvb3Qgb2JqZWN0LgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgY2F0Y2hpbmcuIExldCYjMzk7cyBzZWUuLi4gbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgYmVpbmcgZG9uZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGBrbWFsbG9jYCwgYG1hbGxvY2AsIG9yIHN0YWNrIHZhcmlhYmxlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gYHJvb3RfaXRlbWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAuIE5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdGhyb3VnaCBgY29weV90b191c2VyYCBvciBgcHV0X3VzZXJgLiBUaGVyZSBhcmUgbm8gY29uZGl0aW9uYWxzIHRoYXQgbWlnaHQgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGJ1Z3MgYmVpbmcgYWRkcmVzc2VkIGhlcmUgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBVQUYgYW5kIG9iamVjdCBsaWZldGltZSwgcHJlY2lzZWx5IHRoZSBraW5kIG9mIG1lbW9yeSBjb3JydXB0aW9uIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4KClRoZXJlZm9yZSwgZ2l2ZW4gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIGJlbGlldmUgdGhhdCB0aGlzIHBhdGNoIHJlcXVpcmVzIEtNU0FOIGFuYWx5c2lzLiBJdCYjMzk7cyBmb2N1c2VkIG9uIHByZXZlbnRpbmcgVUFGIGFuZCBsaWZldGltZSBpc3N1ZXMsIG5vdCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggaXMgdGhlIGRvbWFpbiBvZiBLTVNBTi4KClNvLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVxdWlyZW1lbnRzOiAxLiBLTVNBTlJlYXNvbmluZzogQ29udHJhc3RpbmcgS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eS4gMi4gTmVlZHNLTVNBTjogZmFsc2UuIE5vdywgdG8gbWFrZSB0aGlzIGNyeXN0YWwgY2xlYXIsIEkmIzM5O2xsIG5lZWQgdG8gY2xlYXJseSBmb3JtYXQgdGhlIEtNU0FOUmVhc29uaW5nIGFuZCB0aGVuIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbiBpbiBjb25maWdmcyBzeW1saW5rIGNyZWF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHBpbnMgdGhlIHJvb3QgY29uZmlnX2l0ZW0gaGllcmFyY2h5IChwcmV2ZW50aW5nIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXAgaXRlbXMgZnJvbSBiZWluZyBmcmVlZCB3aGlsZSBpbm9kZSBsb2NrcyBhcmUgdGVtcG9yYXJpbHkgZHJvcHBlZCkgYW5kIGNoZWNrcyBpZiB0aGUgZnJhZ21lbnQgaXMgZGVhZCAoYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgKSBiZWZvcmUgaW52b2tpbmcgYGFsbG93X2xpbmtgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nLCBwb2ludGVyIG5hdmlnYXRpb24sIGFuZCBjb250cm9sIGZsb3cgZm9yIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlLiBVQUYgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcsIG1lYW5pbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZGApIGJlZm9yZSBpbnZva2luZyBgYWxsb3dfbGlua2AuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo0My45NTU1MDk1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTIwNzAwMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgc3ltbGluayBjcmVhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSByb290IGNvbmZpZ19pdGVtIGhpZXJhcmNoeSAocHJldmVudGluZyBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwIGl0ZW1zIGZyb20gYmVpbmcgZnJlZWQgd2hpbGUgaW5vZGUgbG9ja3MgYXJlIHRlbXBvcmFyaWx5IGRyb3BwZWQpIGFuZCBjaGVja3MgaWYgdGhlIGZyYWdtZW50IGlzIGRlYWQgKGBzZC1cXHUwMDNlc19mcmFnLVxcdTAwM2VmcmFnX2RlYWRgKSBiZWZvcmUgaW52b2tpbmcgYGFsbG93X2xpbmtgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzIHN5bWxpbmsgaGFuZGxpbmcgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSByYWNlcyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIHVuZGVyIGRlZmF1bHQgZ3JvdXBzIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnIGl0ZW0gYW5kIGNoZWNraW5nIGlmIHRoZSBkaXJlY3RvcnkgZnJhZ21lbnQgaGFzIGJlZW4gbWFya2VkIGRlYWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo0My45NTU1MTQxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjUyNzE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzoyNDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcXG5pbmRleCAzMWViMjhiMjczMDkxLi41ZmUzNzIyYmRkY2YxIDEwMDY0NFxcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xcbisrKyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xcbkBAIC0xMzEsNiArMTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuK1xcbitcXHR3aGlsZSAocm9vdF9kZW50cnkpIHtcXG4rXFx0XFx0c2QgPSByb290X2RlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuK1xcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXFx1MDAzZWRfcGFyZW50O1xcbitcXHR9XFxuK1xcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xcbit9XFxuIFxcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbkBAIC0xMzksNiArMTUyLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4gXFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gXFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcXG4gXFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XFxuIFxcbiBcXHRzZCA9IGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfZnNkYXRhO1xcbkBAIC0xNTcsNiArMTcxLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0ICAgICF0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluaylcXG4gXFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuK1xcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxcbitcXHQgKi9cXG4rXFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiBcXHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxcbkBAIC0xOTIsOCArMjEyLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRyZXQgPSB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHRpZiAoc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkKVxcbitcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XFxuK1xcdH1cXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIFxcdFxcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcXG5AQCAtMjA3LDYgKzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFxuIG91dF9wdXQ6XFxuIFxcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XFxuK1xcdGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo0NS4zMDg4NzU3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTU1MTg1MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzIHN5bWxpbmsgaGFuZGxpbmcgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSByYWNlcyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIHVuZGVyIGRlZmF1bHQgZ3JvdXBzIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnIGl0ZW0gYW5kIGNoZWNraW5nIGlmIHRoZSBkaXJlY3RvcnkgZnJhZ21lbnQgaGFzIGJlZW4gbWFya2VkIGRlYWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMGEyNzQ1MDhhYTM0NGZhNmM1Mzc0MDkxZTdkYzdkYmRhYmJkYTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzoyNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNWZlMzcyMmJkZGNmMSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAocm9vdF9kZW50cnkpIHtcbitcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbitcdFx0XHRicmVhaztcbitcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdH1cbitcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG5AQCAtMTU3LDYgKzE3MSwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTkyLDggKzIxMiwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRlbHNlXG4gXHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdGlmICghcmV0KSB7XG4rXHRcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkKVxuK1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdH1cbiBcdGlmICghcmV0KSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gXHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbkBAIC0yMDcsNiArMjMxLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIG91dF9wdXQ6XG4gXHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xuK1x0Y29uZmlnX2l0ZW1fcHV0KHJvb3RfaXRlbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI0OjQ1LjMwODg3NzE0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjgwNzEyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG1pZ2h0IGJlIHdvcnRoIHRhcmdldGluZyB3aXRoIGZ1enppbmcuIExldCdzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWdmc19zeW1saW5rKClgIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJIHNlZSBpdCdzIGNhbGxpbmcgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5KWAgYW5kIHBpbm5pbmcgdGhlIHJvb3Qgb2JqZWN0LiBUaGUgaW50ZW50IGhlcmUgaXMgb2J2aW91c2x5IHRvIHByZXZlbnQgdGhlIGBwYXJlbnRfaXRlbWAsIHdoaWNoIGNvdWxkIGJlIGEgZGVmYXVsdCBncm91cCwgZnJvbSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseSB3aGlsZSB0aGUgbG9jayBpcyBiZWluZyBkcm9wcGVkLiBTbWFydC4gQWxzbywgdGhlcmUncyBhIG5ldyBjaGVjayBpbiBwbGFjZSBmb3IgYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgLiBBbmQgZmluYWxseSwgdGhlIGNvZGUncyBwdXR0aW5nIGByb290X2l0ZW1gIGF0IGNsZWFudXAuXG5cbk5vdywgbXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgZnMvY29uZmlnZnMvYCBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbCB0cmVlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGhlbiwgb25jZSBJIGhhdmUgYSBiZXR0ZXIgaWRlYSBvZiB0aGUgb3ZlcmFsbCBmdW5jdGlvbiwgSeKAmWxsIHJ1biBzb21lIGZ1enppbmcgdG9vbHMgdG8gbG9vayBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6MjQ6NTIuNjM2OTUyNzA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzQwMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01Nz1vYmotJChDT05GSUdfU1lTRlMpXFx0XFx0Kz0gc3lzZnMvXFxuZnMvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVxcdCs9IGNvbmZpZ2ZzL1xcbmZzL01ha2VmaWxlLTU5LW9iai15XFx0XFx0XFx0XFx0Kz0gZGV2cHRzL1xcbi0tXFxuZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNS1cXG5mcy9jb25maWdmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcXHQrPSBjb25maWdmcy5vXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cXG4tLVxcbmZzL2RsbS9LY29uZmlnPTI9bWVudWNvbmZpZyBETE1cXG4tLVxcbmZzL2RsbS9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUXFxuZnMvZGxtL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvZGxtL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9nZnMyL0tjb25maWc9Mjc9Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZnMvZ2ZzMi9LY29uZmlnOjMwOlxcdFxcdENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IChETE09eSB8fCBETE09R0ZTMl9GUylcXG5mcy9nZnMyL0tjb25maWctMzEtXFx0aGVscFxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo1Mi43MDg2OTc1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMzNDU4NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGNvbmZpZ2ZzIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGNvbmZpZ2ZzYCBpbXBsZW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdHdvIHNwZWNpZmljIGFyZWFzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9jb25maWdmcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgbW9kdWxlLCBzbyB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxldmFudCBidWlsZC10aW1lIHNldHRpbmdzLiBJdCB3aWxsIGdpdmUgbWUgdGhlIGJyb2FkIGNvbnRleHQuXG5cblRoZW4sIEknbSBnb2luZyB0byBsb29rIGF0IGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBhY3R1YWwgY29kZSB0aGF0IGhhbmRsZXMgc3ltYm9saWMgbGluayBjcmVhdGlvbiBhbmQgcmVzb2x1dGlvbiB0aGVyZS4gVGhhdCB3b3VsZCBiZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBob3cgc3ltYm9saWMgbGlua3MgYXJlIGltcGxlbWVudGVkIHdpdGhpbiBgY29uZmlnZnNgLCBhbnkgc3BlY2lmaWMgY2hlY2tzLCBvciB1bmlxdWUgYmVoYXZpb3JzLiBJJ20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXNpZ24uIFRob3NlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBjb25maWdmc2AgaGFuZGxlcyBzeW1ib2xpYyBsaW5rcyBhbmQgaG93IGl0J3MgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI0OjU1LjA0MjE1ODM4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDT05GSUdGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBjb25maWdmcyBpcyBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlXFxuICAgNjpcXHRcXHQgIG9mIHN5c2ZzJ3MgZnVuY3Rpb25hbGl0eS4gV2hlcmUgc3lzZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkXFxuICAgNzpcXHRcXHQgIHZpZXcgb2Yga2VybmVsIG9iamVjdHMsIGNvbmZpZ2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZCBtYW5hZ2VyXFxuICAgODpcXHRcXHQgIG9mIGtlcm5lbCBvYmplY3RzLCBvciBjb25maWdfaXRlbXMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXFxuICAxMTpcXHRcXHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6MjQ6NTUuMDQyMjIwMTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NDA1MjkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBrZXJuZWw6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBTeW1ib2xpYyBMaW5rIExvZ2ljIGluIENvbmZpZ0ZTKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgc3Vycm91bmRpbmcgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGhvdyBzeW1ib2xpYyBsaW5rcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIENvbmZpZ0ZTIGZyYW1ld29yay4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGJvdGggc2VjdXJpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbnNpZGVyIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNyZWF0aW9uLCByZXNvbHV0aW9uLCBhbmQgZGVsZXRpb24gb2YgdGhlc2UgbGlua3Mgd2l0aGluIHRoZSBDb25maWdGUyBoaWVyYXJjaHkuIEFyZSB0aGVyZSBhbnkgZWRnZSBjYXNlcyBJIHNob3VsZCBiZSBjb25zaWRlcmluZywgc3VjaCBhcyBsb29wIGRldGVjdGlvbiwgcGVybWlzc2lvbiBjaGVja3MsIG9yIHBvdGVudGlhbCByZXNvdXJjZSBleGhhdXN0aW9uIHZ1bG5lcmFiaWxpdGllcz8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgYGlub2RlYCBhbmQgYGRlbnRyeWAgb3BlcmF0aW9ucyBoZXJlLCBmb2N1c2luZyBvbiB0aGUgbGluaydzIGNyZWF0aW9uIGFuZCB3aGF0IGhvb2tzIGFyZSB1c2VkIGZvciBpdHMgcmVzb2x1dGlvbi4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBDb25maWdGUy1sZXZlbCBjaGVja3MgYmV5b25kIHRoZSBzdGFuZGFyZCBmaWxlIHN5c3RlbSBvbmVzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBhdGggZnJvbSB0aGUgdXNlciBzcGFjZSBgc3ltbGluaygpYCBjYWxsIHRvIHRoZSBmaWxlIHN5c3RlbSdzIGludGVybmFsIGhhbmRsaW5nIGFuZCBiYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo1Ny40MTYyNzU1NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gMTMxOlxcdFxcdHJldHVybiAwO1xcbiAxMzI6XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gMTM1OlxcdHtcXG4gMTM2OlxcdFxcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xcbiAxMzc6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdHdoaWxlIChyb290X2RlbnRyeSkge1xcbiAxNDA6XFx0XFx0XFx0c2QgPSByb290X2RlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuIDE0MTpcXHRcXHRcXHRpZiAoIXNkIHx8ICEoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXFxuIDE0MjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTQzOlxcdFxcdFxcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXFx1MDAzZWRfcGFyZW50O1xcbiAxNDQ6XFx0XFx0fVxcbiAxNDU6XFx0XFx0cmV0dXJuIHJvb3RfZGVudHJ5ID8gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KSA6IE5VTEw7XFxuIDE0NjpcXHR9XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gMTQ5OlxcdFxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0aW50IHJldDtcXG4gMTUyOlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxNTM6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gMTU0OlxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xcbiAxNTU6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xcbiAxNTY6XFx0XFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdHNkID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudC1cXHUwMDNlZF9mc2RhdGE7XFxuIDE1OTpcXHRcXHQvKlxcbiAxNjA6XFx0XFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcXG4gMTYxOlxcdFxcdCAqIGJlaW5nIGF0dGFjaGVkXFxuIDE2MjpcXHRcXHQgKi9cXG4gMTYzOlxcdFxcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcXG4gMTY0OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4gMTY3OlxcdFxcdHR5cGUgPSBwYXJlbnRfaXRlbS1cXHUwMDNlY2lfdHlwZTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0cmV0ID0gLUVQRVJNO1xcbiAxNzA6XFx0XFx0aWYgKCF0eXBlIHx8ICF0eXBlLVxcdTAwM2VjdF9pdGVtX29wcyB8fFxcbiAxNzE6XFx0XFx0ICAgICF0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluaylcXG4gMTcyOlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0LypcXG4gMTc1OlxcdFxcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxcbiAxNzY6XFx0XFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXFxuIDE3NzpcXHRcXHQgKi9cXG4gMTc4OlxcdFxcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdC8qXFxuIDE4MTpcXHRcXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcXG4gMTgyOlxcdFxcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXFxuIDE4MzpcXHRcXHQgKiBhdCBzeXNjYWxsIHRpbWUgKGFzIGxpbmsoMikgd291bGQndmUgZG9uZSksIGJlIGEgZGlyZWN0b3J5XFxuIDE4NDpcXHRcXHQgKiAod2hpY2ggbGluaygyKSB3b3VsZCd2ZSByZWZ1c2VkIHRvIGRvKSAqQU5EKiBiZSBhIGRlZXBcXG4gMTg1OlxcdFxcdCAqIGZ1Y2tpbmcgbWFnaWMsIG1ha2luZyB0aGUgdGFyZ2V0IGJ1c3kgZnJvbSBybWRpciBQT1YuXFxuIDE4NjpcXHRcXHQgKiBzeW1saW5rKDIpIGlzIG5vdGhpbmcgb2YgdGhhdCBzb3J0LCBhbmQgdGhlIGxvY2tpbmcgaXRcXG4gMTg3OlxcdFxcdCAqIGdldHMgbWF0Y2hlcyB0aGUgbm9ybWFsIHN5bWxpbmsoMikgc2VtYW50aWNzLiAgV2l0aG91dFxcbiAxODg6XFx0XFx0ICogYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgdGFyZ2V0ICh3aGljaCBtaWdodCB2ZXJ5IHdlbGxcXG4gMTg5OlxcdFxcdCAqIG5vdCBldmVuIGV4aXN0IHlldCkgZG9uZSBwcmlvciB0byBsb2NraW5nIHRoZSBwYXJlbnRcXG4gMTkwOlxcdFxcdCAqIGRpcmVjdG9yeS4gIFRoaXMgcGVydmVyc2lvbiwgT1RPSCwgbmVlZHMgdG8gcmVzb2x2ZVxcbiAxOTE6XFx0XFx0ICogdGhlIHRhcmdldCwgd2hpY2ggd291bGQgbGVhZCB0byBvYnZpb3VzIGRlYWRsb2NrcyBpZlxcbiAxOTI6XFx0XFx0ICogYXR0ZW1wdGVkIHdpdGggYW55IGRpcmVjdG9yaWVzIGxvY2tlZC5cXG4gMTkzOlxcdFxcdCAqXFxuIDE5NDpcXHRcXHQgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGdhcmJhZ2UgaXMgdXNlcmxhbmQgQUJJIGFuZCB3ZSBzaG91bGQndmVcXG4gMTk1OlxcdFxcdCAqIHNhaWQgXFxcIm5vXFxcIiBiYWNrIGluIDIwMDUuICBUb28gbGF0ZSBub3csIHNvIHdlIGdldCB0b1xcbiAxOTY6XFx0XFx0ICogcGxheSB2ZXJ5IHVnbHkgZ2FtZXMgd2l0aCBsb2NraW5nLlxcbiAxOTc6XFx0XFx0ICpcXG4gMTk4OlxcdFxcdCAqIFRyeSAqQU5ZVEhJTkcqIG9mIHRoYXQgc29ydCBpbiBuZXcgY29kZSwgYW5kIHlvdSB3aWxsXFxuIDE5OTpcXHRcXHQgKiByZWFsbHkgcmVncmV0IGl0LiAgSnVzdCBhc2sgeW91cnNlbGYgLSB3aGF0IGNvdWxkIGEgQk9GSFxcbiAyMDA6XFx0XFx0ICogZG8gdG8gbWUgYW5kIGRvIEkgd2FudCB0byBmaW5kIGl0IG91dCBmaXJzdC1oYW5kP1xcbiAyMDE6XFx0XFx0ICpcXG4gMjAyOlxcdFxcdCAqICBBViwgYSB0aG9yb3VnaGx5IGFubm95ZWQgYmFzdGFyZC5cXG4gMjAzOlxcdFxcdCAqL1xcbiAyMDQ6XFx0XFx0aW5vZGVfdW5sb2NrKGRpcik7XFxuIDIwNTpcXHRcXHRyZXQgPSBnZXRfdGFyZ2V0KHN5bW5hbWUsIFxcdTAwMjZ0YXJnZXRfaXRlbSwgZGVudHJ5LVxcdTAwM2VkX3NiKTtcXG4gMjA2OlxcdFxcdGlub2RlX2xvY2soZGlyKTtcXG4gMjA3OlxcdFxcdGlmIChyZXQpXFxuIDIwODpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxcbiAyMTE6XFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4gMjEyOlxcdFxcdGVsc2VcXG4gMjEzOlxcdFxcdFxcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcXG4gMjE0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuIDIxNTpcXHRcXHRpZiAoIXJldCkge1xcbiAyMTY6XFx0XFx0XFx0aWYgKHNkLVxcdTAwM2VzX2ZyYWctXFx1MDAzZWZyYWdfZGVhZClcXG4gMjE3OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIDIxODpcXHRcXHRcXHRlbHNlXFxuIDIxOTpcXHRcXHRcXHRcXHRyZXQgPSB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xcbiAyMjA6XFx0XFx0fVxcbiAyMjE6XFx0XFx0aWYgKCFyZXQpIHtcXG4gMjIyOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbiAyMjM6XFx0XFx0XFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xcbiAyMjQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcXG4gMjI1OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWRyb3BfbGluaylcXG4gMjI2OlxcdFxcdFxcdFxcdHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2Vkcm9wX2xpbmsocGFyZW50X2l0ZW0sXFxuIDIyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldF9pdGVtKTtcXG4gMjI4OlxcdFxcdH1cXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo1Ny40MTYzNTE1NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzY3OTc5MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBjb25maWdmc19zeW1saW5rYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBjb25maWdmc19zeW1saW5rYCBpcyBjcnVjaWFsOyBpdCdzIHRoZSBpbm9kZSBvcGVyYXRpb24gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHN5bWxpbmsgY3JlYXRpb24gd2l0aGluIGNvbmZpZ2ZzIGRpcmVjdG9yaWVzLiBFc3NlbnRpYWxseSwgd2hlbmV2ZXIgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGNhbGxzIGBzeW1saW5rKDIpYCBvbiBhIGNvbmZpZ2ZzIG1vdW50LCB0aGlzIGZ1bmN0aW9uIGdldHMgZXhlY3V0ZWQuIFRoaXMgaXMgYSBrZXkgcGllY2Ugb2YgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBWRlMsIHNwZWNpZmljYWxseSBpbiBob3cgY29uZmlnZnMgYmVoYXZlcywgYW5kIGl0J3MgZWFzaWx5IHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBldmVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS5cblxuVGhlIG1haW4gZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHJlc29sdmluZyB0aGUgc3ltbGluaydzIHRhcmdldCBvciBpZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBpcyBkZWxldGVkIGNvbmN1cnJlbnRseS4gSXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY2VudGVyZWQgYXJvdW5kIGxvY2tpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmtgIG9wZXJhdGlvbi5cblxuRGl2aW5nIGRlZXBlciwgdGhlIGFuYWx5c2lzIHNob3dzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBUaGUgY29yZSBtb2RpZmllZCBmdW5jdGlvbiBpcywgbmF0dXJhbGx5LCBgY29uZmlnZnNfc3ltbGlua2AuIEEgaGVscGVyIGZ1bmN0aW9uLCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIHdhcyBhbHNvIGFkZGVkLiBUaGUgcHJpbWFyeSBmb2N1cyBmb3IgdGVzdGluZyBvciBmdXp6aW5nIHdpbGwgYmUgdGhlIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbiwgc2luY2UgaXQgaXMgdGhlIGVudHJ5cG9pbnQgZm9yIHRoZXNlIG9wZXJhdGlvbnMuXG5cbk5vdywgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4gSXQgYXBwZWFycyB0aGUgb25seSBLY29uZmlnIG9wdGlvbiByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdGU19GU2AuIEEgcXVpY2sgbG9vayBhdCBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgY29uZmlybXMgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdGU19GU2AuIEl0J3MgYSBzdGFuZGFsb25lIGZlYXR1cmUuXG5cbkZpbmFsbHksIGNvbmZpcm1pbmcgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWE6XG4qICAgSXQncyBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgY3JlYXRpb24gb2YgY29uZmlnZnMgc3ltbGlua3MgYW5kIHJlbGF0ZWQgaXRlbSBwaW5uaW5nLlxuKiAgIEl0J3MgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50czsgbW91bnRpbmcgY29uZmlnZnMgYW5kIGNyZWF0aW5nIHN5bWxpbmtzIHdpdGggYHN5bWxpbmsoMilgLlxuKiAgIFRoZSBmb2N1cyBzeW1ib2wgaXMgY2xlYXJseSBgY29uZmlnZnNfc3ltbGlua2AuXG4qICAgVGhlIGVuYWJsaW5nIGNvbmZpZyBpcyBgQ09ORklHRlNfRlNgLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDIsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNTowMy43ODQzMzI4NzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTcyNTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnMgc3ltbGluayBoYW5kbGluZyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHJhY2VzIHdoZW4gc3ltbGlua3MgYXJlIGNyZWF0ZWQgdW5kZXIgZGVmYXVsdCBncm91cHMgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWcgaXRlbSBhbmQgY2hlY2tpbmcgaWYgdGhlIGRpcmVjdG9yeSBmcmFnbWVudCBoYXMgYmVlbiBtYXJrZWQgZGVhZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgaW4gY29uZmlnZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnMgc3ltbGluayBoYW5kbGluZyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHJhY2VzIHdoZW4gc3ltbGlua3MgYXJlIGNyZWF0ZWQgdW5kZXIgZGVmYXVsdCBncm91cHMgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWcgaXRlbSBhbmQgY2hlY2tpbmcgaWYgdGhlIGRpcmVjdG9yeSBmcmFnbWVudCBoYXMgYmVlbiBtYXJrZWQgZGVhZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgaW4gY29uZmlnZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjAzLjg2NDA2NDY5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxMjEzNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjAzLjg2NDYxMjM4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkyMTE1ODUzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkYCkgYmVmb3JlIGludm9raW5nIGBhbGxvd19saW5rYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nLCBwb2ludGVyIG5hdmlnYXRpb24sIGFuZCBjb250cm9sIGZsb3cgZm9yIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlLiBVQUYgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcsIG1lYW5pbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMGEyNzQ1MDhhYTM0NGZhNmM1Mzc0MDkxZTdkYzdkYmRhYmJkYTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzoyNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNWZlMzcyMmJkZGNmMSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAocm9vdF9kZW50cnkpIHtcbitcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbitcdFx0XHRicmVhaztcbitcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdH1cbitcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG5AQCAtMTU3LDYgKzE3MSwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTkyLDggKzIxMiwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRlbHNlXG4gXHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdGlmICghcmV0KSB7XG4rXHRcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkKVxuK1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdH1cbiBcdGlmICghcmV0KSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gXHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbkBAIC0yMDcsNiArMjMxLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIG91dF9wdXQ6XG4gXHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xuK1x0Y29uZmlnX2l0ZW1fcHV0KHJvb3RfaXRlbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjAzLjg2NDYxMzMzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTI1MjM1NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgU3ltbGluayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggZm9yIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGhlcmUuIE15IGd1dCBmZWVsaW5nIGlzIHRvIGRpdmUgaW4gYW5kIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgY2hhbmdlIGlzIGRvaW5nLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhlIGFkZGl0aW9uIG9mIGBjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLiBUaGlzIHNvdW5kcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIHdhbGtpbmcgdXAgdGhlIGRlbnRyeSB0cmVlLCBjaGVja2luZyBgc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFRgIGFsb25nIHRoZSB3YXksIHRvIGxvY2F0ZSB0aGUgcm9vdCBpdGVtLiBUaGVuIGl0IHBpbnMgdGhlIHJvb3QgaXRlbSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgc29ydCBvZiBoaWVyYXJjaGljYWwgc3RydWN0dXJlIGluIENvbmZpZ0ZTLCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBmaW5kIHRoZSB0b3AgbGV2ZWwgb2YgdGhhdCBoaWVyYXJjaHkuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzX3N5bWxpbmsoKWAgaXRzZWxmLCBpdCB1c2VzIHRoYXQgbmV3bHkgZGVmaW5lZCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSgpYCB0byBncmFiIHRoZSByb290IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiBJdCBkb2VzIHNvbWUgY2hlY2tzIHJlbGF0ZWQgdG8gYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgIGFuZCB0aGVuIGNhbGxzIGB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsoLi4uKWAgcG90ZW50aWFsbHkgcGVyZm9ybWluZyBzb21lIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gVGhlIHVzZSBvZiBgZnJhZ19kZWFkYCBpcyB3b3J0aCBub3Rpbmc7IGl0IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBkZWZlcnJlZCBvciBsYXp5IGJlaGF2aW9yIGluIHRoZSBmaWxlIHN5c3RlbS4gQW5kIGZpbmFsbHksIGluIHRoZSBgb3V0X3B1dDpgIHNlY3Rpb24sIGl0IHJlbGVhc2VzIHRoZSByb290IGl0ZW0gdXNpbmcgYGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pYC4gVGhhdCBpbXBsaWVzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuTm93LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgem9vbSBvdXQgYW5kIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiBgY29uZmlnZnNfc3ltbGlua2Agd2l0aGluIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgdGhpbmdzLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sLCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9yIHBvc3NpYmx5IGJvdGgsIHRvIHRob3JvdWdobHkgZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBwYXRjaCB3YXMgbmVjZXNzYXJ5IGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgbWlnaHQgZXhpc3QuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgdGltZSB0byBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6MjU6MDguMzg5ODUxNTI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMzE6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0d2hpbGUgKHJvb3RfZGVudHJ5KSB7XFxuIDE0MDpcXHRcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTQxOlxcdFxcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4gMTQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDM6XFx0XFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuIDE0NDpcXHRcXHR9XFxuIDE0NTpcXHRcXHRyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNDk6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MDpcXHR7XFxuIDE1MTpcXHRcXHRpbnQgcmV0O1xcbiAxNTI6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1MzpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XFxuIDE1NjpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjE6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNjc6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3MDpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3MTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxNzI6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQvKlxcbiAxNzU6XFx0XFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE3NjpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTc3OlxcdFxcdCAqL1xcbiAxNzg6XFx0XFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0LypcXG4gMTgxOlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxODI6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTgzOlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTg0OlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxODU6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMTg2OlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAxODc6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDE4ODpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAxODk6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAxOTA6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDE5MTpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDE5MjpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAxOTM6XFx0XFx0ICpcXG4gMTk0OlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAxOTU6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDE5NjpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDE5NzpcXHRcXHQgKlxcbiAxOTg6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMTk5OlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIwMDpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIwMTpcXHRcXHQgKlxcbiAyMDI6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMDM6XFx0XFx0ICovXFxuIDIwNDpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjA1OlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMDY6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMDc6XFx0XFx0aWYgKHJldClcXG4gMjA4OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXFxuIDIxMTpcXHRcXHRcXHRyZXQgPSAtRUVYSVNUO1xcbiAyMTI6XFx0XFx0ZWxzZVxcbiAyMTM6XFx0XFx0XFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxcbiAyMTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4gMjE1OlxcdFxcdGlmICghcmV0KSB7XFxuIDIxNjpcXHRcXHRcXHRpZiAoc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkKVxcbiAyMTc6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjE4OlxcdFxcdFxcdGVsc2VcXG4gMjE5OlxcdFxcdFxcdFxcdHJldCA9IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XFxuIDIyMDpcXHRcXHR9XFxuIDIyMTpcXHRcXHRpZiAoIXJldCkge1xcbiAyMjI6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIDIyMzpcXHRcXHRcXHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XFxuIDIyNDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbiAyMjU6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKVxcbiAyMjY6XFx0XFx0XFx0XFx0dHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWRyb3BfbGluayhwYXJlbnRfaXRlbSxcXG4gMjI3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGFyZ2V0X2l0ZW0pO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjA4LjM4OTkzMTMxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njg2MjQ5MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBhbmQgdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBhbmQgb2JqZWN0IGxpZmV0aW1lIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHBhcmVudF9pdGVtYCwgcG90ZW50aWFsbHkgYW4gZW1iZWRkZWQgZGVmYXVsdCBncm91cCwgY291bGQgYmUgZnJlZWQgd2hpbGUgdGhlIGRpcmVjdG9yeSBpbm9kZSAoYGRpcmApIGlzIHVubG9ja2VkIGR1cmluZyBgZ2V0X3RhcmdldCgpYC4gVGhhdCdzIGEgY2xhc3NpYyBLQVNBTiBzY2VuYXJpbywgYW5kIHRoZSBwYXRjaCBhZGRyZXNzZXMgaXQgZGlyZWN0bHkuIEl0IGFsc28gaW5jbHVkZXMgYSBjaGVjayBmb3IgYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgIGJlZm9yZSBjYWxsaW5nIGBhbGxvd19saW5rYCwgd2hpY2ggc291bmRzIGxpa2UgYSBnb29kIGRlZmVuc2l2ZSBtZWFzdXJlLiBBbmQgb2YgY291cnNlLCB0aGUgcGF0Y2ggaXMgYWxzbyB0YWtpbmcgY2FyZSB0byBwcm9wZXJseSBtYW5hZ2UgdGhlIHJlZmNvdW50IG9mIHRoZSByb290IG9iamVjdC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgY2F0Y2hpbmcuIExldCdzIHNlZS4uLiBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBiZWluZyBkb25lIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gYGttYWxsb2NgLCBgbWFsbG9jYCwgb3Igc3RhY2sgdmFyaWFibGVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBgcm9vdF9pdGVtYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gTm90aGluZyBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aHJvdWdoIGBjb3B5X3RvX3VzZXJgIG9yIGBwdXRfdXNlcmAuIFRoZXJlIGFyZSBubyBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYnVncyBiZWluZyBhZGRyZXNzZWQgaGVyZSBhcmUgc3F1YXJlbHkgaW4gdGhlIHJlYWxtIG9mIFVBRiBhbmQgb2JqZWN0IGxpZmV0aW1lLCBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LlxuXG5UaGVyZWZvcmUsIGdpdmVuIHdoYXQgSSdtIHNlZWluZywgdGhlcmUncyBubyByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IHRoaXMgcGF0Y2ggcmVxdWlyZXMgS01TQU4gYW5hbHlzaXMuIEl0J3MgZm9jdXNlZCBvbiBwcmV2ZW50aW5nIFVBRiBhbmQgbGlmZXRpbWUgaXNzdWVzLCBub3Qgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS01TQU4uXG5cblNvLCBsZXQncyBjb25maXJtIHRoZSByZXF1aXJlbWVudHM6IDEuIEtNU0FOUmVhc29uaW5nOiBDb250cmFzdGluZyBLTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5LiAyLiBOZWVkc0tNU0FOOiBmYWxzZS4gTm93LCB0byBtYWtlIHRoaXMgY3J5c3RhbCBjbGVhciwgSSdsbCBuZWVkIHRvIGNsZWFybHkgZm9ybWF0IHRoZSBLTVNBTlJlYXNvbmluZyBhbmQgdGhlbiBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMCwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNToxMy4wNzYxODI1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgc3ltbGluayBjcmVhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSByb290IGNvbmZpZ19pdGVtIGhpZXJhcmNoeSAocHJldmVudGluZyBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwIGl0ZW1zIGZyb20gYmVpbmcgZnJlZWQgd2hpbGUgaW5vZGUgbG9ja3MgYXJlIHRlbXBvcmFyaWx5IGRyb3BwZWQpIGFuZCBjaGVja3MgaWYgdGhlIGZyYWdtZW50IGlzIGRlYWQgKGBzZC1cXHUwMDNlc19mcmFnLVxcdTAwM2VmcmFnX2RlYWRgKSBiZWZvcmUgaW52b2tpbmcgYGFsbG93X2xpbmtgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkYCkgYmVmb3JlIGludm9raW5nIGBhbGxvd19saW5rYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nLCBwb2ludGVyIG5hdmlnYXRpb24sIGFuZCBjb250cm9sIGZsb3cgZm9yIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlLiBVQUYgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcsIG1lYW5pbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 23:22:04 +0000 UTC FinishedAt: 2026-09-02 23:25:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "5bf14877-d43f-4bab-8e13-e061bc97cf74" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_symlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZGApIGJlZm9yZSBpbnZva2luZyBgYWxsb3dfbGlua2AuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmcyBzeW1saW5rIGhhbmRsaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgcmFjZXMgd2hlbiBzeW1saW5rcyBhcmUgY3JlYXRlZCB1bmRlciBkZWZhdWx0IGdyb3VwcyBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZyBpdGVtIGFuZCBjaGVja2luZyBpZiB0aGUgZGlyZWN0b3J5IGZyYWdtZW50IGhhcyBiZWVuIG1hcmtlZCBkZWFkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIzOjI0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNWZlMzcyMmJkZGNmMSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgJiM0MzsxMzEsMTkgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHJvb3RfZGVudHJ5KSB7XG4mIzQzO1x0XHRzZCA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuJiM0MztcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDtcbiYjNDM7fVxuIFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG5AQCAtMTM5LDYgJiM0MzsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XG4gXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiBcbiBcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuQEAgLTE1Nyw2ICYjNDM7MTcxLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiYjNDM7XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbkBAIC0xOTIsOCAmIzQzOzIxMiwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRlbHNlXG4gXHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0aWYgKHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWQpXG4mIzQzO1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xuJiM0MztcdH1cbiBcdGlmICghcmV0KSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gXHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbkBAIC0yMDcsNiAmIzQzOzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBvdXRfcHV0OlxuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbiYjNDM7XHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmcyBzeW1saW5rIGhhbmRsaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgcmFjZXMgd2hlbiBzeW1saW5rcyBhcmUgY3JlYXRlZCB1bmRlciBkZWZhdWx0IGdyb3VwcyBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZyBpdGVtIGFuZCBjaGVja2luZyBpZiB0aGUgZGlyZWN0b3J5IGZyYWdtZW50IGhhcyBiZWVuIG1hcmtlZCBkZWFkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIzOjI0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLjVmZTM3MjJiZGRjZjEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSw2ICYjNDM7MTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5OwomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJd2hpbGUgKHJvb3RfZGVudHJ5KSB7CiYjNDM7CQlzZCA9IHJvb3RfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCkBAIC0xMzksNiAmIzQzOzE1Miw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiAKIAlzZCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwpAQCAtMTU3LDYgJiM0MzsxNzEsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwogCS8qCiAJICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mCiAJICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWQKQEAgLTE5Miw4ICYjNDM7MjEyLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAllbHNlCiAJCXJldCA9IGlub2RlX3Blcm1pc3Npb24oJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsCiAJCQkJICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCWlmIChzZC0mZ3Q7c19mcmFnLSZndDtmcmFnX2RlYWQpCiYjNDM7CQkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXQgPSB0eXBlLSZndDtjdF9pdGVtX29wcy0mZ3Q7YWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pOwomIzQzOwl9CiAJaWYgKCFyZXQpIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpOwogCQlyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7CkBAIC0yMDcsNiAmIzQzOzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogb3V0X3B1dDoKIAljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwomIzQzOwljb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgd29ydGggdGFyZ2V0aW5nIHdpdGggZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWdmc19zeW1saW5rKClgIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeSlgIGFuZCBwaW5uaW5nIHRoZSByb290IG9iamVjdC4gVGhlIGludGVudCBoZXJlIGlzIG9idmlvdXNseSB0byBwcmV2ZW50IHRoZSBgcGFyZW50X2l0ZW1gLCB3aGljaCBjb3VsZCBiZSBhIGRlZmF1bHQgZ3JvdXAsIGZyb20gYmVpbmcgZnJlZWQgcHJlbWF0dXJlbHkgd2hpbGUgdGhlIGxvY2sgaXMgYmVpbmcgZHJvcHBlZC4gU21hcnQuIEFsc28sIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrIGluIHBsYWNlIGZvciBgc2QtJmd0O3NfZnJhZy0mZ3Q7ZnJhZ19kZWFkYC4gQW5kIGZpbmFsbHksIHRoZSBjb2RlJiMzOTtzIHB1dHRpbmcgYHJvb3RfaXRlbWAgYXQgY2xlYW51cC4KCk5vdywgbXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgYGZzL2NvbmZpZ2ZzL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRoZW4sIG9uY2UgSSBoYXZlIGEgYmV0dGVyIGlkZWEgb2YgdGhlIG92ZXJhbGwgZnVuY3Rpb24sIEnigJlsbCBydW4gc29tZSBmdXp6aW5nIHRvb2xzIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT01Nz1vYmotJChDT05GSUdfU1lTRlMpXHRcdCYjNDM7PSBzeXNmcy9cbmZzL01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcdCYjNDM7PSBjb25maWdmcy9cbmZzL01ha2VmaWxlLTU5LW9iai15XHRcdFx0XHQmIzQzOz0gZGV2cHRzL1xuLS1cbmZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNS1cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0JiM0Mzs9IGNvbmZpZ2ZzLm9cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlLTctXG4tLVxuZnMvZGxtL0tjb25maWc9Mj1tZW51Y29uZmlnIERMTVxuLS1cbmZzL2RsbS9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIElORVRcbmZzL2RsbS9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuZnMvZGxtL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9nZnMyL0tjb25maWc9Mjc9Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cbi0tXG5mcy9nZnMyL0tjb25maWctMjktXHRkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBJTkVUIFx1MDAyNlx1MDAyNiBcXFxuZnMvZ2ZzMi9LY29uZmlnOjMwOlx0XHRDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IChETE09eSB8fCBETE09R0ZTMl9GUylcbmZzL2dmczIvS2NvbmZpZy0zMS1cdGhlbHBcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuZnMvb2NmczIvS2NvbmZpZy01LVx0c2VsZWN0IEJVRkZFUl9IRUFEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgY29uZmlnZnMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGNvbmZpZ2ZzYCBpbXBsZW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHR3byBzcGVjaWZpYyBhcmVhcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGZzL2NvbmZpZ2ZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgbW9kdWxlLCBzbyB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxldmFudCBidWlsZC10aW1lIHNldHRpbmdzLiBJdCB3aWxsIGdpdmUgbWUgdGhlIGJyb2FkIGNvbnRleHQuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBjb2RlIHRoYXQgaGFuZGxlcyBzeW1ib2xpYyBsaW5rIGNyZWF0aW9uIGFuZCByZXNvbHV0aW9uIHRoZXJlLiBUaGF0IHdvdWxkIGJlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGhvdyBzeW1ib2xpYyBsaW5rcyBhcmUgaW1wbGVtZW50ZWQgd2l0aGluIGBjb25maWdmc2AsIGFueSBzcGVjaWZpYyBjaGVja3MsIG9yIHVuaXF1ZSBiZWhhdmlvcnMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXNpZ24uIFRob3NlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBjb25maWdmc2AgaGFuZGxlcyBzeW1ib2xpYyBsaW5rcyBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENPTkZJR0ZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBjb25maWdmcyBpcyBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlXG4gICA2Olx0XHQgIG9mIHN5c2ZzJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIFdoZXJlIHN5c2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZFxuICAgNzpcdFx0ICB2aWV3IG9mIGtlcm5lbCBvYmplY3RzLCBjb25maWdmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWQgbWFuYWdlclxuICAgODpcdFx0ICBvZiBrZXJuZWwgb2JqZWN0cywgb3IgY29uZmlnX2l0ZW1zLlxuICAgOTpcdFxuICAxMDpcdFx0ICBCb3RoIHN5c2ZzIGFuZCBjb25maWdmcyBjYW4gYW5kIHNob3VsZCBleGlzdCB0b2dldGhlciBvbiB0aGVcbiAgMTE6XHRcdCAgc2FtZSBzeXN0ZW0uIE9uZSBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgdGhlIG90aGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUga2VybmVsOgoKKipEZWx2aW5nIGludG8gdGhlIFN5bWJvbGljIExpbmsgTG9naWMgaW4gQ29uZmlnRlMqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgc3Vycm91bmRpbmcgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGhvdyBzeW1ib2xpYyBsaW5rcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIENvbmZpZ0ZTIGZyYW1ld29yay4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBib3RoIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBjcmVhdGlvbiwgcmVzb2x1dGlvbiwgYW5kIGRlbGV0aW9uIG9mIHRoZXNlIGxpbmtzIHdpdGhpbiB0aGUgQ29uZmlnRlMgaGllcmFyY2h5LiBBcmUgdGhlcmUgYW55IGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcsIHN1Y2ggYXMgbG9vcCBkZXRlY3Rpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBvciBwb3RlbnRpYWwgcmVzb3VyY2UgZXhoYXVzdGlvbiB2dWxuZXJhYmlsaXRpZXM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBgaW5vZGVgIGFuZCBgZGVudHJ5YCBvcGVyYXRpb25zIGhlcmUsIGZvY3VzaW5nIG9uIHRoZSBsaW5rJiMzOTtzIGNyZWF0aW9uIGFuZCB3aGF0IGhvb2tzIGFyZSB1c2VkIGZvciBpdHMgcmVzb2x1dGlvbi4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgQ29uZmlnRlMtbGV2ZWwgY2hlY2tzIGJleW9uZCB0aGUgc3RhbmRhcmQgZmlsZSBzeXN0ZW0gb25lcy4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwYXRoIGZyb20gdGhlIHVzZXIgc3BhY2UgYHN5bWxpbmsoKWAgY2FsbCB0byB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgaW50ZXJuYWwgaGFuZGxpbmcgYW5kIGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTMxOlx0XHRyZXR1cm4gMDtcbiAxMzI6XHR9XG4gMTMzOlx0XG4gMTM0Olx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XG4gMTM3Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlIChyb290X2RlbnRyeSkge1xuIDE0MDpcdFx0XHRzZCA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuIDE0MTpcdFx0XHRpZiAoIXNkIHx8ICEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxuIDE0MjpcdFx0XHRcdGJyZWFrO1xuIDE0MzpcdFx0XHRyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuIDE0NDpcdFx0fVxuIDE0NTpcdFx0cmV0dXJuIHJvb3RfZGVudHJ5ID8gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KSA6IE5VTEw7XG4gMTQ2Olx0fVxuIDE0NzpcdFxuIDE0ODpcdGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiAxNDk6XHRcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4gMTUwOlx0e1xuIDE1MTpcdFx0aW50IHJldDtcbiAxNTI6XHRcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuIDE1MzpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcbiAxNTQ6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xuIDE1NTpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xuIDE1NjpcdFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4gMTU3Olx0XG4gMTU4Olx0XHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbiAxNTk6XHRcdC8qXG4gMTYwOlx0XHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxuIDE2MTpcdFx0ICogYmVpbmcgYXR0YWNoZWRcbiAxNjI6XHRcdCAqL1xuIDE2MzpcdFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxNjU6XHRcbiAxNjY6XHRcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTY3Olx0XHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiAxNjg6XHRcbiAxNjk6XHRcdHJldCA9IC1FUEVSTTtcbiAxNzA6XHRcdGlmICghdHlwZSB8fCAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcyB8fFxuIDE3MTpcdFx0ICAgICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmspXG4gMTcyOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAxNzM6XHRcbiAxNzQ6XHRcdC8qXG4gMTc1Olx0XHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiAxNzY6XHRcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxuIDE3NzpcdFx0ICovXG4gMTc4Olx0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTc5Olx0XG4gMTgwOlx0XHQvKlxuIDE4MTpcdFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXG4gMTgyOlx0XHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxuIDE4MzpcdFx0ICogYXQgc3lzY2FsbCB0aW1lIChhcyBsaW5rKDIpIHdvdWxkJiMzOTt2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcbiAxODQ6XHRcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJiMzOTt2ZSByZWZ1c2VkIHRvIGRvKSAqQU5EKiBiZSBhIGRlZXBcbiAxODU6XHRcdCAqIGZ1Y2tpbmcgbWFnaWMsIG1ha2luZyB0aGUgdGFyZ2V0IGJ1c3kgZnJvbSBybWRpciBQT1YuXG4gMTg2Olx0XHQgKiBzeW1saW5rKDIpIGlzIG5vdGhpbmcgb2YgdGhhdCBzb3J0LCBhbmQgdGhlIGxvY2tpbmcgaXRcbiAxODc6XHRcdCAqIGdldHMgbWF0Y2hlcyB0aGUgbm9ybWFsIHN5bWxpbmsoMikgc2VtYW50aWNzLiAgV2l0aG91dFxuIDE4ODpcdFx0ICogYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgdGFyZ2V0ICh3aGljaCBtaWdodCB2ZXJ5IHdlbGxcbiAxODk6XHRcdCAqIG5vdCBldmVuIGV4aXN0IHlldCkgZG9uZSBwcmlvciB0byBsb2NraW5nIHRoZSBwYXJlbnRcbiAxOTA6XHRcdCAqIGRpcmVjdG9yeS4gIFRoaXMgcGVydmVyc2lvbiwgT1RPSCwgbmVlZHMgdG8gcmVzb2x2ZVxuIDE5MTpcdFx0ICogdGhlIHRhcmdldCwgd2hpY2ggd291bGQgbGVhZCB0byBvYnZpb3VzIGRlYWRsb2NrcyBpZlxuIDE5MjpcdFx0ICogYXR0ZW1wdGVkIHdpdGggYW55IGRpcmVjdG9yaWVzIGxvY2tlZC5cbiAxOTM6XHRcdCAqXG4gMTk0Olx0XHQgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGdhcmJhZ2UgaXMgdXNlcmxhbmQgQUJJIGFuZCB3ZSBzaG91bGQmIzM5O3ZlXG4gMTk1Olx0XHQgKiBzYWlkIFwmIzM0O25vXCYjMzQ7IGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXG4gMTk2Olx0XHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXG4gMTk3Olx0XHQgKlxuIDE5ODpcdFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcbiAxOTk6XHRcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXG4gMjAwOlx0XHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XG4gMjAxOlx0XHQgKlxuIDIwMjpcdFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxuIDIwMzpcdFx0ICovXG4gMjA0Olx0XHRpbm9kZV91bmxvY2soZGlyKTtcbiAyMDU6XHRcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXHUwMDI2dGFyZ2V0X2l0ZW0sIGRlbnRyeS1cdTAwM2VkX3NiKTtcbiAyMDY6XHRcdGlub2RlX2xvY2soZGlyKTtcbiAyMDc6XHRcdGlmIChyZXQpXG4gMjA4Olx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMDk6XHRcbiAyMTA6XHRcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gMjExOlx0XHRcdHJldCA9IC1FRVhJU1Q7XG4gMjEyOlx0XHRlbHNlXG4gMjEzOlx0XHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIDIxNDpcdFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiAyMTU6XHRcdGlmICghcmV0KSB7XG4gMjE2Olx0XHRcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkKVxuIDIxNzpcdFx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMjE4Olx0XHRcdGVsc2VcbiAyMTk6XHRcdFx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbiAyMjA6XHRcdH1cbiAyMjE6XHRcdGlmICghcmV0KSB7XG4gMjIyOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gMjIzOlx0XHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbiAyMjQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuIDIyNTpcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWRyb3BfbGluaylcbiAyMjY6XHRcdFx0XHR0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWRyb3BfbGluayhwYXJlbnRfaXRlbSxcbiAyMjc6XHRcdFx0XHRcdFx0XHQgICAgIHRhcmdldF9pdGVtKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQyCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBjb25maWdmc19zeW1saW5rYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBjb25maWdmc19zeW1saW5rYCBpcyBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgaW5vZGUgb3BlcmF0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzeW1saW5rIGNyZWF0aW9uIHdpdGhpbiBjb25maWdmcyBkaXJlY3Rvcmllcy4gRXNzZW50aWFsbHksIHdoZW5ldmVyIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYWxscyBgc3ltbGluaygyKWAgb24gYSBjb25maWdmcyBtb3VudCwgdGhpcyBmdW5jdGlvbiBnZXRzIGV4ZWN1dGVkLiBUaGlzIGlzIGEga2V5IHBpZWNlIG9mIGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiB0aGUgVkZTLCBzcGVjaWZpY2FsbHkgaW4gaG93IGNvbmZpZ2ZzIGJlaGF2ZXMsIGFuZCBpdCYjMzk7cyBlYXNpbHkgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIGV2ZW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLgoKVGhlIG1haW4gZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHJlc29sdmluZyB0aGUgc3ltbGluayYjMzk7cyB0YXJnZXQgb3IgaWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMgZGVsZXRlZCBjb25jdXJyZW50bHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBsb2NraW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIGBjb25maWdmc19zeW1saW5rYCBvcGVyYXRpb24uCgpEaXZpbmcgZGVlcGVyLCB0aGUgYW5hbHlzaXMgc2hvd3MgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIFRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzLCBuYXR1cmFsbHksIGBjb25maWdmc19zeW1saW5rYC4gQSBoZWxwZXIgZnVuY3Rpb24sIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCwgd2FzIGFsc28gYWRkZWQuIFRoZSBwcmltYXJ5IGZvY3VzIGZvciB0ZXN0aW5nIG9yIGZ1enppbmcgd2lsbCBiZSB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9uLCBzaW5jZSBpdCBpcyB0aGUgZW50cnlwb2ludCBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4KCk5vdywgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4gSXQgYXBwZWFycyB0aGUgb25seSBLY29uZmlnIG9wdGlvbiByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdGU19GU2AuIEEgcXVpY2sgbG9vayBhdCBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgY29uZmlybXMgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdGU19GU2AuIEl0JiMzOTtzIGEgc3RhbmRhbG9uZSBmZWF0dXJlLgoKRmluYWxseSwgY29uZmlybWluZyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYToKKiAgIEl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBjcmVhdGlvbiBvZiBjb25maWdmcyBzeW1saW5rcyBhbmQgcmVsYXRlZCBpdGVtIHBpbm5pbmcuCiogICBJdCYjMzk7cyByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzOyBtb3VudGluZyBjb25maWdmcyBhbmQgY3JlYXRpbmcgc3ltbGlua3Mgd2l0aCBgc3ltbGluaygyKWAuCiogICBUaGUgZm9jdXMgc3ltYm9sIGlzIGNsZWFybHkgYGNvbmZpZ2ZzX3N5bWxpbmtgLgoqICAgVGhlIGVuYWJsaW5nIGNvbmZpZyBpcyBgQ09ORklHRlNfRlNgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmcyBzeW1saW5rIGhhbmRsaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgcmFjZXMgd2hlbiBzeW1saW5rcyBhcmUgY3JlYXRlZCB1bmRlciBkZWZhdWx0IGdyb3VwcyBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZyBpdGVtIGFuZCBjaGVja2luZyBpZiB0aGUgZGlyZWN0b3J5IGZyYWdtZW50IGhhcyBiZWVuIG1hcmtlZCBkZWFkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzIHN5bWxpbmsgaGFuZGxpbmcgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSByYWNlcyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIHVuZGVyIGRlZmF1bHQgZ3JvdXBzIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnIGl0ZW0gYW5kIGNoZWNraW5nIGlmIHRoZSBkaXJlY3RvcnkgZnJhZ21lbnQgaGFzIGJlZW4gbWFya2VkIGRlYWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGNvbmZpZ2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgc3ltbGluayBjcmVhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSByb290IGNvbmZpZ19pdGVtIGhpZXJhcmNoeSAocHJldmVudGluZyBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwIGl0ZW1zIGZyb20gYmVpbmcgZnJlZWQgd2hpbGUgaW5vZGUgbG9ja3MgYXJlIHRlbXBvcmFyaWx5IGRyb3BwZWQpIGFuZCBjaGVja3MgaWYgdGhlIGZyYWdtZW50IGlzIGRlYWQgKGBzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkYCkgYmVmb3JlIGludm9raW5nIGBhbGxvd19saW5rYC5cblxuVGhpcyBjaGFuZ2Ugc29sZWx5IGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZywgcG9pbnRlciBuYXZpZ2F0aW9uLCBhbmQgY29udHJvbCBmbG93IGZvciBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBidWZmZXJzIHRvIHVzZXJzcGFjZS4gVUFGIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLCBtZWFuaW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIzOjI0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLjVmZTM3MjJiZGRjZjEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSw2ICYjNDM7MTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5OwomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJd2hpbGUgKHJvb3RfZGVudHJ5KSB7CiYjNDM7CQlzZCA9IHJvb3RfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCkBAIC0xMzksNiAmIzQzOzE1Miw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiAKIAlzZCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwpAQCAtMTU3LDYgJiM0MzsxNzEsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwogCS8qCiAJICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mCiAJICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWQKQEAgLTE5Miw4ICYjNDM7MjEyLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAllbHNlCiAJCXJldCA9IGlub2RlX3Blcm1pc3Npb24oJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsCiAJCQkJICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCWlmIChzZC0mZ3Q7c19mcmFnLSZndDtmcmFnX2RlYWQpCiYjNDM7CQkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXQgPSB0eXBlLSZndDtjdF9pdGVtX29wcy0mZ3Q7YWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pOwomIzQzOwl9CiAJaWYgKCFyZXQpIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpOwogCQlyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7CkBAIC0yMDcsNiAmIzQzOzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogb3V0X3B1dDoKIAljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwomIzQzOwljb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgU3ltbGluayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBmb3IgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgaGVyZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdG8gZGl2ZSBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBjaGFuZ2UgaXMgZG9pbmcuIFRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYWRkaXRpb24gb2YgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KWAuIFRoaXMgc291bmRzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHdhbGtpbmcgdXAgdGhlIGRlbnRyeSB0cmVlLCBjaGVja2luZyBgc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFRgIGFsb25nIHRoZSB3YXksIHRvIGxvY2F0ZSB0aGUgcm9vdCBpdGVtLiBUaGVuIGl0IHBpbnMgdGhlIHJvb3QgaXRlbSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtYC4gVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIHNvcnQgb2YgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBpbiBDb25maWdGUywgYW5kIHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gZmluZCB0aGUgdG9wIGxldmVsIG9mIHRoYXQgaGllcmFyY2h5LgoKVGhlbiwgbG9va2luZyBhdCBgY29uZmlnZnNfc3ltbGluaygpYCBpdHNlbGYsIGl0IHVzZXMgdGhhdCBuZXdseSBkZWZpbmVkIGBjb25maWdmc19nZXRfcm9vdF9pdGVtKClgIHRvIGdyYWIgdGhlIHJvb3Qgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkuIEl0IGRvZXMgc29tZSBjaGVja3MgcmVsYXRlZCB0byBgc2QtJmd0O3NfZnJhZy0mZ3Q7ZnJhZ19kZWFkYCBhbmQgdGhlbiBjYWxscyBgdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmsoLi4uKWAgcG90ZW50aWFsbHkgcGVyZm9ybWluZyBzb21lIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gVGhlIHVzZSBvZiBgZnJhZ19kZWFkYCBpcyB3b3J0aCBub3Rpbmc7IGl0IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBkZWZlcnJlZCBvciBsYXp5IGJlaGF2aW9yIGluIHRoZSBmaWxlIHN5c3RlbS4gQW5kIGZpbmFsbHksIGluIHRoZSBgb3V0X3B1dDpgIHNlY3Rpb24sIGl0IHJlbGVhc2VzIHRoZSByb290IGl0ZW0gdXNpbmcgYGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pYC4gVGhhdCBpbXBsaWVzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBnb29kIHRvIHNlZS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCB6b29tIG91dCBhbmQgdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIGBjb25maWdmc19zeW1saW5rYCB3aXRoaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sLCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9yIHBvc3NpYmx5IGJvdGgsIHRvIHRob3JvdWdobHkgZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBwYXRjaCB3YXMgbmVjZXNzYXJ5IGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgbWlnaHQgZXhpc3QuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDEzMTpcdFx0cmV0dXJuIDA7XG4gMTMyOlx0fVxuIDEzMzpcdFxuIDEzNDpcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIDEzNTpcdHtcbiAxMzY6XHRcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuIDEzNzpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTM4Olx0XG4gMTM5Olx0XHR3aGlsZSAocm9vdF9kZW50cnkpIHtcbiAxNDA6XHRcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiAxNDE6XHRcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiAxNDI6XHRcdFx0XHRicmVhaztcbiAxNDM6XHRcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiAxNDQ6XHRcdH1cbiAxNDU6XHRcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHRpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gMTQ5Olx0XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIDE1MDpcdHtcbiAxNTE6XHRcdGludCByZXQ7XG4gMTUyOlx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxNTM6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gMTU0Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiAxNTU6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiAxNTY6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDE1NzpcdFxuIDE1ODpcdFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gMTU5Olx0XHQvKlxuIDE2MDpcdFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcbiAxNjE6XHRcdCAqIGJlaW5nIGF0dGFjaGVkXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcbiAxNjQ6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTY1Olx0XG4gMTY2Olx0XHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE2NzpcdFx0dHlwZSA9IHBhcmVudF9pdGVtLVx1MDAzZWNpX3R5cGU7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZXQgPSAtRVBFUk07XG4gMTcwOlx0XHRpZiAoIXR5cGUgfHwgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMgfHxcbiAxNzE6XHRcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIDE3MjpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTczOlx0XG4gMTc0Olx0XHQvKlxuIDE3NTpcdFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4gMTc2Olx0XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiAxNzc6XHRcdCAqL1xuIDE3ODpcdFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE3OTpcdFxuIDE4MDpcdFx0LypcbiAxODE6XHRcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIDE4MjpcdFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbiAxODM6XHRcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCYjMzk7dmUgZG9uZSksIGJlIGEgZGlyZWN0b3J5XG4gMTg0Olx0XHQgKiAod2hpY2ggbGluaygyKSB3b3VsZCYjMzk7dmUgcmVmdXNlZCB0byBkbykgKkFORCogYmUgYSBkZWVwXG4gMTg1Olx0XHQgKiBmdWNraW5nIG1hZ2ljLCBtYWtpbmcgdGhlIHRhcmdldCBidXN5IGZyb20gcm1kaXIgUE9WLlxuIDE4NjpcdFx0ICogc3ltbGluaygyKSBpcyBub3RoaW5nIG9mIHRoYXQgc29ydCwgYW5kIHRoZSBsb2NraW5nIGl0XG4gMTg3Olx0XHQgKiBnZXRzIG1hdGNoZXMgdGhlIG5vcm1hbCBzeW1saW5rKDIpIHNlbWFudGljcy4gIFdpdGhvdXRcbiAxODg6XHRcdCAqIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHRhcmdldCAod2hpY2ggbWlnaHQgdmVyeSB3ZWxsXG4gMTg5Olx0XHQgKiBub3QgZXZlbiBleGlzdCB5ZXQpIGRvbmUgcHJpb3IgdG8gbG9ja2luZyB0aGUgcGFyZW50XG4gMTkwOlx0XHQgKiBkaXJlY3RvcnkuICBUaGlzIHBlcnZlcnNpb24sIE9UT0gsIG5lZWRzIHRvIHJlc29sdmVcbiAxOTE6XHRcdCAqIHRoZSB0YXJnZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gb2J2aW91cyBkZWFkbG9ja3MgaWZcbiAxOTI6XHRcdCAqIGF0dGVtcHRlZCB3aXRoIGFueSBkaXJlY3RvcmllcyBsb2NrZWQuXG4gMTkzOlx0XHQgKlxuIDE5NDpcdFx0ICogVW5mb3J0dW5hdGVseSwgdGhhdCBnYXJiYWdlIGlzIHVzZXJsYW5kIEFCSSBhbmQgd2Ugc2hvdWxkJiMzOTt2ZVxuIDE5NTpcdFx0ICogc2FpZCBcJiMzNDtub1wmIzM0OyBiYWNrIGluIDIwMDUuICBUb28gbGF0ZSBub3csIHNvIHdlIGdldCB0b1xuIDE5NjpcdFx0ICogcGxheSB2ZXJ5IHVnbHkgZ2FtZXMgd2l0aCBsb2NraW5nLlxuIDE5NzpcdFx0ICpcbiAxOTg6XHRcdCAqIFRyeSAqQU5ZVEhJTkcqIG9mIHRoYXQgc29ydCBpbiBuZXcgY29kZSwgYW5kIHlvdSB3aWxsXG4gMTk5Olx0XHQgKiByZWFsbHkgcmVncmV0IGl0LiAgSnVzdCBhc2sgeW91cnNlbGYgLSB3aGF0IGNvdWxkIGEgQk9GSFxuIDIwMDpcdFx0ICogZG8gdG8gbWUgYW5kIGRvIEkgd2FudCB0byBmaW5kIGl0IG91dCBmaXJzdC1oYW5kP1xuIDIwMTpcdFx0ICpcbiAyMDI6XHRcdCAqICBBViwgYSB0aG9yb3VnaGx5IGFubm95ZWQgYmFzdGFyZC5cbiAyMDM6XHRcdCAqL1xuIDIwNDpcdFx0aW5vZGVfdW5sb2NrKGRpcik7XG4gMjA1Olx0XHRyZXQgPSBnZXRfdGFyZ2V0KHN5bW5hbWUsIFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXHUwMDNlZF9zYik7XG4gMjA2Olx0XHRpbm9kZV9sb2NrKGRpcik7XG4gMjA3Olx0XHRpZiAocmV0KVxuIDIwODpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMjA5Olx0XG4gMjEwOlx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxuIDIxMTpcdFx0XHRyZXQgPSAtRUVYSVNUO1xuIDIxMjpcdFx0ZWxzZVxuIDIxMzpcdFx0XHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcbiAyMTQ6XHRcdFx0XHRcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gMjE1Olx0XHRpZiAoIXJldCkge1xuIDIxNjpcdFx0XHRpZiAoc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZClcbiAyMTc6XHRcdFx0XHRyZXQgPSAtRU5PRU5UO1xuIDIxODpcdFx0XHRlbHNlXG4gMjE5Olx0XHRcdFx0cmV0ID0gdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XG4gMjIwOlx0XHR9XG4gMjIxOlx0XHRpZiAoIXJldCkge1xuIDIyMjpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuIDIyMzpcdFx0XHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XG4gMjI0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcbiAyMjU6XHRcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmspXG4gMjI2Olx0XHRcdFx0dHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmsocGFyZW50X2l0ZW0sXG4gMjI3Olx0XHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gMjI4Olx0XHR9XG4gMjI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjAKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGFuZCB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gcHJldmVudGluZyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGFuZCBvYmplY3QgbGlmZXRpbWUgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgcGFyZW50X2l0ZW1gLCBwb3RlbnRpYWxseSBhbiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwLCBjb3VsZCBiZSBmcmVlZCB3aGlsZSB0aGUgZGlyZWN0b3J5IGlub2RlIChgZGlyYCkgaXMgdW5sb2NrZWQgZHVyaW5nIGBnZXRfdGFyZ2V0KClgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBLQVNBTiBzY2VuYXJpbywgYW5kIHRoZSBwYXRjaCBhZGRyZXNzZXMgaXQgZGlyZWN0bHkuIEl0IGFsc28gaW5jbHVkZXMgYSBjaGVjayBmb3IgYHNkLSZndDtzX2ZyYWctJmd0O2ZyYWdfZGVhZGAgYmVmb3JlIGNhbGxpbmcgYGFsbG93X2xpbmtgLCB3aGljaCBzb3VuZHMgbGlrZSBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUuIEFuZCBvZiBjb3Vyc2UsIHRoZSBwYXRjaCBpcyBhbHNvIHRha2luZyBjYXJlIHRvIHByb3Blcmx5IG1hbmFnZSB0aGUgcmVmY291bnQgb2YgdGhlIHJvb3Qgb2JqZWN0LgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgY2F0Y2hpbmcuIExldCYjMzk7cyBzZWUuLi4gbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgYmVpbmcgZG9uZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGBrbWFsbG9jYCwgYG1hbGxvY2AsIG9yIHN0YWNrIHZhcmlhYmxlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gYHJvb3RfaXRlbWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAuIE5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdGhyb3VnaCBgY29weV90b191c2VyYCBvciBgcHV0X3VzZXJgLiBUaGVyZSBhcmUgbm8gY29uZGl0aW9uYWxzIHRoYXQgbWlnaHQgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGJ1Z3MgYmVpbmcgYWRkcmVzc2VkIGhlcmUgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBVQUYgYW5kIG9iamVjdCBsaWZldGltZSwgcHJlY2lzZWx5IHRoZSBraW5kIG9mIG1lbW9yeSBjb3JydXB0aW9uIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4KClRoZXJlZm9yZSwgZ2l2ZW4gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIGJlbGlldmUgdGhhdCB0aGlzIHBhdGNoIHJlcXVpcmVzIEtNU0FOIGFuYWx5c2lzLiBJdCYjMzk7cyBmb2N1c2VkIG9uIHByZXZlbnRpbmcgVUFGIGFuZCBsaWZldGltZSBpc3N1ZXMsIG5vdCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggaXMgdGhlIGRvbWFpbiBvZiBLTVNBTi4KClNvLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVxdWlyZW1lbnRzOiAxLiBLTVNBTlJlYXNvbmluZzogQ29udHJhc3RpbmcgS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eS4gMi4gTmVlZHNLTVNBTjogZmFsc2UuIE5vdywgdG8gbWFrZSB0aGlzIGNyeXN0YWwgY2xlYXIsIEkmIzM5O2xsIG5lZWQgdG8gY2xlYXJseSBmb3JtYXQgdGhlIEtNU0FOUmVhc29uaW5nIGFuZCB0aGVuIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbiBpbiBjb25maWdmcyBzeW1saW5rIGNyZWF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHBpbnMgdGhlIHJvb3QgY29uZmlnX2l0ZW0gaGllcmFyY2h5IChwcmV2ZW50aW5nIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXAgaXRlbXMgZnJvbSBiZWluZyBmcmVlZCB3aGlsZSBpbm9kZSBsb2NrcyBhcmUgdGVtcG9yYXJpbHkgZHJvcHBlZCkgYW5kIGNoZWNrcyBpZiB0aGUgZnJhZ21lbnQgaXMgZGVhZCAoYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgKSBiZWZvcmUgaW52b2tpbmcgYGFsbG93X2xpbmtgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nLCBwb2ludGVyIG5hdmlnYXRpb24sIGFuZCBjb250cm9sIGZsb3cgZm9yIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlLiBVQUYgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcsIG1lYW5pbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZGApIGJlZm9yZSBpbnZva2luZyBgYWxsb3dfbGlua2AuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo0My45NTU1MDk1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTIwNzAwMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgc3ltbGluayBjcmVhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSByb290IGNvbmZpZ19pdGVtIGhpZXJhcmNoeSAocHJldmVudGluZyBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwIGl0ZW1zIGZyb20gYmVpbmcgZnJlZWQgd2hpbGUgaW5vZGUgbG9ja3MgYXJlIHRlbXBvcmFyaWx5IGRyb3BwZWQpIGFuZCBjaGVja3MgaWYgdGhlIGZyYWdtZW50IGlzIGRlYWQgKGBzZC1cXHUwMDNlc19mcmFnLVxcdTAwM2VmcmFnX2RlYWRgKSBiZWZvcmUgaW52b2tpbmcgYGFsbG93X2xpbmtgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzIHN5bWxpbmsgaGFuZGxpbmcgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSByYWNlcyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIHVuZGVyIGRlZmF1bHQgZ3JvdXBzIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnIGl0ZW0gYW5kIGNoZWNraW5nIGlmIHRoZSBkaXJlY3RvcnkgZnJhZ21lbnQgaGFzIGJlZW4gbWFya2VkIGRlYWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo0My45NTU1MTQxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjUyNzE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwYTI3NDUwOGFhMzQ0ZmE2YzUzNzQwOTFlN2RjN2RiZGFiYmRhMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzoyNDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcXG5pbmRleCAzMWViMjhiMjczMDkxLi41ZmUzNzIyYmRkY2YxIDEwMDY0NFxcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xcbisrKyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xcbkBAIC0xMzEsNiArMTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuK1xcbitcXHR3aGlsZSAocm9vdF9kZW50cnkpIHtcXG4rXFx0XFx0c2QgPSByb290X2RlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuK1xcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXFx1MDAzZWRfcGFyZW50O1xcbitcXHR9XFxuK1xcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xcbit9XFxuIFxcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbkBAIC0xMzksNiArMTUyLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4gXFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gXFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcXG4gXFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XFxuIFxcbiBcXHRzZCA9IGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfZnNkYXRhO1xcbkBAIC0xNTcsNiArMTcxLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0ICAgICF0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluaylcXG4gXFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuK1xcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxcbitcXHQgKi9cXG4rXFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiBcXHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxcbkBAIC0xOTIsOCArMjEyLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRyZXQgPSB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHRpZiAoc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkKVxcbitcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XFxuK1xcdH1cXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIFxcdFxcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcXG5AQCAtMjA3LDYgKzIzMSw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFxuIG91dF9wdXQ6XFxuIFxcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XFxuK1xcdGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo0NS4zMDg4NzU3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTU1MTg1MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzIHN5bWxpbmsgaGFuZGxpbmcgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSByYWNlcyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIHVuZGVyIGRlZmF1bHQgZ3JvdXBzIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnIGl0ZW0gYW5kIGNoZWNraW5nIGlmIHRoZSBkaXJlY3RvcnkgZnJhZ21lbnQgaGFzIGJlZW4gbWFya2VkIGRlYWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMGEyNzQ1MDhhYTM0NGZhNmM1Mzc0MDkxZTdkYzdkYmRhYmJkYTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzoyNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNWZlMzcyMmJkZGNmMSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAocm9vdF9kZW50cnkpIHtcbitcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbitcdFx0XHRicmVhaztcbitcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdH1cbitcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG5AQCAtMTU3LDYgKzE3MSwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTkyLDggKzIxMiwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRlbHNlXG4gXHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdGlmICghcmV0KSB7XG4rXHRcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkKVxuK1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdH1cbiBcdGlmICghcmV0KSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gXHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbkBAIC0yMDcsNiArMjMxLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIG91dF9wdXQ6XG4gXHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xuK1x0Y29uZmlnX2l0ZW1fcHV0KHJvb3RfaXRlbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI0OjQ1LjMwODg3NzE0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjgwNzEyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG1pZ2h0IGJlIHdvcnRoIHRhcmdldGluZyB3aXRoIGZ1enppbmcuIExldCdzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWdmc19zeW1saW5rKClgIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJIHNlZSBpdCdzIGNhbGxpbmcgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5KWAgYW5kIHBpbm5pbmcgdGhlIHJvb3Qgb2JqZWN0LiBUaGUgaW50ZW50IGhlcmUgaXMgb2J2aW91c2x5IHRvIHByZXZlbnQgdGhlIGBwYXJlbnRfaXRlbWAsIHdoaWNoIGNvdWxkIGJlIGEgZGVmYXVsdCBncm91cCwgZnJvbSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseSB3aGlsZSB0aGUgbG9jayBpcyBiZWluZyBkcm9wcGVkLiBTbWFydC4gQWxzbywgdGhlcmUncyBhIG5ldyBjaGVjayBpbiBwbGFjZSBmb3IgYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgLiBBbmQgZmluYWxseSwgdGhlIGNvZGUncyBwdXR0aW5nIGByb290X2l0ZW1gIGF0IGNsZWFudXAuXG5cbk5vdywgbXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgZnMvY29uZmlnZnMvYCBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbCB0cmVlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGhlbiwgb25jZSBJIGhhdmUgYSBiZXR0ZXIgaWRlYSBvZiB0aGUgb3ZlcmFsbCBmdW5jdGlvbiwgSeKAmWxsIHJ1biBzb21lIGZ1enppbmcgdG9vbHMgdG8gbG9vayBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6MjQ6NTIuNjM2OTUyNzA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzQwMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01Nz1vYmotJChDT05GSUdfU1lTRlMpXFx0XFx0Kz0gc3lzZnMvXFxuZnMvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVxcdCs9IGNvbmZpZ2ZzL1xcbmZzL01ha2VmaWxlLTU5LW9iai15XFx0XFx0XFx0XFx0Kz0gZGV2cHRzL1xcbi0tXFxuZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNS1cXG5mcy9jb25maWdmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcXHQrPSBjb25maWdmcy5vXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cXG4tLVxcbmZzL2RsbS9LY29uZmlnPTI9bWVudWNvbmZpZyBETE1cXG4tLVxcbmZzL2RsbS9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUXFxuZnMvZGxtL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvZGxtL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9nZnMyL0tjb25maWc9Mjc9Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZnMvZ2ZzMi9LY29uZmlnOjMwOlxcdFxcdENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IChETE09eSB8fCBETE09R0ZTMl9GUylcXG5mcy9nZnMyL0tjb25maWctMzEtXFx0aGVscFxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo1Mi43MDg2OTc1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMzNDU4NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGNvbmZpZ2ZzIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGNvbmZpZ2ZzYCBpbXBsZW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdHdvIHNwZWNpZmljIGFyZWFzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9jb25maWdmcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgbW9kdWxlLCBzbyB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxldmFudCBidWlsZC10aW1lIHNldHRpbmdzLiBJdCB3aWxsIGdpdmUgbWUgdGhlIGJyb2FkIGNvbnRleHQuXG5cblRoZW4sIEknbSBnb2luZyB0byBsb29rIGF0IGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBhY3R1YWwgY29kZSB0aGF0IGhhbmRsZXMgc3ltYm9saWMgbGluayBjcmVhdGlvbiBhbmQgcmVzb2x1dGlvbiB0aGVyZS4gVGhhdCB3b3VsZCBiZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBob3cgc3ltYm9saWMgbGlua3MgYXJlIGltcGxlbWVudGVkIHdpdGhpbiBgY29uZmlnZnNgLCBhbnkgc3BlY2lmaWMgY2hlY2tzLCBvciB1bmlxdWUgYmVoYXZpb3JzLiBJJ20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXNpZ24uIFRob3NlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBjb25maWdmc2AgaGFuZGxlcyBzeW1ib2xpYyBsaW5rcyBhbmQgaG93IGl0J3MgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI0OjU1LjA0MjE1ODM4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDT05GSUdGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBjb25maWdmcyBpcyBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlXFxuICAgNjpcXHRcXHQgIG9mIHN5c2ZzJ3MgZnVuY3Rpb25hbGl0eS4gV2hlcmUgc3lzZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkXFxuICAgNzpcXHRcXHQgIHZpZXcgb2Yga2VybmVsIG9iamVjdHMsIGNvbmZpZ2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZCBtYW5hZ2VyXFxuICAgODpcXHRcXHQgIG9mIGtlcm5lbCBvYmplY3RzLCBvciBjb25maWdfaXRlbXMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXFxuICAxMTpcXHRcXHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6MjQ6NTUuMDQyMjIwMTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NDA1MjkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBrZXJuZWw6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBTeW1ib2xpYyBMaW5rIExvZ2ljIGluIENvbmZpZ0ZTKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgc3Vycm91bmRpbmcgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGhvdyBzeW1ib2xpYyBsaW5rcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIENvbmZpZ0ZTIGZyYW1ld29yay4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGJvdGggc2VjdXJpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbnNpZGVyIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNyZWF0aW9uLCByZXNvbHV0aW9uLCBhbmQgZGVsZXRpb24gb2YgdGhlc2UgbGlua3Mgd2l0aGluIHRoZSBDb25maWdGUyBoaWVyYXJjaHkuIEFyZSB0aGVyZSBhbnkgZWRnZSBjYXNlcyBJIHNob3VsZCBiZSBjb25zaWRlcmluZywgc3VjaCBhcyBsb29wIGRldGVjdGlvbiwgcGVybWlzc2lvbiBjaGVja3MsIG9yIHBvdGVudGlhbCByZXNvdXJjZSBleGhhdXN0aW9uIHZ1bG5lcmFiaWxpdGllcz8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgYGlub2RlYCBhbmQgYGRlbnRyeWAgb3BlcmF0aW9ucyBoZXJlLCBmb2N1c2luZyBvbiB0aGUgbGluaydzIGNyZWF0aW9uIGFuZCB3aGF0IGhvb2tzIGFyZSB1c2VkIGZvciBpdHMgcmVzb2x1dGlvbi4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBDb25maWdGUy1sZXZlbCBjaGVja3MgYmV5b25kIHRoZSBzdGFuZGFyZCBmaWxlIHN5c3RlbSBvbmVzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBhdGggZnJvbSB0aGUgdXNlciBzcGFjZSBgc3ltbGluaygpYCBjYWxsIHRvIHRoZSBmaWxlIHN5c3RlbSdzIGludGVybmFsIGhhbmRsaW5nIGFuZCBiYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo1Ny40MTYyNzU1NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gMTMxOlxcdFxcdHJldHVybiAwO1xcbiAxMzI6XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gMTM1OlxcdHtcXG4gMTM2OlxcdFxcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xcbiAxMzc6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdHdoaWxlIChyb290X2RlbnRyeSkge1xcbiAxNDA6XFx0XFx0XFx0c2QgPSByb290X2RlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuIDE0MTpcXHRcXHRcXHRpZiAoIXNkIHx8ICEoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXFxuIDE0MjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTQzOlxcdFxcdFxcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXFx1MDAzZWRfcGFyZW50O1xcbiAxNDQ6XFx0XFx0fVxcbiAxNDU6XFx0XFx0cmV0dXJuIHJvb3RfZGVudHJ5ID8gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KSA6IE5VTEw7XFxuIDE0NjpcXHR9XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gMTQ5OlxcdFxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0aW50IHJldDtcXG4gMTUyOlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxNTM6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gMTU0OlxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xcbiAxNTU6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xcbiAxNTY6XFx0XFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdHNkID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudC1cXHUwMDNlZF9mc2RhdGE7XFxuIDE1OTpcXHRcXHQvKlxcbiAxNjA6XFx0XFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcXG4gMTYxOlxcdFxcdCAqIGJlaW5nIGF0dGFjaGVkXFxuIDE2MjpcXHRcXHQgKi9cXG4gMTYzOlxcdFxcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcXG4gMTY0OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4gMTY3OlxcdFxcdHR5cGUgPSBwYXJlbnRfaXRlbS1cXHUwMDNlY2lfdHlwZTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0cmV0ID0gLUVQRVJNO1xcbiAxNzA6XFx0XFx0aWYgKCF0eXBlIHx8ICF0eXBlLVxcdTAwM2VjdF9pdGVtX29wcyB8fFxcbiAxNzE6XFx0XFx0ICAgICF0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluaylcXG4gMTcyOlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0LypcXG4gMTc1OlxcdFxcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxcbiAxNzY6XFx0XFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXFxuIDE3NzpcXHRcXHQgKi9cXG4gMTc4OlxcdFxcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdC8qXFxuIDE4MTpcXHRcXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcXG4gMTgyOlxcdFxcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXFxuIDE4MzpcXHRcXHQgKiBhdCBzeXNjYWxsIHRpbWUgKGFzIGxpbmsoMikgd291bGQndmUgZG9uZSksIGJlIGEgZGlyZWN0b3J5XFxuIDE4NDpcXHRcXHQgKiAod2hpY2ggbGluaygyKSB3b3VsZCd2ZSByZWZ1c2VkIHRvIGRvKSAqQU5EKiBiZSBhIGRlZXBcXG4gMTg1OlxcdFxcdCAqIGZ1Y2tpbmcgbWFnaWMsIG1ha2luZyB0aGUgdGFyZ2V0IGJ1c3kgZnJvbSBybWRpciBQT1YuXFxuIDE4NjpcXHRcXHQgKiBzeW1saW5rKDIpIGlzIG5vdGhpbmcgb2YgdGhhdCBzb3J0LCBhbmQgdGhlIGxvY2tpbmcgaXRcXG4gMTg3OlxcdFxcdCAqIGdldHMgbWF0Y2hlcyB0aGUgbm9ybWFsIHN5bWxpbmsoMikgc2VtYW50aWNzLiAgV2l0aG91dFxcbiAxODg6XFx0XFx0ICogYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgdGFyZ2V0ICh3aGljaCBtaWdodCB2ZXJ5IHdlbGxcXG4gMTg5OlxcdFxcdCAqIG5vdCBldmVuIGV4aXN0IHlldCkgZG9uZSBwcmlvciB0byBsb2NraW5nIHRoZSBwYXJlbnRcXG4gMTkwOlxcdFxcdCAqIGRpcmVjdG9yeS4gIFRoaXMgcGVydmVyc2lvbiwgT1RPSCwgbmVlZHMgdG8gcmVzb2x2ZVxcbiAxOTE6XFx0XFx0ICogdGhlIHRhcmdldCwgd2hpY2ggd291bGQgbGVhZCB0byBvYnZpb3VzIGRlYWRsb2NrcyBpZlxcbiAxOTI6XFx0XFx0ICogYXR0ZW1wdGVkIHdpdGggYW55IGRpcmVjdG9yaWVzIGxvY2tlZC5cXG4gMTkzOlxcdFxcdCAqXFxuIDE5NDpcXHRcXHQgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGdhcmJhZ2UgaXMgdXNlcmxhbmQgQUJJIGFuZCB3ZSBzaG91bGQndmVcXG4gMTk1OlxcdFxcdCAqIHNhaWQgXFxcIm5vXFxcIiBiYWNrIGluIDIwMDUuICBUb28gbGF0ZSBub3csIHNvIHdlIGdldCB0b1xcbiAxOTY6XFx0XFx0ICogcGxheSB2ZXJ5IHVnbHkgZ2FtZXMgd2l0aCBsb2NraW5nLlxcbiAxOTc6XFx0XFx0ICpcXG4gMTk4OlxcdFxcdCAqIFRyeSAqQU5ZVEhJTkcqIG9mIHRoYXQgc29ydCBpbiBuZXcgY29kZSwgYW5kIHlvdSB3aWxsXFxuIDE5OTpcXHRcXHQgKiByZWFsbHkgcmVncmV0IGl0LiAgSnVzdCBhc2sgeW91cnNlbGYgLSB3aGF0IGNvdWxkIGEgQk9GSFxcbiAyMDA6XFx0XFx0ICogZG8gdG8gbWUgYW5kIGRvIEkgd2FudCB0byBmaW5kIGl0IG91dCBmaXJzdC1oYW5kP1xcbiAyMDE6XFx0XFx0ICpcXG4gMjAyOlxcdFxcdCAqICBBViwgYSB0aG9yb3VnaGx5IGFubm95ZWQgYmFzdGFyZC5cXG4gMjAzOlxcdFxcdCAqL1xcbiAyMDQ6XFx0XFx0aW5vZGVfdW5sb2NrKGRpcik7XFxuIDIwNTpcXHRcXHRyZXQgPSBnZXRfdGFyZ2V0KHN5bW5hbWUsIFxcdTAwMjZ0YXJnZXRfaXRlbSwgZGVudHJ5LVxcdTAwM2VkX3NiKTtcXG4gMjA2OlxcdFxcdGlub2RlX2xvY2soZGlyKTtcXG4gMjA3OlxcdFxcdGlmIChyZXQpXFxuIDIwODpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxcbiAyMTE6XFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4gMjEyOlxcdFxcdGVsc2VcXG4gMjEzOlxcdFxcdFxcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcXG4gMjE0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuIDIxNTpcXHRcXHRpZiAoIXJldCkge1xcbiAyMTY6XFx0XFx0XFx0aWYgKHNkLVxcdTAwM2VzX2ZyYWctXFx1MDAzZWZyYWdfZGVhZClcXG4gMjE3OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIDIxODpcXHRcXHRcXHRlbHNlXFxuIDIxOTpcXHRcXHRcXHRcXHRyZXQgPSB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xcbiAyMjA6XFx0XFx0fVxcbiAyMjE6XFx0XFx0aWYgKCFyZXQpIHtcXG4gMjIyOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbiAyMjM6XFx0XFx0XFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xcbiAyMjQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcXG4gMjI1OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWRyb3BfbGluaylcXG4gMjI2OlxcdFxcdFxcdFxcdHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2Vkcm9wX2xpbmsocGFyZW50X2l0ZW0sXFxuIDIyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldF9pdGVtKTtcXG4gMjI4OlxcdFxcdH1cXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNDo1Ny40MTYzNTE1NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzY3OTc5MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBjb25maWdmc19zeW1saW5rYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBjb25maWdmc19zeW1saW5rYCBpcyBjcnVjaWFsOyBpdCdzIHRoZSBpbm9kZSBvcGVyYXRpb24gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHN5bWxpbmsgY3JlYXRpb24gd2l0aGluIGNvbmZpZ2ZzIGRpcmVjdG9yaWVzLiBFc3NlbnRpYWxseSwgd2hlbmV2ZXIgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGNhbGxzIGBzeW1saW5rKDIpYCBvbiBhIGNvbmZpZ2ZzIG1vdW50LCB0aGlzIGZ1bmN0aW9uIGdldHMgZXhlY3V0ZWQuIFRoaXMgaXMgYSBrZXkgcGllY2Ugb2YgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBWRlMsIHNwZWNpZmljYWxseSBpbiBob3cgY29uZmlnZnMgYmVoYXZlcywgYW5kIGl0J3MgZWFzaWx5IHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBldmVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS5cblxuVGhlIG1haW4gZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHJlc29sdmluZyB0aGUgc3ltbGluaydzIHRhcmdldCBvciBpZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBpcyBkZWxldGVkIGNvbmN1cnJlbnRseS4gSXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY2VudGVyZWQgYXJvdW5kIGxvY2tpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmtgIG9wZXJhdGlvbi5cblxuRGl2aW5nIGRlZXBlciwgdGhlIGFuYWx5c2lzIHNob3dzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBUaGUgY29yZSBtb2RpZmllZCBmdW5jdGlvbiBpcywgbmF0dXJhbGx5LCBgY29uZmlnZnNfc3ltbGlua2AuIEEgaGVscGVyIGZ1bmN0aW9uLCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIHdhcyBhbHNvIGFkZGVkLiBUaGUgcHJpbWFyeSBmb2N1cyBmb3IgdGVzdGluZyBvciBmdXp6aW5nIHdpbGwgYmUgdGhlIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbiwgc2luY2UgaXQgaXMgdGhlIGVudHJ5cG9pbnQgZm9yIHRoZXNlIG9wZXJhdGlvbnMuXG5cbk5vdywgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcy4gSXQgYXBwZWFycyB0aGUgb25seSBLY29uZmlnIG9wdGlvbiByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdGU19GU2AuIEEgcXVpY2sgbG9vayBhdCBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgY29uZmlybXMgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdGU19GU2AuIEl0J3MgYSBzdGFuZGFsb25lIGZlYXR1cmUuXG5cbkZpbmFsbHksIGNvbmZpcm1pbmcgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWE6XG4qICAgSXQncyBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgY3JlYXRpb24gb2YgY29uZmlnZnMgc3ltbGlua3MgYW5kIHJlbGF0ZWQgaXRlbSBwaW5uaW5nLlxuKiAgIEl0J3MgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50czsgbW91bnRpbmcgY29uZmlnZnMgYW5kIGNyZWF0aW5nIHN5bWxpbmtzIHdpdGggYHN5bWxpbmsoMilgLlxuKiAgIFRoZSBmb2N1cyBzeW1ib2wgaXMgY2xlYXJseSBgY29uZmlnZnNfc3ltbGlua2AuXG4qICAgVGhlIGVuYWJsaW5nIGNvbmZpZyBpcyBgQ09ORklHRlNfRlNgLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDIsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNTowMy43ODQzMzI4NzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTcyNTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnMgc3ltbGluayBoYW5kbGluZyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHJhY2VzIHdoZW4gc3ltbGlua3MgYXJlIGNyZWF0ZWQgdW5kZXIgZGVmYXVsdCBncm91cHMgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWcgaXRlbSBhbmQgY2hlY2tpbmcgaWYgdGhlIGRpcmVjdG9yeSBmcmFnbWVudCBoYXMgYmVlbiBtYXJrZWQgZGVhZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgaW4gY29uZmlnZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnMgc3ltbGluayBoYW5kbGluZyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHJhY2VzIHdoZW4gc3ltbGlua3MgYXJlIGNyZWF0ZWQgdW5kZXIgZGVmYXVsdCBncm91cHMgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWcgaXRlbSBhbmQgY2hlY2tpbmcgaWYgdGhlIGRpcmVjdG9yeSBmcmFnbWVudCBoYXMgYmVlbiBtYXJrZWQgZGVhZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgaW4gY29uZmlnZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjAzLjg2NDA2NDY5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxMjEzNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjAzLjg2NDYxMjM4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkyMTE1ODUzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkYCkgYmVmb3JlIGludm9raW5nIGBhbGxvd19saW5rYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nLCBwb2ludGVyIG5hdmlnYXRpb24sIGFuZCBjb250cm9sIGZsb3cgZm9yIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlLiBVQUYgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcsIG1lYW5pbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMGEyNzQ1MDhhYTM0NGZhNmM1Mzc0MDkxZTdkYzdkYmRhYmJkYTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzoyNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNWZlMzcyMmJkZGNmMSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAocm9vdF9kZW50cnkpIHtcbitcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbitcdFx0XHRicmVhaztcbitcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdH1cbitcdHJldHVybiByb290X2RlbnRyeSA/IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSkgOiBOVUxMO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG5AQCAtMTU3LDYgKzE3MSwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTkyLDggKzIxMiwxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRlbHNlXG4gXHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuIFx0XHRcdFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdGlmICghcmV0KSB7XG4rXHRcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkKVxuK1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcbitcdH1cbiBcdGlmICghcmV0KSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gXHRcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcbkBAIC0yMDcsNiArMjMxLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIG91dF9wdXQ6XG4gXHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xuK1x0Y29uZmlnX2l0ZW1fcHV0KHJvb3RfaXRlbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjAzLjg2NDYxMzMzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTI1MjM1NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgU3ltbGluayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggZm9yIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGhlcmUuIE15IGd1dCBmZWVsaW5nIGlzIHRvIGRpdmUgaW4gYW5kIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgY2hhbmdlIGlzIGRvaW5nLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhlIGFkZGl0aW9uIG9mIGBjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLiBUaGlzIHNvdW5kcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIHdhbGtpbmcgdXAgdGhlIGRlbnRyeSB0cmVlLCBjaGVja2luZyBgc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFRgIGFsb25nIHRoZSB3YXksIHRvIGxvY2F0ZSB0aGUgcm9vdCBpdGVtLiBUaGVuIGl0IHBpbnMgdGhlIHJvb3QgaXRlbSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgc29ydCBvZiBoaWVyYXJjaGljYWwgc3RydWN0dXJlIGluIENvbmZpZ0ZTLCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBmaW5kIHRoZSB0b3AgbGV2ZWwgb2YgdGhhdCBoaWVyYXJjaHkuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzX3N5bWxpbmsoKWAgaXRzZWxmLCBpdCB1c2VzIHRoYXQgbmV3bHkgZGVmaW5lZCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSgpYCB0byBncmFiIHRoZSByb290IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiBJdCBkb2VzIHNvbWUgY2hlY2tzIHJlbGF0ZWQgdG8gYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgIGFuZCB0aGVuIGNhbGxzIGB0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmsoLi4uKWAgcG90ZW50aWFsbHkgcGVyZm9ybWluZyBzb21lIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gVGhlIHVzZSBvZiBgZnJhZ19kZWFkYCBpcyB3b3J0aCBub3Rpbmc7IGl0IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBkZWZlcnJlZCBvciBsYXp5IGJlaGF2aW9yIGluIHRoZSBmaWxlIHN5c3RlbS4gQW5kIGZpbmFsbHksIGluIHRoZSBgb3V0X3B1dDpgIHNlY3Rpb24sIGl0IHJlbGVhc2VzIHRoZSByb290IGl0ZW0gdXNpbmcgYGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pYC4gVGhhdCBpbXBsaWVzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuTm93LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgem9vbSBvdXQgYW5kIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiBgY29uZmlnZnNfc3ltbGlua2Agd2l0aGluIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgdGhpbmdzLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sLCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9yIHBvc3NpYmx5IGJvdGgsIHRvIHRob3JvdWdobHkgZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBwYXRjaCB3YXMgbmVjZXNzYXJ5IGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgbWlnaHQgZXhpc3QuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgdGltZSB0byBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6MjU6MDguMzg5ODUxNTI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMzE6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0d2hpbGUgKHJvb3RfZGVudHJ5KSB7XFxuIDE0MDpcXHRcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTQxOlxcdFxcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4gMTQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDM6XFx0XFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuIDE0NDpcXHRcXHR9XFxuIDE0NTpcXHRcXHRyZXR1cm4gcm9vdF9kZW50cnkgPyBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpIDogTlVMTDtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNDk6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MDpcXHR7XFxuIDE1MTpcXHRcXHRpbnQgcmV0O1xcbiAxNTI6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1MzpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XFxuIDE1NjpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjE6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNjc6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3MDpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3MTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxNzI6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQvKlxcbiAxNzU6XFx0XFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE3NjpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTc3OlxcdFxcdCAqL1xcbiAxNzg6XFx0XFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0LypcXG4gMTgxOlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxODI6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTgzOlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTg0OlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxODU6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMTg2OlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAxODc6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDE4ODpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAxODk6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAxOTA6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDE5MTpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDE5MjpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAxOTM6XFx0XFx0ICpcXG4gMTk0OlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAxOTU6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDE5NjpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDE5NzpcXHRcXHQgKlxcbiAxOTg6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMTk5OlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIwMDpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIwMTpcXHRcXHQgKlxcbiAyMDI6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMDM6XFx0XFx0ICovXFxuIDIwNDpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjA1OlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMDY6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMDc6XFx0XFx0aWYgKHJldClcXG4gMjA4OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXFxuIDIxMTpcXHRcXHRcXHRyZXQgPSAtRUVYSVNUO1xcbiAyMTI6XFx0XFx0ZWxzZVxcbiAyMTM6XFx0XFx0XFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxcbiAyMTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4gMjE1OlxcdFxcdGlmICghcmV0KSB7XFxuIDIxNjpcXHRcXHRcXHRpZiAoc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkKVxcbiAyMTc6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjE4OlxcdFxcdFxcdGVsc2VcXG4gMjE5OlxcdFxcdFxcdFxcdHJldCA9IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XFxuIDIyMDpcXHRcXHR9XFxuIDIyMTpcXHRcXHRpZiAoIXJldCkge1xcbiAyMjI6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIDIyMzpcXHRcXHRcXHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XFxuIDIyNDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbiAyMjU6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKVxcbiAyMjY6XFx0XFx0XFx0XFx0dHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWRyb3BfbGluayhwYXJlbnRfaXRlbSxcXG4gMjI3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGFyZ2V0X2l0ZW0pO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjI1OjA4LjM4OTkzMTMxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njg2MjQ5MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBhbmQgdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBhbmQgb2JqZWN0IGxpZmV0aW1lIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHBhcmVudF9pdGVtYCwgcG90ZW50aWFsbHkgYW4gZW1iZWRkZWQgZGVmYXVsdCBncm91cCwgY291bGQgYmUgZnJlZWQgd2hpbGUgdGhlIGRpcmVjdG9yeSBpbm9kZSAoYGRpcmApIGlzIHVubG9ja2VkIGR1cmluZyBgZ2V0X3RhcmdldCgpYC4gVGhhdCdzIGEgY2xhc3NpYyBLQVNBTiBzY2VuYXJpbywgYW5kIHRoZSBwYXRjaCBhZGRyZXNzZXMgaXQgZGlyZWN0bHkuIEl0IGFsc28gaW5jbHVkZXMgYSBjaGVjayBmb3IgYHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWRgIGJlZm9yZSBjYWxsaW5nIGBhbGxvd19saW5rYCwgd2hpY2ggc291bmRzIGxpa2UgYSBnb29kIGRlZmVuc2l2ZSBtZWFzdXJlLiBBbmQgb2YgY291cnNlLCB0aGUgcGF0Y2ggaXMgYWxzbyB0YWtpbmcgY2FyZSB0byBwcm9wZXJseSBtYW5hZ2UgdGhlIHJlZmNvdW50IG9mIHRoZSByb290IG9iamVjdC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgY2F0Y2hpbmcuIExldCdzIHNlZS4uLiBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBiZWluZyBkb25lIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gYGttYWxsb2NgLCBgbWFsbG9jYCwgb3Igc3RhY2sgdmFyaWFibGVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBgcm9vdF9pdGVtYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gTm90aGluZyBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aHJvdWdoIGBjb3B5X3RvX3VzZXJgIG9yIGBwdXRfdXNlcmAuIFRoZXJlIGFyZSBubyBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYnVncyBiZWluZyBhZGRyZXNzZWQgaGVyZSBhcmUgc3F1YXJlbHkgaW4gdGhlIHJlYWxtIG9mIFVBRiBhbmQgb2JqZWN0IGxpZmV0aW1lLCBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LlxuXG5UaGVyZWZvcmUsIGdpdmVuIHdoYXQgSSdtIHNlZWluZywgdGhlcmUncyBubyByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IHRoaXMgcGF0Y2ggcmVxdWlyZXMgS01TQU4gYW5hbHlzaXMuIEl0J3MgZm9jdXNlZCBvbiBwcmV2ZW50aW5nIFVBRiBhbmQgbGlmZXRpbWUgaXNzdWVzLCBub3Qgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS01TQU4uXG5cblNvLCBsZXQncyBjb25maXJtIHRoZSByZXF1aXJlbWVudHM6IDEuIEtNU0FOUmVhc29uaW5nOiBDb250cmFzdGluZyBLTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5LiAyLiBOZWVkc0tNU0FOOiBmYWxzZS4gTm93LCB0byBtYWtlIHRoaXMgY3J5c3RhbCBjbGVhciwgSSdsbCBuZWVkIHRvIGNsZWFybHkgZm9ybWF0IHRoZSBLTVNBTlJlYXNvbmluZyBhbmQgdGhlbiBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMCwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzoyNToxMy4wNzYxODI1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgc3ltbGluayBjcmVhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSByb290IGNvbmZpZ19pdGVtIGhpZXJhcmNoeSAocHJldmVudGluZyBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwIGl0ZW1zIGZyb20gYmVpbmcgZnJlZWQgd2hpbGUgaW5vZGUgbG9ja3MgYXJlIHRlbXBvcmFyaWx5IGRyb3BwZWQpIGFuZCBjaGVja3MgaWYgdGhlIGZyYWdtZW50IGlzIGRlYWQgKGBzZC1cXHUwMDNlc19mcmFnLVxcdTAwM2VmcmFnX2RlYWRgKSBiZWZvcmUgaW52b2tpbmcgYGFsbG93X2xpbmtgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBpbnZvbHZlcyByZWZlcmVuY2UgY291bnRpbmcsIHBvaW50ZXIgbmF2aWdhdGlvbiwgYW5kIGNvbnRyb2wgZmxvdyBmb3Igb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgYnVmZmVycyB0byB1c2Vyc3BhY2UuIFVBRiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZywgbWVhbmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIHN5bWxpbmsgY3JlYXRpb24uIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgcm9vdCBjb25maWdfaXRlbSBoaWVyYXJjaHkgKHByZXZlbnRpbmcgZW1iZWRkZWQgZGVmYXVsdCBncm91cCBpdGVtcyBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIGlub2RlIGxvY2tzIGFyZSB0ZW1wb3JhcmlseSBkcm9wcGVkKSBhbmQgY2hlY2tzIGlmIHRoZSBmcmFnbWVudCBpcyBkZWFkIChgc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkYCkgYmVmb3JlIGludm9raW5nIGBhbGxvd19saW5rYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nLCBwb2ludGVyIG5hdmlnYXRpb24sIGFuZCBjb250cm9sIGZsb3cgZm9yIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlLiBVQUYgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcsIG1lYW5pbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[1] Phase: Succeeded StartedAt: 2026-09-02 23:25:25 +0000 UTC FinishedAt: 2026-09-02 23:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 23:25:25 +0000 UTC FinishedAt: 2026-09-02 23:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2] Phase: Succeeded StartedAt: 2026-09-02 23:25:25 +0000 UTC FinishedAt: 2026-09-03 03:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 23:25:25 +0000 UTC FinishedAt: 2026-09-03 03:05:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 23:25:25 +0000 UTC FinishedAt: 2026-09-02 23:25:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 23:25:25 +0000 UTC FinishedAt: 2026-09-02 23:25:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowckdnm/series-workflowckdnm-convert-artifact-4041136658/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 23:25:35 +0000 UTC FinishedAt: 2026-09-02 23:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 23:25:35 +0000 UTC FinishedAt: 2026-09-02 23:41:27 +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:*a4b6d844-b705-4d6e-98a2-71c7ef550f4b,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-workflowckdnm/series-workflowckdnm-convert-artifact-4041136658/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": "d1c3d72a-133a-4b2e-bff2-f9d5df56e425", "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-workflowckdnm/series-workflowckdnm-build-action-2163825552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 23:25:35 +0000 UTC FinishedAt: 2026-09-02 23:41:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a4b6d844-b705-4d6e-98a2-71c7ef550f4b,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-workflowckdnm/series-workflowckdnm-convert-artifact-4041136658/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": "d1c3d72a-133a-4b2e-bff2-f9d5df56e425", "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-workflowckdnm/series-workflowckdnm-build-action-2163825552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 23:41:27 +0000 UTC FinishedAt: 2026-09-02 23:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 23:41:27 +0000 UTC FinishedAt: 2026-09-02 23:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 23:41:27 +0000 UTC FinishedAt: 2026-09-02 23:41:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 23:41:27 +0000 UTC FinishedAt: 2026-09-02 23:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowckdnm/series-workflowckdnm-convert-artifact-1454361133/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 23:41:37 +0000 UTC FinishedAt: 2026-09-02 23:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 23:41:37 +0000 UTC FinishedAt: 2026-09-02 23:43:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1c3d72a-133a-4b2e-bff2-f9d5df56e425,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-workflowckdnm/series-workflowckdnm-build-action-2163825552/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-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 23:43:49 +0000 UTC FinishedAt: 2026-09-02 23:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 23:43:49 +0000 UTC FinishedAt: 2026-09-02 23:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 23:43:49 +0000 UTC FinishedAt: 2026-09-03 00:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 23:43:49 +0000 UTC FinishedAt: 2026-09-03 00:00:29 +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:*a4b6d844-b705-4d6e-98a2-71c7ef550f4b,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-workflowckdnm/series-workflowckdnm-convert-artifact-1454361133/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": "b8c1e619-02e0-4d8e-ae83-b67d229b1e5f", "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-workflowckdnm/series-workflowckdnm-build-action-1207176841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 23:43:49 +0000 UTC FinishedAt: 2026-09-03 00:00:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a4b6d844-b705-4d6e-98a2-71c7ef550f4b,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-workflowckdnm/series-workflowckdnm-convert-artifact-1454361133/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": "b8c1e619-02e0-4d8e-ae83-b67d229b1e5f", "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-workflowckdnm/series-workflowckdnm-build-action-1207176841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 00:00:29 +0000 UTC FinishedAt: 2026-09-03 00:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 00:00:29 +0000 UTC FinishedAt: 2026-09-03 00:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 00:00:29 +0000 UTC FinishedAt: 2026-09-03 00:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 00:00:29 +0000 UTC FinishedAt: 2026-09-03 00:02:13 +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:*b8c1e619-02e0-4d8e-ae83-b67d229b1e5f,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-workflowckdnm/series-workflowckdnm-build-action-1207176841/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-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 00:02:23 +0000 UTC FinishedAt: 2026-09-03 03:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 00:02:23 +0000 UTC FinishedAt: 2026-09-03 03:05:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"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:*d1c3d72a-133a-4b2e-bff2-f9d5df56e425,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b8c1e619-02e0-4d8e-ae83-b67d229b1e5f,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-workflowckdnm/series-workflowckdnm-build-action-2163825552/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-workflowckdnm/series-workflowckdnm-build-action-1207176841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 00:02:23 +0000 UTC FinishedAt: 2026-09-03 00:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 00:02:23 +0000 UTC FinishedAt: 2026-09-03 00:02:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"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-workflowckdnm/series-workflowckdnm-convert-artifact-3303338130/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 00:02:23 +0000 UTC FinishedAt: 2026-09-03 00:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 00:02:23 +0000 UTC FinishedAt: 2026-09-03 00:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 00:02:23 +0000 UTC FinishedAt: 2026-09-03 00:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 00:02:33 +0000 UTC FinishedAt: 2026-09-03 03:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckdnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"5bf14877-d43f-4bab-8e13-e061bc97cf74","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 00:02:33 +0000 UTC FinishedAt: 2026-09-03 03:05:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1c3d72a-133a-4b2e-bff2-f9d5df56e425,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b8c1e619-02e0-4d8e-ae83-b67d229b1e5f,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-workflowckdnm/series-workflowckdnm-build-action-2163825552/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-workflowckdnm/series-workflowckdnm-build-action-1207176841/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-workflowckdnm/series-workflowckdnm-convert-artifact-3303338130/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,}