Name: series-workflowl6gfr Phase: Succeeded StartedAt: 2026-08-05 20:06:11 +0000 UTC FinishedAt: 2026-08-06 00:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[0] Phase: Succeeded StartedAt: 2026-08-05 20:06:11 +0000 UTC FinishedAt: 2026-08-05 20:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 20:06:11 +0000 UTC FinishedAt: 2026-08-05 20:58:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "ac7bb5e7-6b22-4aed-90fd-40af07aad98a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_rmdir", "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcm1kaXImIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTU1OThlM2U3YjhhOTA4MDc4OGY0YzY4OWU1NjhhNzc4MzUxN2IzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjA6NTc6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xuaW5kZXggM2M4OGYxM2YxY2EyZS4uZWM2ZjM1NTAxNzhhMyAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9kaXIuY1xuQEAgLTQxMSw2ICYjNDM7NDExLDIxIEBAIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcbiB7XG4gXHRzdHJ1Y3QgZGVudHJ5ICogcGFyZW50ID0gZGdldChkLVx1MDAzZWRfcGFyZW50KTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgYW55IHJlZmVyZW5jZSB0byB0aGUgZGlyZW50L2l0ZW0gdGhpc1xuJiM0MztcdCAqIGRlbnRyeSBwaW5zOiBhIGNvbmN1cnJlbnQgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKCkgKGUuZy4gZnJvbVxuJiM0MztcdCAqIGNvbmZpZ2ZzX3N5bWxpbmsoKSYjMzk7cyB0YXJnZXQgcmVzb2x1dGlvbiwgd2hpY2ggcnVucyB1bmxvY2tlZFxuJiM0MztcdCAqIGFnYWluc3QgZGlyZWN0b3JpZXMgaXQgZG9lc24mIzM5O3Qgb3RoZXJ3aXNlIG93bikgb25seSBjaGVja3NcbiYjNDM7XHQgKiBkX3VuaGFzaGVkKCkgdW5kZXIgZF9sb2NrIGJlZm9yZSBwaW5uaW5nIHRoZSBpdGVtLiAgVW5oYXNoaW5nXG4mIzQzO1x0ICogZmlyc3QgZW5zdXJlcyB0aGF0IGNoZWNrIHJlbGlhYmx5IGZhaWxzIG9uY2Ugd2UmIzM5O3JlIHBhc3QgdGhpc1xuJiM0MztcdCAqIHBvaW50LCBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgZGlyZW50L2l0ZW0mIzM5O3MgcmVmY291bnQgcmVhY2hpbmdcbiYjNDM7XHQgKiB6ZXJvIHdoaWxlIHRoZSBkZW50cnkgaXMgc3RpbGwgKGJyaWVmbHkpIGhhc2hlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZC1cdTAwM2VkX2xvY2spO1xuJiM0MztcdGlmIChzaW1wbGVfcG9zaXRpdmUoZCkpXG4mIzQzO1x0XHRfX2RfZHJvcChkKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkLVx1MDAzZWRfbG9jayk7XG4mIzQzO1xuIFx0Y29uZmlnZnNfcmVtb3ZlX2RpcmVudChkKTtcbiBcbiBcdGlmIChkX3JlYWxseV9pc19wb3NpdGl2ZShkKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uYjgwNDNhNmIwYjQyNyAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtNzgsMTggJiM0Mzs3OCw0MCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuLVx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gaXRlbS1cdTAwM2VjaV9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqdGFyZ2V0X2RlbnRyeSA9IGl0ZW0tXHUwMDNlY2lfZGVudHJ5O1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnRhcmdldF9zZDtcbiBcdGNoYXIgKmJvZHk7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkodGFyZ2V0X3NkKSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGl0ZW0gaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIsIGJ1dCB0aGF0IG9ubHkga2VlcHMgdGhlIGNvbmZpZ19pdGVtXG4mIzQzO1x0ICogaXRzZWxmIGFsaXZlLiAgaXRlbS1cdTAwM2VjaV9kZW50cnkmIzM5O3MgY29uZmlnZnNfZGlyZW50IChhbmQgdGh1cyBpdHNcbiYjNDM7XHQgKiBzX2NvdW50KSBpcyBhIHNlcGFyYXRlIHJlZmNvdW50IHRoYXQgYSBjb25jdXJyZW50IHJtZGlyIG9mIHRoaXNcbiYjNDM7XHQgKiBzYW1lIGRpcmVjdG9yeSBjYW4gZHJvcCB0byB6ZXJvIGFuZCBmcmVlIGluZGVwZW5kZW50bHkgLS0gc2VlIHRoZVxuJiM0MztcdCAqIG1hdGNoaW5nIGRfbG9jay9kX3VuaGFzaGVkKCkgZGFuY2UgaW4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClcbiYjNDM7XHQgKiBhbmQgdGhlIHVuaGFzaC1iZWZvcmUtZnJlZSBvcmRlcmluZyBjb25maWdmc19yZW1vdmVfZGlyKCkgbm93XG4mIzQzO1x0ICogZ3VhcmFudGVlcy4gIERvIHRoZSBzYW1lIGNoZWNrIGhlcmUgaW5zdGVhZCBvZiB0cnVzdGluZ1xuJiM0MztcdCAqIHRhcmdldF9kZW50cnktXHUwMDNlZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0YXJnZXRfZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4mIzQzO1x0aWYgKGRfdW5oYXNoZWQodGFyZ2V0X2RlbnRyeSkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9kZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcdHRhcmdldF9zZCA9IGNvbmZpZ2ZzX2dldCh0YXJnZXRfZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0YXJnZXRfZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dCh0YXJnZXRfc2QpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuIFxuIFx0Ym9keSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghYm9keSlcbiYjNDM7XHRpZiAoIWJvZHkpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dCh0YXJnZXRfc2QpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4gXG4tXHRjb25maWdmc19nZXQodGFyZ2V0X3NkKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4gXHRpZiAodGFyZ2V0X3NkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9EUk9QUElORykge1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcm1kaXImIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTU1OThlM2U3YjhhOTA4MDc4OGY0YzY4OWU1NjhhNzc4MzUxN2IzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMjA6NTc6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDNjODhmMTNmMWNhMmUuLmVjNmYzNTUwMTc4YTMgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC00MTEsNiAmIzQzOzQxMSwyMSBAQCBzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmQpCiB7CiAJc3RydWN0IGRlbnRyeSAqIHBhcmVudCA9IGRnZXQoZC0mZ3Q7ZF9wYXJlbnQpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgYW55IHJlZmVyZW5jZSB0byB0aGUgZGlyZW50L2l0ZW0gdGhpcwomIzQzOwkgKiBkZW50cnkgcGluczogYSBjb25jdXJyZW50IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbSgpIChlLmcuIGZyb20KJiM0MzsJICogY29uZmlnZnNfc3ltbGluaygpJiMzOTtzIHRhcmdldCByZXNvbHV0aW9uLCB3aGljaCBydW5zIHVubG9ja2VkCiYjNDM7CSAqIGFnYWluc3QgZGlyZWN0b3JpZXMgaXQgZG9lc24mIzM5O3Qgb3RoZXJ3aXNlIG93bikgb25seSBjaGVja3MKJiM0MzsJICogZF91bmhhc2hlZCgpIHVuZGVyIGRfbG9jayBiZWZvcmUgcGlubmluZyB0aGUgaXRlbS4gIFVuaGFzaGluZwomIzQzOwkgKiBmaXJzdCBlbnN1cmVzIHRoYXQgY2hlY2sgcmVsaWFibHkgZmFpbHMgb25jZSB3ZSYjMzk7cmUgcGFzdCB0aGlzCiYjNDM7CSAqIHBvaW50LCBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgZGlyZW50L2l0ZW0mIzM5O3MgcmVmY291bnQgcmVhY2hpbmcKJiM0MzsJICogemVybyB3aGlsZSB0aGUgZGVudHJ5IGlzIHN0aWxsIChicmllZmx5KSBoYXNoZWQuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2soJmFtcDtkLSZndDtkX2xvY2spOwomIzQzOwlpZiAoc2ltcGxlX3Bvc2l0aXZlKGQpKQomIzQzOwkJX19kX2Ryb3AoZCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7ZC0mZ3Q7ZF9sb2NrKTsKJiM0MzsKIAljb25maWdmc19yZW1vdmVfZGlyZW50KGQpOwogCiAJaWYgKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGQpKSB7CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKaW5kZXggMzFlYjI4YjI3MzA5MS4uYjgwNDNhNmIwYjQyNyAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwpAQCAtNzgsMTggJiM0Mzs3OCw0MCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sCiAJCSAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0Jc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gaXRlbS0mZ3Q7Y2lfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqdGFyZ2V0X2RlbnRyeSA9IGl0ZW0tJmd0O2NpX2RlbnRyeTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkOwogCWNoYXIgKmJvZHk7CiAJaW50IHJldDsKIAotCWlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpCiYjNDM7CS8qCiYjNDM7CSAqIGl0ZW0gaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIsIGJ1dCB0aGF0IG9ubHkga2VlcHMgdGhlIGNvbmZpZ19pdGVtCiYjNDM7CSAqIGl0c2VsZiBhbGl2ZS4gIGl0ZW0tJmd0O2NpX2RlbnRyeSYjMzk7cyBjb25maWdmc19kaXJlbnQgKGFuZCB0aHVzIGl0cwomIzQzOwkgKiBzX2NvdW50KSBpcyBhIHNlcGFyYXRlIHJlZmNvdW50IHRoYXQgYSBjb25jdXJyZW50IHJtZGlyIG9mIHRoaXMKJiM0MzsJICogc2FtZSBkaXJlY3RvcnkgY2FuIGRyb3AgdG8gemVybyBhbmQgZnJlZSBpbmRlcGVuZGVudGx5IC0tIHNlZSB0aGUKJiM0MzsJICogbWF0Y2hpbmcgZF9sb2NrL2RfdW5oYXNoZWQoKSBkYW5jZSBpbiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKQomIzQzOwkgKiBhbmQgdGhlIHVuaGFzaC1iZWZvcmUtZnJlZSBvcmRlcmluZyBjb25maWdmc19yZW1vdmVfZGlyKCkgbm93CiYjNDM7CSAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmcKJiM0MzsJICogdGFyZ2V0X2RlbnRyeS0mZ3Q7ZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dGFyZ2V0X2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKJiM0MzsJaWYgKGRfdW5oYXNoZWQodGFyZ2V0X2RlbnRyeSkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dGFyZ2V0X2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsJdGFyZ2V0X3NkID0gY29uZmlnZnNfZ2V0KHRhcmdldF9kZW50cnktJmd0O2RfZnNkYXRhKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0YXJnZXRfZGVudHJ5LSZndDtkX2xvY2spOwomIzQzOwomIzQzOwlpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeSh0YXJnZXRfc2QpKSB7CiYjNDM7CQljb25maWdmc19wdXQodGFyZ2V0X3NkKTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiAKIAlib2R5ID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghYm9keSkKJiM0MzsJaWYgKCFib2R5KSB7CiYjNDM7CQljb25maWdmc19wdXQodGFyZ2V0X3NkKTsKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAotCWNvbmZpZ2ZzX2dldCh0YXJnZXRfc2QpOwogCXNwaW5fbG9jaygmYW1wO2NvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKIAlpZiAodGFyZ2V0X3NkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfVVNFVF9EUk9QUElORykgewogCQlzcGluX3VubG9jaygmYW1wO2NvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25maWdmcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWUgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiBDb25maWdmcy4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYGZzL2NvbmZpZ2ZzL2Rpci5jYCBhbmQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZGlyZWN0b3J5IG1hbmFnZW1lbnQgYW5kIHN5bWxpbmsgaGFuZGxpbmcgd2l0aGluIHRoZSBDb25maWdmcyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgc3BpbmxvY2sgYW5kIHVuaGFzaGluZyBvcGVyYXRpb25zIGluIGBjb25maWdmc19yZW1vdmVfZGlyYC4gVGhhdCBzdWdnZXN0cyB0aGVyZSB3ZXJlIHJhY2UgY29uZGl0aW9ucyBpbiBkaXJlY3RvcnkgcmVtb3ZhbCwgYW5kIHRoZSBzcGlubG9jayBpcyBhIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGFkZHJlc3MgaXQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIHRvIGBjcmVhdGVfbGlua2AgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AsIHRvIG5vdyBjaGVjayBgZF91bmhhc2hlZCgpYCB1bmRlciBgZF9sb2NrYCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgY29uZmlnZnNfZGlyZW50YCwgaW5kaWNhdGVzIGEgcG9zc2libGUgZml4IHRvIGEgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiBkZWFsaW5nIHdpdGggc3ltbGlua3MgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4KClRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBmdW5jdGlvbmFsIGNoYW5nZS4gQ29uZmlnZnMgaXMgYSBmdW5kYW1lbnRhbCBrZXJuZWwgc3Vic3lzdGVtLCBzbyBhbnkgbW9kaWZpY2F0aW9uIGhlcmUgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB1c2VkIHRoaXMgZnVuY3Rpb25hbGl0eSBpcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIENPTkZJRyBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gQ29uZmlnZnMgb3IgdGhlIGltcGFjdGVkIGZlYXR1cmVzLiBJIG5lZWQgdG8gZ2F1Z2UgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZ2ZzX3JlbW92ZV9kaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvZGlyLmM9MjUzPWludCBjb25maWdmc19tYWtlX2RpcmVudChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogcGFyZW50X3NkLFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTI3MC1cbmZzL2NvbmZpZ2ZzL2Rpci5jOjI3MTpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL2Rpci5jLTI3Mi17XG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MjkzPXN0YXRpYyBpbnQgY29uZmlnZnNfY3JlYXRlX2RpcihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0zMjYtXHRjb25maWdmc19wdXQoZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjMyNzpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTMyOC1cdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbi0tXG5mcy9jb25maWdmcy9kaXIuYz0zNjk9aW50IGNvbmZpZ2ZzX2NyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnRhcmdldCwgc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5NC1cdGNvbmZpZ2ZzX3B1dChkZW50cnktXHUwMDNlZF9mc2RhdGEpO1xuZnMvY29uZmlnZnMvZGlyLmM6Mzk1Olx0Y29uZmlnZnNfcmVtb3ZlX2RpcmVudChkZW50cnkpO1xuZnMvY29uZmlnZnMvZGlyLmMtMzk2LVx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5OS0vKipcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwMDogKiBjb25maWdmc19yZW1vdmVfZGlyIC0gcmVtb3ZlIGFuIGNvbmZpZ19pdGVtJiMzOTtzIGRpcmVjdG9yeS5cbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwMS0gKiBAZDpcdGRlbnRyeSB3ZSYjMzk7cmUgcmVtb3ZpbmcuXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtNDA5LVxuZnMvY29uZmlnZnMvZGlyLmM6NDEwOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQxMS17XG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtNDI4LVxuZnMvY29uZmlnZnMvZGlyLmM6NDI5Olx0Y29uZmlnZnNfcmVtb3ZlX2RpcmVudChkKTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQzMC1cbi0tXG5mcy9jb25maWdmcy9kaXIuYz04NTE9c3RhdGljIHZvaWQgY29uZmlnZnNfZGV0YWNoX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTg1My1cdGRldGFjaF9hdHRycyhkZW50cnkpO1xuZnMvY29uZmlnZnMvZGlyLmM6ODU0Olx0Y29uZmlnZnNfcmVtb3ZlX2RpcihkZW50cnkpO1xuZnMvY29uZmlnZnMvZGlyLmMtODU1LX1cbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmM9Nzc9c3RhdGljIGludCBjcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtLFxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy05MS1cdCAqIG1hdGNoaW5nIGRfbG9jay9kX3VuaGFzaGVkKCkgZGFuY2UgaW4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo5MjpcdCAqIGFuZCB0aGUgdW5oYXNoLWJlZm9yZS1mcmVlIG9yZGVyaW5nIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoKSBub3dcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy05My1cdCAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGluZGljYXRlcyBzb21lIHBvdGVudGlhbCBzeW1saW5rLXJlbGF0ZWQgY2hhbmdlcyB3aXRoaW4gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cyB3aXRoIHRoZXNlIHR5cGVzIG9mIGFkanVzdG1lbnRzLCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGhhdCBlbmFibGUgY29uZmlnZnMgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBjaGVjayBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgYW5kIHRoZW4gbWF5YmUgYGZzL0tjb25maWdgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEtub3dpbmcgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIHJlbGF0ZWQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgbWlnaHQgaGF2ZSBhbnkgYnJvYWRlciBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBjb25maWdmcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQ09ORklHRlNfRlNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBraW5kcyBvZiBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIGFzIGR5bmFtaWMgYXMgY29uZmlnZnMuIFRoZSBwYXRjaCBtZW50aW9ucyBhIHJhY2UgYmV0d2VlbiBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBhYnNvbHV0ZWx5IG5lZWRzIGZ1enppbmcuIENvbmN1cnJlbmN5IGJ1Z3MgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBmaW5kIHRocm91Z2ggbWFudWFsIHJldmlldyBhbG9uZS4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgdnVsbmVyYWJpbGl0eSBiZXR0ZXIgYW5kIHBsYW4gdGhlIGZ1enppbmcgY2FtcGFpZ24sIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gVGhlIGNvcmUgZnVuY3Rpb25zIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBjb25maWdmc19yZW1vdmVfZGlyYCBhbmQgYGNyZWF0ZV9saW5rYCwgb3IgcGVyaGFwcyBldmVuIGBjb25maWdmc19zeW1saW5rYCB3aGljaCBJIHJlY2FsbCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgY3JlYXRlX2xpbmtgLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbHMgYW5kIGNvbnRleHRzIGZvciBgY3JlYXRlX2xpbmtgLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbnN0cnVjdCBlZmZlY3RpdmUgZnV6emluZyBoYXJuZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3JlYXRlX2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jPTU2PXN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RhcmdldF9wYXRoKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzYtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6Nzc6c3RhdGljIGludCBjcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVx0XHQgICAgICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMjUtXHRpZiAoIXJldClcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMjY6XHRcdHJldCA9IGNvbmZpZ2ZzX2NyZWF0ZV9saW5rKHRhcmdldF9zZCwgcGFyZW50X2l0ZW0tXHUwMDNlY2lfZGVudHJ5LFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTEyNy1cdFx0XHRcdFx0ICAgZGVudHJ5LCBib2R5KTtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmM9MTU3PWludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjIwLVx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyMTpcdFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBDb25maWdGUyBMaW5rIFJlbW92YWwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgY29uZmlnZnNfc3ltbGlua2AgdWx0aW1hdGVseSBib2lscyBkb3duIHRvIGBjcmVhdGVfbGlua2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHN5bWJvbGljIGxpbmtzIGFyZSBqdXN0IGFub3RoZXIgZm9ybSBvZiBmaWxlIHN5c3RlbSBlbnRyeS4gQnV0LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgdGhlc2UgbGlua3MgYXJlICpyZW1vdmVkKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbGluayByZW1vdmFsIHdpdGhpbiBDb25maWdGUy4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGFsbCB0aGUgY2FsbGVycyBvZiBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGdhdGVrZWVwZXIgZm9yIGRpcmVjdG9yeSByZW1vdmFsIGluIHRoaXMgY29udGV4dCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aG8qIGlzIHJlbW92aW5nIGRpcmVjdG9yaWVzLCBhbmQgKndoeSosIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc3ltbGlua3MgcGxheSBpbnRvIHRoYXQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIHBvdGVudGlhbCBhdmVudWVzIGZvciBsaW5rIHJlbW92YWwsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IGhhcHBlbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBzaWRlLWVmZmVjdHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnNfcmVtb3ZlX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jPTI1Mz1pbnQgY29uZmlnZnNfbWFrZV9kaXJlbnQoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqIHBhcmVudF9zZCxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0yNzAtXG5mcy9jb25maWdmcy9kaXIuYzoyNzE6c3RhdGljIHZvaWQgY29uZmlnZnNfcmVtb3ZlX2RpcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9jb25maWdmcy9kaXIuYy0yNzIte1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTI5Mz1zdGF0aWMgaW50IGNvbmZpZ2ZzX2NyZWF0ZV9kaXIoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtMzI2LVx0Y29uZmlnZnNfcHV0KGRlbnRyeS1cdTAwM2VkX2ZzZGF0YSk7XG5mcy9jb25maWdmcy9kaXIuYzozMjc6XHRjb25maWdmc19yZW1vdmVfZGlyZW50KGRlbnRyeSk7XG5mcy9jb25maWdmcy9kaXIuYy0zMjgtXHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MzY5PWludCBjb25maWdmc19jcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXQsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0zOTQtXHRjb25maWdmc19wdXQoZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjM5NTpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5Ni1cdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0zOTktLyoqXG5mcy9jb25maWdmcy9kaXIuYzo0MDA6ICogY29uZmlnZnNfcmVtb3ZlX2RpciAtIHJlbW92ZSBhbiBjb25maWdfaXRlbSYjMzk7cyBkaXJlY3RvcnkuXG5mcy9jb25maWdmcy9kaXIuYy00MDEtICogQGQ6XHRkZW50cnkgd2UmIzM5O3JlIHJlbW92aW5nLlxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwOS1cbmZzL2NvbmZpZ2ZzL2Rpci5jOjQxMDpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmQpXG5mcy9jb25maWdmcy9kaXIuYy00MTEte1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTQyOC1cbmZzL2NvbmZpZ2ZzL2Rpci5jOjQyOTpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZCk7XG5mcy9jb25maWdmcy9kaXIuYy00MzAtXG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9ODUxPXN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RldGFjaF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5mcy9jb25maWdmcy9kaXIuYy04NTMtXHRkZXRhY2hfYXR0cnMoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjg1NDpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXIoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTg1NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBGaWxlIFN5c3RlbSBEZXRhY2htZW50IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gYGNvbmZpZ2ZzX2RldGFjaF9pdGVtYCBpcyBvdXIgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGF0IGl0IHVsdGltYXRlbHkgY2FsbHMgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGFjdGlvbiB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IHRoZSBmbG93IG9mIHRoaXMgZGV0YWNoIG9wZXJhdGlvbi4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hvICphY3R1YWxseSogdHJpZ2dlcnMgdGhpcyBkZXRhY2htZW50PyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgc3lzdGVtcyBhcmUgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGF0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgZGlyZWN0b3J5IGJlaW5nIHJlbW92ZWQuIEl0IGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3Igb3RoZXIgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGltcGxpY2F0aW9ucyBvZiB0aGF0IGRldGFjaG1lbnQuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnNfZGV0YWNoX2l0ZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9kaXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9kaXIuYz04MzE9c3RhdGljIHZvaWQgbGlua19ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnRfZ3JvdXAsIHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTg1MC0vKiBDYWxsZXIgaG9sZHMgdGhlIG11dGV4IG9mIHRoZSBpdGVtJiMzOTtzIGlub2RlICovXG5mcy9jb25maWdmcy9kaXIuYzo4NTE6c3RhdGljIHZvaWQgY29uZmlnZnNfZGV0YWNoX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvY29uZmlnZnMvZGlyLmMtODUyLXtcbi0tXG5mcy9jb25maWdmcy9kaXIuYy04NjYtICpcbmZzL2NvbmZpZ2ZzL2Rpci5jOjg2NzogKiBjb25maWdmc19kZXRhY2hfZ3JvdXAoKSBhbmQgY29uZmlnZnNfZGV0YWNoX2l0ZW0oKSBiZWhhdmUgc2ltaWxhcmx5IG9uXG5mcy9jb25maWdmcy9kaXIuYy04NjgtICogdGhlIHdheSBvdXQuICBUaGV5IGFzc3VtZSB0aGF0IHRoZSBwcm9wZXIgc2VtYXBob3JlcyBhcmUgaGVsZCwgdGhleVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTg3Mj1zdGF0aWMgaW50IGNvbmZpZ2ZzX2F0dGFjaF9pdGVtKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy04ODctXHRcdFx0aW5vZGVfbG9jayhkX2lub2RlKGRlbnRyeSkpO1xuZnMvY29uZmlnZnMvZGlyLmM6ODg4Olx0XHRcdGNvbmZpZ2ZzX2RldGFjaF9pdGVtKGRlbnRyeSk7XG5mcy9jb25maWdmcy9kaXIuYy04ODktXHRcdFx0ZF9pbm9kZShkZW50cnkpLVx1MDAzZWlfZmxhZ3MgfD0gU19ERUFEO1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTkwMD1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfZ3JvdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTkwMi1cdGRldGFjaF9ncm91cHMoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjkwMzpcdGNvbmZpZ2ZzX2RldGFjaF9pdGVtKGRlbnRyeSk7XG5mcy9jb25maWdmcy9kaXIuYy05MDQtfVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTE0ODQ9c3RhdGljIGludCBjb25maWdmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTE1NzQtXHR9IGVsc2Uge1xuZnMvY29uZmlnZnMvZGlyLmM6MTU3NTpcdFx0Y29uZmlnZnNfZGV0YWNoX2l0ZW0oZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE1NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ0ZTIFJlbW92YWwgYW5kIFN5bWxpbmsgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGtleSBlbnRyeSBwb2ludHMgYmVjYXVzZSBgY29uZmlnZnNfcm1kaXJgIGV2ZW50dWFsbHkgY2FsbHMgYGNvbmZpZ2ZzX2RldGFjaF9pdGVtYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIFNvLCB0aGUgcmVtb3ZhbCBwcm9jZXNzIHNlZW1zIHRvIGZsb3cgZnJvbSBgY29uZmlnZnNfcm1kaXJgIGRvd24gdG8gYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgLiBJdCYjMzk7cyBsaWtlbHkgc2ltaWxhciBmb3IgdGhlIHN5bWxpbmsgZnVuY3Rpb25hbGl0eS4KCk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nIGFuZCBlbnN1cmUgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcmlnaHQgYXJlYXMsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gWWVzLCBpdCBpcy4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEkmIzM5O2xsIGFsc28gZG8gdGhlIHNhbWUgZm9yIGBjcmVhdGVfbGlua2A7IHRoYXQmIzM5O3MgYWxzbyBzdGF0aWMuIFRoaXMgbWVhbnMgdGhlc2UgYXJlbiYjMzk7dCBwdWJsaWMgQVBJIGVudHJ5IHBvaW50cy4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRlZmluaXRpdmVseSB2ZXJpZnkgdGhhdCBib3RoIGBjb25maWdmc19ybWRpcmAgYW5kIGBjb25maWdmc19zeW1saW5rYCAqYXJlbiYjMzk7dCogc3RhdGljLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGV5IGFyZSBwdWJsaWMsIGV4cG9zZWQgZW50cnkgcG9pbnRzIHRvIHRoZSBBUEkuIFRoaXMgd2lsbCBjb25maXJtIHRoYXQgbXkgZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIGlzIGNvcnJlY3QsIGFuZCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWdmc19ybWRpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jPTM2OT1pbnQgY29uZmlnZnNfY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0LCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtNDA0LSAqIHRoZSBkaXJlY3RvcnkgYmVmb3JlIHdlIHJlbW92ZSB0aGUgZGlyZWN0b3J5LCBhbmQgd2UmIzM5O3ZlIGlubGluZWRcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwNTogKiB3aGF0IHVzZWQgdG8gYmUgY29uZmlnZnNfcm1kaXIoKSBiZWxvdywgaW5zdGVhZCBvZiBjYWxsaW5nIHNlcGFyYXRlbHkuXG5mcy9jb25maWdmcy9kaXIuYy00MDYtICpcbi0tXG5mcy9jb25maWdmcy9kaXIuYz0xMDA3PXN0YXRpYyBpbnQgY29uZmlnZnNfZHVtcChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCwgaW50IGxldmVsKVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwNDQtICogVkZTLVx1MDAzZWNvbmZpZ2ZzIHBhdGguICBTbyBpdCBtdXN0IHRha2UgVkZTIGxvY2tzIHRvIHByZXZlbnQgdGhlXG5mcy9jb25maWdmcy9kaXIuYzoxMDQ1OiAqIFZGUy1cdTAwM2Vjb25maWdmcyBzdHVmZiAoY29uZmlnZnNfbWtkaXIoKSwgY29uZmlnZnNfcm1kaXIoKSwgZXRjKS4gIFRoaXMgaXNcbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwNDYtICogd2h5IHlvdSBjYW4mIzM5O3QgY2FsbCB0aGVzZSBmdW5jdGlvbnMgdW5kZXJuZWF0aCBjb25maWdmcyBjYWxsYmFja3MuXG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MTMwND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTE0ODMtXG5mcy9jb25maWdmcy9kaXIuYzoxNDg0OnN0YXRpYyBpbnQgY29uZmlnZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE0ODUte1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTE1OTQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9jb25maWdmcy9kaXIuYy0xNTk1LVx0Lm1rZGlyXHRcdD0gY29uZmlnZnNfbWtkaXIsXG5mcy9jb25maWdmcy9kaXIuYzoxNTk2Olx0LnJtZGlyXHRcdD0gY29uZmlnZnNfcm1kaXIsXG5mcy9jb25maWdmcy9kaXIuYy0xNTk3LVx0LnN5bWxpbmtcdD0gY29uZmlnZnNfc3ltbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZmlnRlMgRGlyZWN0b3J5IE9wZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBjb25maWdmc19ybWRpcmAsIGFuZCBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHNjb3BlZCB0byBpdHMgY29tcGlsYXRpb24gdW5pdC4gSG1tLCBidXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgYGNvbmZpZ2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIE5vdywgYGNvbmZpZ2ZzX3N5bWxpbmtgIGlzICphbHNvKiBpbiB0aGF0IHNhbWUgc3RydWN0dXJlLgoKVGhlIHN0YXRpYyBuYXR1cmUgb2YgYGNvbmZpZ2ZzX3JtZGlyYCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIGZvciBmdXp6aW5nLiBJZiBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIG5vdCBnb2luZyB0byBzaG93IHVwIGFzIGEgZGlzdGluY3Qgc3ltYm9sIGZvciBhIGZ1enplciB0byB0YXJnZXQgZGlyZWN0bHksIHVubGVzcyB0aGUgY29tcGlsZXIgKmRvZXNuJiMzOTt0KiBpbmxpbmUgaXQsIHdoaWNoIHNlZW1zIHVubGlrZWx5IGZvciBhbiBpbm9kZSBvcGVyYXRpb24uIFVzdWFsbHkgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zIHdvdWxkIGJlIGhhbmRsZWQgdGhyb3VnaCB0aGUgaW5vZGUgb3BlcmF0aW9uIHRhYmxlLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBsZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCB5ZXMsIGhlcmUgd2UgZ28uLi4gYGNvbmZpZ2ZzX3N5bWxpbmtgICppcyogZGVmaW5lZCBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCwgYW5kIGl0JiMzOTtzICpub3QqIHN0YXRpYy4gQWxyaWdodCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gU28gaXQmIzM5O3MgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBjb21waWxhdGlvbiB1bml0LiBUaGlzIGRldGFpbCBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZ2ZzX3N5bWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIwOkRFRklORV9NVVRFWChjb25maWdmc19zeW1saW5rX211dGV4KTtcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMS1cbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmM9MTM5PXN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1Ni1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxNTc6aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1OC1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxOS1cdGlmICghcmV0KSB7XG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMS1cdFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMy1cdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmspXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jPTIzNT1pbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI3OS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyODA6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTI4MS1cdC5nZXRfbGluayA9IHNpbXBsZV9nZXRfbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBDb25maWdGUyBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjb25maWdmc2AgY29kZSwgYW5kIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBjb25maWdmc19zeW1saW5rYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgdGhlIGZ1enplciB0byBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpOb3csIHdoYXQgYWJvdXQgYGNvbmZpZ2ZzX3JtZGlyYD8gSG1tLCBpdCAqaXMqIHN0YXRpYyBpbiBgZnMvY29uZmlnZnMvZGlyLmNgLiBXYWl0IGEgbWludXRlLCBidXQgaXQmIzM5O3MgYW4gaW5vZGUgb3BlcmF0aW9uLCBzbyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCBtYWtlcyBpdCBhIHBlcmZlY3RseSB2YWxpZCBmb2N1cyBzeW1ib2wsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiB0aGUgbWl4LiBJJiMzOTtsbCBuZWVkIHRoZSBleGFjdCBhZGRyZXNzIG9mIHRoYXQgZnVuY3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZS4gWWVwLCBgY29uZmlnZnNfdW5saW5rYCBpcyBhbm90aGVyIGlub2RlIG9wZXJhdGlvbiBhbmQgaXQmIzM5O3MgYWxzbyAqbm90KiBzdGF0aWMuIEdvb2QuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHRlNfRlNgIGlzIHRoZSBvbmx5IHJlbGV2YW50IG9wdGlvbiwgd2hpY2ggaXMgc2ltcGxlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBzdGF0dXNlczsgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIGlzIHN0YXRpYywgYGNyZWF0ZV9saW5rYCBpcyBzdGF0aWMsIGFzIGV4cGVjdGVkLiBTbywgYGNvbmZpZ2ZzX3JtZGlyYCwgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBhbmQgYGNvbmZpZ2ZzX3VubGlua2AgYXJlIGFsbCBzb2xpZCBjYW5kaWRhdGVzLiBUaGV5IGdpdmUgbWUgbW9yZSBjaGFuY2VzIGZvciBlZGdlIGNhc2VzIHRvIHBvcCB1cC4KClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCwganVzdCB0byBiZSBzdXJlLiBPa2F5LCB0aGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBjb25maWdmc19yZW1vdmVfZGlyYCAoY2FsbGVkIGJ5IGBjb25maWdmc19ybWRpcmApIGFuZCBgY3JlYXRlX2xpbmtgIChjYWxsZWQgYnkgYGNvbmZpZ2ZzX3N5bWxpbmtgKS4gR290IGl0LiBTbyBmdXp6aW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBkaXJlY3RseSB0ZXN0IHRoZSBsb2NraW5nIGFuZCB1bmhhc2hpbmcgbG9naWMgaW1wbGVtZW50ZWQgaW4gdGhlIHBhdGNoLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBhcyB0aGUgcHJpbWFyeSBmb2N1cywgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIGFyb3VuZCB0aGVtLgoKU28sIEkgaGF2ZSBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSB0d28uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGxvY2tpbmcgc2NoZW1lIHRvIGd1YXJhbnRlZSBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlyZWN0b3J5IGVudHJ5LiBTaW5jZSBJJiMzOTttIGZ1enppbmcgdG8gZXhwbG9pdCByYWNlIGNvbmRpdGlvbnMsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGJ1dCBmb3Igbm93LCBpdCBzZWVtcyB0aGUgYENPTkZJR0ZTX0ZTYCBpcyBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09ORklHRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ09ORklHRlNfRlMgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzdXJyb3VuZGluZyBgQ09ORklHRlNfRlNgLiBTaW1wbHkga25vd2luZyB0aGUgb3B0aW9uIGV4aXN0cyBpc24mIzM5O3QgZW5vdWdoOyBJIG5lZWQgdGhlIGdyYW51bGFyaXR5LiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyBpdCBtaWdodCBoYXZlLiBUaGlzIGlzIHdoZXJlIHRoZSBLY29uZmlnIGZpbGUgYmVjb21lcyBlc3NlbnRpYWwuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBtb2R1bGUgYmVoYXZlcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBlY29zeXN0ZW0uIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDT05GSUdGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxuICAgNjpcdFx0ICBvZiBzeXNmcyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcbiAgIDc6XHRcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcbiAgIDg6XHRcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXG4gIDExOlx0XHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTgKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqUGF0Y2ggQXNzZXNzbWVudCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBObyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYXJlIGZsYWdnZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludGVncmF0aW9uIGludG8gb3VyIGZ1enppbmcgd29ya2Zsb3cuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gY29uZmlnZnMsIHNwZWNpZmljYWxseSBiZXR3ZWVuIHJlbW92aW5nIGEgZGlyZWN0b3J5IGFuZCBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsuIEl0IHNvdW5kcyBsaWtlIHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgdW5oYXNoaW5nIGNoZWNrcyDigJMgY2xhc3NpYyBzeW5jaHJvbml6YXRpb24gZml4ZXMsIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIGV4Y2VscyBhdCB1bmNvdmVyaW5nLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKldvcnRoRnV6emluZzogdHJ1ZSoqLgoKTm93LCB0byB0YXJnZXQgdGhlIGZ1enppbmcgZWZmZWN0aXZlbHksIHdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy4gVGhlIGRlc2NyaXB0aW9uIGNsZWFybHkgcG9pbnRzIHRvIGBjb25maWdmc19ybWRpcmAgYW5kIGBjb25maWdmc19zeW1saW5rYCBhcyB0aGUgZm9jYWwgcG9pbnRzLiBUaG9zZSBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgcHJpbWFyeSB0YXJnZXRzIG9mIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBTbywgKipGb2N1c1N5bWJvbHM6IFsmIzM0O2NvbmZpZ2ZzX3JtZGlyJiMzNDssICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7XSoqLgoKQW5kIHNpbmNlIHRoaXMgcGF0Y2ggaXMgYWJvdXQgbG9ja2luZyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGl0c2VsZiwgd2UmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBhbmFseXNpcywgaXQgbmVlZHMgdGhlIGBDT05GSUdGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBtYWtlIHN1cmUgaXMgZW5hYmxlZCB3b3VsZCBiZTogKipFbmFibGVDb25maWdzOiBbJiMzNDtDT05GSUdGU19GUyYjMzQ7XSoqLgoKVGhlIHJlYXNvbmluZyBmb3IgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVuaGFzaGluZyBjaGVja3MgdG8gcHJldmVudCB0aGUgcmFjZSBjb25kaXRpb24uIEZ1enppbmcgYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGlzIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLCBwcm9iaW5nIHRoZSBib3VuZGFyeSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWxseSByZXZlYWxpbmcgZnVydGhlciBpc3N1ZXMuIFRoYXQmIzM5O3Mgd2hhdCBhIGdvb2QgZnV6emluZyBjYW1wYWlnbiBpcyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcm1kaXImIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmZpZ2ZzX3JtZGlyJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX3N5bWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb25maWdmcyBiZXR3ZWVuIGRpcmVjdG9yeSByZW1vdmFsIGFuZCBzeW1saW5rIGNyZWF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgbG9ja2luZyBhbmQgdW5oYXNoaW5nIGNoZWNrcy4gRnV6emluZyBjb25maWdmc19ybWRpciBhbmQgY29uZmlnZnNfc3ltbGluayB3aWxsIGV4ZXJjaXNlIHRoaXMgbmV3IHN5bmNocm9uaXphdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU3OjQwLjI0NjcwMzgzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzc2MjE2OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcm1kaXJcIixcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0MC4yNDY3MTE1NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzkyNTE5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NTU5OGUzZTdiOGE5MDgwNzg4ZjRjNjg5ZTU2OGE3NzgzNTE3YjM3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMjA6NTc6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xcbmluZGV4IDNjODhmMTNmMWNhMmUuLmVjNmYzNTUwMTc4YTMgMTAwNjQ0XFxuLS0tIGEvZnMvY29uZmlnZnMvZGlyLmNcXG4rKysgYi9mcy9jb25maWdmcy9kaXIuY1xcbkBAIC00MTEsNiArNDExLDIxIEBAIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICogcGFyZW50ID0gZGdldChkLVxcdTAwM2VkX3BhcmVudCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGFueSByZWZlcmVuY2UgdG8gdGhlIGRpcmVudC9pdGVtIHRoaXNcXG4rXFx0ICogZGVudHJ5IHBpbnM6IGEgY29uY3VycmVudCBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKSAoZS5nLiBmcm9tXFxuK1xcdCAqIGNvbmZpZ2ZzX3N5bWxpbmsoKSdzIHRhcmdldCByZXNvbHV0aW9uLCB3aGljaCBydW5zIHVubG9ja2VkXFxuK1xcdCAqIGFnYWluc3QgZGlyZWN0b3JpZXMgaXQgZG9lc24ndCBvdGhlcndpc2Ugb3duKSBvbmx5IGNoZWNrc1xcbitcXHQgKiBkX3VuaGFzaGVkKCkgdW5kZXIgZF9sb2NrIGJlZm9yZSBwaW5uaW5nIHRoZSBpdGVtLiAgVW5oYXNoaW5nXFxuK1xcdCAqIGZpcnN0IGVuc3VyZXMgdGhhdCBjaGVjayByZWxpYWJseSBmYWlscyBvbmNlIHdlJ3JlIHBhc3QgdGhpc1xcbitcXHQgKiBwb2ludCwgaW5zdGVhZCBvZiByYWNpbmcgdGhlIGRpcmVudC9pdGVtJ3MgcmVmY291bnQgcmVhY2hpbmdcXG4rXFx0ICogemVybyB3aGlsZSB0aGUgZGVudHJ5IGlzIHN0aWxsIChicmllZmx5KSBoYXNoZWQuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmQtXFx1MDAzZWRfbG9jayk7XFxuK1xcdGlmIChzaW1wbGVfcG9zaXRpdmUoZCkpXFxuK1xcdFxcdF9fZF9kcm9wKGQpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZC1cXHUwMDNlZF9sb2NrKTtcXG4rXFxuIFxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZCk7XFxuIFxcbiBcXHRpZiAoZF9yZWFsbHlfaXNfcG9zaXRpdmUoZCkpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuaW5kZXggMzFlYjI4YjI3MzA5MS4uYjgwNDNhNmIwYjQyNyAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcXG5AQCAtNzgsMTggKzc4LDQwIEBAIHN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbi1cXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXRfc2QgPSBpdGVtLVxcdTAwM2VjaV9kZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICp0YXJnZXRfZGVudHJ5ID0gaXRlbS1cXHUwMDNlY2lfZGVudHJ5O1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXRfc2Q7XFxuIFxcdGNoYXIgKmJvZHk7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeSh0YXJnZXRfc2QpKVxcbitcXHQvKlxcbitcXHQgKiBpdGVtIGlzIHBpbm5lZCBieSB0aGUgY2FsbGVyLCBidXQgdGhhdCBvbmx5IGtlZXBzIHRoZSBjb25maWdfaXRlbVxcbitcXHQgKiBpdHNlbGYgYWxpdmUuICBpdGVtLVxcdTAwM2VjaV9kZW50cnkncyBjb25maWdmc19kaXJlbnQgKGFuZCB0aHVzIGl0c1xcbitcXHQgKiBzX2NvdW50KSBpcyBhIHNlcGFyYXRlIHJlZmNvdW50IHRoYXQgYSBjb25jdXJyZW50IHJtZGlyIG9mIHRoaXNcXG4rXFx0ICogc2FtZSBkaXJlY3RvcnkgY2FuIGRyb3AgdG8gemVybyBhbmQgZnJlZSBpbmRlcGVuZGVudGx5IC0tIHNlZSB0aGVcXG4rXFx0ICogbWF0Y2hpbmcgZF9sb2NrL2RfdW5oYXNoZWQoKSBkYW5jZSBpbiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKVxcbitcXHQgKiBhbmQgdGhlIHVuaGFzaC1iZWZvcmUtZnJlZSBvcmRlcmluZyBjb25maWdmc19yZW1vdmVfZGlyKCkgbm93XFxuK1xcdCAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmdcXG4rXFx0ICogdGFyZ2V0X2RlbnRyeS1cXHUwMDNlZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0YXJnZXRfZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbitcXHRpZiAoZF91bmhhc2hlZCh0YXJnZXRfZGVudHJ5KSkge1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dGFyZ2V0X2RlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFx0dGFyZ2V0X3NkID0gY29uZmlnZnNfZ2V0KHRhcmdldF9kZW50cnktXFx1MDAzZWRfZnNkYXRhKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRhcmdldF9kZW50cnktXFx1MDAzZWRfbG9jayk7XFxuK1xcbitcXHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeSh0YXJnZXRfc2QpKSB7XFxuK1xcdFxcdGNvbmZpZ2ZzX3B1dCh0YXJnZXRfc2QpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0fVxcbiBcXG4gXFx0Ym9keSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKCFib2R5KVxcbitcXHRpZiAoIWJvZHkpIHtcXG4rXFx0XFx0Y29uZmlnZnNfcHV0KHRhcmdldF9zZCk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuIFxcbi1cXHRjb25maWdmc19nZXQodGFyZ2V0X3NkKTtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XFxuIFxcdGlmICh0YXJnZXRfc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfRFJPUFBJTkcpIHtcXG4gXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTc6NDEuNTI3MDExMDA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTA0OTU4OTUyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19ybWRpclwiLFxuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgYmV0d2VlbiBkaXJlY3RvcnkgcmVtb3ZhbCBhbmQgc3ltbGluayBjcmVhdGlvbiBieSBhZGRpbmcgcHJvcGVyIGxvY2tpbmcgYW5kIHVuaGFzaGluZyBjaGVja3MuIEZ1enppbmcgY29uZmlnZnNfcm1kaXIgYW5kIGNvbmZpZ2ZzX3N5bWxpbmsgd2lsbCBleGVyY2lzZSB0aGlzIG5ldyBzeW5jaHJvbml6YXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1NTk4ZTNlN2I4YTkwODA3ODhmNGM2ODllNTY4YTc3ODM1MTdiMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIwOjU3OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xuaW5kZXggM2M4OGYxM2YxY2EyZS4uZWM2ZjM1NTAxNzhhMyAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jXG4rKysgYi9mcy9jb25maWdmcy9kaXIuY1xuQEAgLTQxMSw2ICs0MTEsMjEgQEAgc3RhdGljIHZvaWQgY29uZmlnZnNfcmVtb3ZlX2RpcihzdHJ1Y3QgZGVudHJ5ICpkKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKiBwYXJlbnQgPSBkZ2V0KGQtXHUwMDNlZF9wYXJlbnQpO1xuIFxuK1x0LypcbitcdCAqIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgYW55IHJlZmVyZW5jZSB0byB0aGUgZGlyZW50L2l0ZW0gdGhpc1xuK1x0ICogZGVudHJ5IHBpbnM6IGEgY29uY3VycmVudCBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKSAoZS5nLiBmcm9tXG4rXHQgKiBjb25maWdmc19zeW1saW5rKCkncyB0YXJnZXQgcmVzb2x1dGlvbiwgd2hpY2ggcnVucyB1bmxvY2tlZFxuK1x0ICogYWdhaW5zdCBkaXJlY3RvcmllcyBpdCBkb2Vzbid0IG90aGVyd2lzZSBvd24pIG9ubHkgY2hlY2tzXG4rXHQgKiBkX3VuaGFzaGVkKCkgdW5kZXIgZF9sb2NrIGJlZm9yZSBwaW5uaW5nIHRoZSBpdGVtLiAgVW5oYXNoaW5nXG4rXHQgKiBmaXJzdCBlbnN1cmVzIHRoYXQgY2hlY2sgcmVsaWFibHkgZmFpbHMgb25jZSB3ZSdyZSBwYXN0IHRoaXNcbitcdCAqIHBvaW50LCBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgZGlyZW50L2l0ZW0ncyByZWZjb3VudCByZWFjaGluZ1xuK1x0ICogemVybyB3aGlsZSB0aGUgZGVudHJ5IGlzIHN0aWxsIChicmllZmx5KSBoYXNoZWQuXG4rXHQgKi9cbitcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWRfbG9jayk7XG4rXHRpZiAoc2ltcGxlX3Bvc2l0aXZlKGQpKVxuK1x0XHRfX2RfZHJvcChkKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmQtXHUwMDNlZF9sb2NrKTtcbitcbiBcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZCk7XG4gXG4gXHRpZiAoZF9yZWFsbHlfaXNfcG9zaXRpdmUoZCkpIHtcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbmluZGV4IDMxZWIyOGIyNzMwOTEuLmI4MDQzYTZiMGI0MjcgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcbisrKyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuQEAgLTc4LDE4ICs3OCw0MCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuLVx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gaXRlbS1cdTAwM2VjaV9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRzdHJ1Y3QgZGVudHJ5ICp0YXJnZXRfZGVudHJ5ID0gaXRlbS1cdTAwM2VjaV9kZW50cnk7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXRfc2Q7XG4gXHRjaGFyICpib2R5O1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpXG4rXHQvKlxuK1x0ICogaXRlbSBpcyBwaW5uZWQgYnkgdGhlIGNhbGxlciwgYnV0IHRoYXQgb25seSBrZWVwcyB0aGUgY29uZmlnX2l0ZW1cbitcdCAqIGl0c2VsZiBhbGl2ZS4gIGl0ZW0tXHUwMDNlY2lfZGVudHJ5J3MgY29uZmlnZnNfZGlyZW50IChhbmQgdGh1cyBpdHNcbitcdCAqIHNfY291bnQpIGlzIGEgc2VwYXJhdGUgcmVmY291bnQgdGhhdCBhIGNvbmN1cnJlbnQgcm1kaXIgb2YgdGhpc1xuK1x0ICogc2FtZSBkaXJlY3RvcnkgY2FuIGRyb3AgdG8gemVybyBhbmQgZnJlZSBpbmRlcGVuZGVudGx5IC0tIHNlZSB0aGVcbitcdCAqIG1hdGNoaW5nIGRfbG9jay9kX3VuaGFzaGVkKCkgZGFuY2UgaW4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClcbitcdCAqIGFuZCB0aGUgdW5oYXNoLWJlZm9yZS1mcmVlIG9yZGVyaW5nIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoKSBub3dcbitcdCAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmdcbitcdCAqIHRhcmdldF9kZW50cnktXHUwMDNlZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LlxuK1x0ICovXG4rXHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2RlbnRyeS1cdTAwM2VkX2xvY2spO1xuK1x0aWYgKGRfdW5oYXNoZWQodGFyZ2V0X2RlbnRyeSkpIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2RlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcdHRhcmdldF9zZCA9IGNvbmZpZ2ZzX2dldCh0YXJnZXRfZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9kZW50cnktXHUwMDNlZF9sb2NrKTtcbitcbitcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpIHtcbitcdFx0Y29uZmlnZnNfcHV0KHRhcmdldF9zZCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuIFxuIFx0Ym9keSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghYm9keSlcbitcdGlmICghYm9keSkge1xuK1x0XHRjb25maWdmc19wdXQodGFyZ2V0X3NkKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4gXG4tXHRjb25maWdmc19nZXQodGFyZ2V0X3NkKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4gXHRpZiAodGFyZ2V0X3NkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9EUk9QUElORykge1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0MS41MjcwMTMzMzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjU4NDA0MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbmZpZ2ZzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3Npbmcgc29tZSBjb25jdXJyZW5jeSBpc3N1ZXMgd2l0aGluIENvbmZpZ2ZzLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGBmcy9jb25maWdmcy9kaXIuY2AgYW5kIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggZGlyZWN0b3J5IG1hbmFnZW1lbnQgYW5kIHN5bWxpbmsgaGFuZGxpbmcgd2l0aGluIHRoZSBDb25maWdmcyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBzcGlubG9jayBhbmQgdW5oYXNoaW5nIG9wZXJhdGlvbnMgaW4gYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgLiBUaGF0IHN1Z2dlc3RzIHRoZXJlIHdlcmUgcmFjZSBjb25kaXRpb25zIGluIGRpcmVjdG9yeSByZW1vdmFsLCBhbmQgdGhlIHNwaW5sb2NrIGlzIGEgc3RhbmRhcmQgYXBwcm9hY2ggdG8gYWRkcmVzcyBpdC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgdG8gYGNyZWF0ZV9saW5rYCBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCwgdG8gbm93IGNoZWNrIGBkX3VuaGFzaGVkKClgIHVuZGVyIGBkX2xvY2tgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBjb25maWdmc19kaXJlbnRgLCBpbmRpY2F0ZXMgYSBwb3NzaWJsZSBmaXggdG8gYSBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aGVuIGRlYWxpbmcgd2l0aCBzeW1saW5rcyBhbmQgY29uY3VycmVudCBvcGVyYXRpb25zLlxuXG5UaGlzIGlzIGEgcHJldHR5IGZvY3VzZWQgZnVuY3Rpb25hbCBjaGFuZ2UuIENvbmZpZ2ZzIGlzIGEgZnVuZGFtZW50YWwga2VybmVsIHN1YnN5c3RlbSwgc28gYW55IG1vZGlmaWNhdGlvbiBoZXJlIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgdXNlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMuIExldCdzIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgQ09ORklHIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBDb25maWdmcyBvciB0aGUgaW1wYWN0ZWQgZmVhdHVyZXMuIEkgbmVlZCB0byBnYXVnZSB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0Ni43ODU0MjEwMDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3ODUwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnZnNfcmVtb3ZlX2RpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvZGlyLmM9MjUzPWludCBjb25maWdmc19tYWtlX2RpcmVudChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogcGFyZW50X3NkLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMjcwLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjI3MTpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy0yNzIte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MjkzPXN0YXRpYyBpbnQgY29uZmlnZnNfY3JlYXRlX2RpcihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTMyNi1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6MzI3OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zMjgtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MzY5PWludCBjb25maWdmc19jcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXQsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5NC1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6Mzk1OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zOTYtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMzk5LS8qKlxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwMDogKiBjb25maWdmc19yZW1vdmVfZGlyIC0gcmVtb3ZlIGFuIGNvbmZpZ19pdGVtJ3MgZGlyZWN0b3J5LlxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwMS0gKiBAZDpcXHRkZW50cnkgd2UncmUgcmVtb3ZpbmcuXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy00MDktXFxuZnMvY29uZmlnZnMvZGlyLmM6NDEwOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcXG5mcy9jb25maWdmcy9kaXIuYy00MTEte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtNDI4LVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQyOTpcXHRjb25maWdmc19yZW1vdmVfZGlyZW50KGQpO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQzMC1cXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTg1MT1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy04NTMtXFx0ZGV0YWNoX2F0dHJzKGRlbnRyeSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6ODU0OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXIoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy04NTUtfVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jPTc3PXN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy05MS1cXHQgKiBtYXRjaGluZyBkX2xvY2svZF91bmhhc2hlZCgpIGRhbmNlIGluIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbSgpXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjkyOlxcdCAqIGFuZCB0aGUgdW5oYXNoLWJlZm9yZS1mcmVlIG9yZGVyaW5nIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoKSBub3dcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtOTMtXFx0ICogZ3VhcmFudGVlcy4gIERvIHRoZSBzYW1lIGNoZWNrIGhlcmUgaW5zdGVhZCBvZiB0cnVzdGluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0Ni44NTMyMTQxNTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIzNDQ3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGBjb25maWdmc19yZW1vdmVfZGlyYCBhbmQgYGNyZWF0ZV9saW5rYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpbmRpY2F0ZXMgc29tZSBwb3RlbnRpYWwgc3ltbGluay1yZWxhdGVkIGNoYW5nZXMgd2l0aGluIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSB0eXBlcyBvZiBhZGp1c3RtZW50cywgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGhhdCBlbmFibGUgY29uZmlnZnMgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBjaGVjayBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgYW5kIHRoZW4gbWF5YmUgYGZzL0tjb25maWdgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEtub3dpbmcgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIHJlbGF0ZWQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgbWlnaHQgaGF2ZSBhbnkgYnJvYWRlciBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1MC40NzY2NjQ4NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NjA4NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05GSUdGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1MC42MzEyODA1MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkxMjQxOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBjb25maWdmcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQ09ORklHRlNfRlNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBraW5kcyBvZiBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIGFzIGR5bmFtaWMgYXMgY29uZmlnZnMuIFRoZSBwYXRjaCBtZW50aW9ucyBhIHJhY2UgYmV0d2VlbiBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBhYnNvbHV0ZWx5IG5lZWRzIGZ1enppbmcuIENvbmN1cnJlbmN5IGJ1Z3MgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBmaW5kIHRocm91Z2ggbWFudWFsIHJldmlldyBhbG9uZS5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSB2dWxuZXJhYmlsaXR5IGJldHRlciBhbmQgcGxhbiB0aGUgZnV6emluZyBjYW1wYWlnbiwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBUaGUgY29yZSBmdW5jdGlvbnMgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AsIG9yIHBlcmhhcHMgZXZlbiBgY29uZmlnZnNfc3ltbGlua2Agd2hpY2ggSSByZWNhbGwgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGNyZWF0ZV9saW5rYC4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxzIGFuZCBjb250ZXh0cyBmb3IgYGNyZWF0ZV9saW5rYC4gVGhpcyBzaG91bGQgaGVscCBtZSBjb25zdHJ1Y3QgZWZmZWN0aXZlIGZ1enppbmcgaGFybmVzc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTc6NTQuODIyNTI1NTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDM0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV9saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmM9NTY9c3RhdGljIGludCBjb25maWdmc19nZXRfdGFyZ2V0X3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc2LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo3NzpzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVxcdFxcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTI1LVxcdGlmICghcmV0KVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMjY6XFx0XFx0cmV0ID0gY29uZmlnZnNfY3JlYXRlX2xpbmsodGFyZ2V0X3NkLCBwYXJlbnRfaXRlbS1cXHUwMDNlY2lfZGVudHJ5LFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMjctXFx0XFx0XFx0XFx0XFx0ICAgZGVudHJ5LCBib2R5KTtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYz0xNTc9aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjIxOlxcdFxcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjIyLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU3OjU0Ljg5NDk2NjkyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQ1MjE4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZmlnRlMgTGluayBSZW1vdmFsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGBjb25maWdmc19zeW1saW5rYCB1bHRpbWF0ZWx5IGJvaWxzIGRvd24gdG8gYGNyZWF0ZV9saW5rYC4gVGhhdCBtYWtlcyBzZW5zZTsgc3ltYm9saWMgbGlua3MgYXJlIGp1c3QgYW5vdGhlciBmb3JtIG9mIGZpbGUgc3lzdGVtIGVudHJ5LiBCdXQsIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0aGVzZSBsaW5rcyBhcmUgKnJlbW92ZWQqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBsaW5rIHJlbW92YWwgd2l0aGluIENvbmZpZ0ZTLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYWxsIHRoZSBjYWxsZXJzIG9mIGBjb25maWdmc19yZW1vdmVfZGlyYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBmb3IgZGlyZWN0b3J5IHJlbW92YWwgaW4gdGhpcyBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgcmVtb3ZpbmcgZGlyZWN0b3JpZXMsIGFuZCAqd2h5KiwgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBzeW1saW5rcyBwbGF5IGludG8gdGhhdC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgcG90ZW50aWFsIGF2ZW51ZXMgZm9yIGxpbmsgcmVtb3ZhbCwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgaGFwcGVucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNpZGUtZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1OC4zNzk0OTE5NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzMwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ2ZzX3JlbW92ZV9kaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvZGlyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvZGlyLmM9MjUzPWludCBjb25maWdmc19tYWtlX2RpcmVudChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogcGFyZW50X3NkLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMjcwLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjI3MTpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy0yNzIte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MjkzPXN0YXRpYyBpbnQgY29uZmlnZnNfY3JlYXRlX2RpcihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTMyNi1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6MzI3OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zMjgtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MzY5PWludCBjb25maWdmc19jcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXQsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5NC1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6Mzk1OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zOTYtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMzk5LS8qKlxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwMDogKiBjb25maWdmc19yZW1vdmVfZGlyIC0gcmVtb3ZlIGFuIGNvbmZpZ19pdGVtJ3MgZGlyZWN0b3J5LlxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwMS0gKiBAZDpcXHRkZW50cnkgd2UncmUgcmVtb3ZpbmcuXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy00MDktXFxuZnMvY29uZmlnZnMvZGlyLmM6NDEwOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcXG5mcy9jb25maWdmcy9kaXIuYy00MTEte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtNDI4LVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQyOTpcXHRjb25maWdmc19yZW1vdmVfZGlyZW50KGQpO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQzMC1cXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTg1MT1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy04NTMtXFx0ZGV0YWNoX2F0dHJzKGRlbnRyeSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6ODU0OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXIoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy04NTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1OC40NTI4NDUxMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0ODk2NTM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBGaWxlIFN5c3RlbSBEZXRhY2htZW50IFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gIGlzIG91ciBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoYXQgaXQgdWx0aW1hdGVseSBjYWxscyBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIFRoYXQncyB0aGUgY29yZSBhY3Rpb24gd2UgbmVlZCB0byB1bmRlcnN0YW5kLiBJJ20gd29uZGVyaW5nIGFib3V0IHRoZSBmbG93IG9mIHRoaXMgZGV0YWNoIG9wZXJhdGlvbi4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hvICphY3R1YWxseSogdHJpZ2dlcnMgdGhpcyBkZXRhY2htZW50PyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgc3lzdGVtcyBhcmUgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGF0J3MgZGVwZW5kZW50IG9uIHRoZSBkaXJlY3RvcnkgYmVpbmcgcmVtb3ZlZC4gSXQgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBvdGhlciBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgaW1wbGljYXRpb25zIG9mIHRoYXQgZGV0YWNobWVudC4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODowMS42MDE4MTQ3NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODYxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ2ZzX2RldGFjaF9pdGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jPTgzMT1zdGF0aWMgdm9pZCBsaW5rX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudF9ncm91cCwgc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy04NTAtLyogQ2FsbGVyIGhvbGRzIHRoZSBtdXRleCBvZiB0aGUgaXRlbSdzIGlub2RlICovXFxuZnMvY29uZmlnZnMvZGlyLmM6ODUxOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RldGFjaF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy04NTIte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtODY2LSAqXFxuZnMvY29uZmlnZnMvZGlyLmM6ODY3OiAqIGNvbmZpZ2ZzX2RldGFjaF9ncm91cCgpIGFuZCBjb25maWdmc19kZXRhY2hfaXRlbSgpIGJlaGF2ZSBzaW1pbGFybHkgb25cXG5mcy9jb25maWdmcy9kaXIuYy04NjgtICogdGhlIHdheSBvdXQuICBUaGV5IGFzc3VtZSB0aGF0IHRoZSBwcm9wZXIgc2VtYXBob3JlcyBhcmUgaGVsZCwgdGhleVxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9ODcyPXN0YXRpYyBpbnQgY29uZmlnZnNfYXR0YWNoX2l0ZW0oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtODg3LVxcdFxcdFxcdGlub2RlX2xvY2soZF9pbm9kZShkZW50cnkpKTtcXG5mcy9jb25maWdmcy9kaXIuYzo4ODg6XFx0XFx0XFx0Y29uZmlnZnNfZGV0YWNoX2l0ZW0oZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy04ODktXFx0XFx0XFx0ZF9pbm9kZShkZW50cnkpLVxcdTAwM2VpX2ZsYWdzIHw9IFNfREVBRDtcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTkwMD1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfZ3JvdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtOTAyLVxcdGRldGFjaF9ncm91cHMoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYzo5MDM6XFx0Y29uZmlnZnNfZGV0YWNoX2l0ZW0oZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy05MDQtfVxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MTQ4ND1zdGF0aWMgaW50IGNvbmZpZ2ZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy0xNTc0LVxcdH0gZWxzZSB7XFxuZnMvY29uZmlnZnMvZGlyLmM6MTU3NTpcXHRcXHRjb25maWdmc19kZXRhY2hfaXRlbShkZW50cnkpO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE1NzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU4OjAxLjY2NjY4OTIxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc3NDgzODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWdGUyBSZW1vdmFsIGFuZCBTeW1saW5rIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUga2V5IGVudHJ5IHBvaW50cyBiZWNhdXNlIGBjb25maWdmc19ybWRpcmAgZXZlbnR1YWxseSBjYWxscyBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBjb25maWdmc19yZW1vdmVfZGlyYC4gU28sIHRoZSByZW1vdmFsIHByb2Nlc3Mgc2VlbXMgdG8gZmxvdyBmcm9tIGBjb25maWdmc19ybWRpcmAgZG93biB0byBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIEl0J3MgbGlrZWx5IHNpbWlsYXIgZm9yIHRoZSBzeW1saW5rIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nIGFuZCBlbnN1cmUgSSdtIGZvY3VzaW5nIG9uIHRoZSByaWdodCBhcmVhcywgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBjb25maWdmc19yZW1vdmVfZGlyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFllcywgaXQgaXMuIFRoYXQgY29uZmlybXMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEknbGwgYWxzbyBkbyB0aGUgc2FtZSBmb3IgYGNyZWF0ZV9saW5rYDsgdGhhdCdzIGFsc28gc3RhdGljLiBUaGlzIG1lYW5zIHRoZXNlIGFyZW4ndCBwdWJsaWMgQVBJIGVudHJ5IHBvaW50cy5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZGVmaW5pdGl2ZWx5IHZlcmlmeSB0aGF0IGJvdGggYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgICphcmVuJ3QqIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhleSBhcmUgcHVibGljLCBleHBvc2VkIGVudHJ5IHBvaW50cyB0byB0aGUgQVBJLiBUaGlzIHdpbGwgY29uZmlybSB0aGF0IG15IGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBpcyBjb3JyZWN0LCBhbmQgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODowNS42NDQxNzU1MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTU1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ2ZzX3JtZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jPTM2OT1pbnQgY29uZmlnZnNfY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0LCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy00MDQtICogdGhlIGRpcmVjdG9yeSBiZWZvcmUgd2UgcmVtb3ZlIHRoZSBkaXJlY3RvcnksIGFuZCB3ZSd2ZSBpbmxpbmVkXFxuZnMvY29uZmlnZnMvZGlyLmM6NDA1OiAqIHdoYXQgdXNlZCB0byBiZSBjb25maWdmc19ybWRpcigpIGJlbG93LCBpbnN0ZWFkIG9mIGNhbGxpbmcgc2VwYXJhdGVseS5cXG5mcy9jb25maWdmcy9kaXIuYy00MDYtICpcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTEwMDc9c3RhdGljIGludCBjb25maWdmc19kdW1wKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkLCBpbnQgbGV2ZWwpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy0xMDQ0LSAqIFZGUy1cXHUwMDNlY29uZmlnZnMgcGF0aC4gIFNvIGl0IG11c3QgdGFrZSBWRlMgbG9ja3MgdG8gcHJldmVudCB0aGVcXG5mcy9jb25maWdmcy9kaXIuYzoxMDQ1OiAqIFZGUy1cXHUwMDNlY29uZmlnZnMgc3R1ZmYgKGNvbmZpZ2ZzX21rZGlyKCksIGNvbmZpZ2ZzX3JtZGlyKCksIGV0YykuICBUaGlzIGlzXFxuZnMvY29uZmlnZnMvZGlyLmMtMTA0Ni0gKiB3aHkgeW91IGNhbid0IGNhbGwgdGhlc2UgZnVuY3Rpb25zIHVuZGVybmVhdGggY29uZmlnZnMgY2FsbGJhY2tzLlxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MTMwND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMTQ4My1cXG5mcy9jb25maWdmcy9kaXIuYzoxNDg0OnN0YXRpYyBpbnQgY29uZmlnZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy0xNDg1LXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTE1OTQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvY29uZmlnZnMvZGlyLmMtMTU5NS1cXHQubWtkaXJcXHRcXHQ9IGNvbmZpZ2ZzX21rZGlyLFxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjE1OTY6XFx0LnJtZGlyXFx0XFx0PSBjb25maWdmc19ybWRpcixcXG5mcy9jb25maWdmcy9kaXIuYy0xNTk3LVxcdC5zeW1saW5rXFx0PSBjb25maWdmc19zeW1saW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODowNS43MTY3MzgwMjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1Njc5Mjc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlnRlMgRGlyZWN0b3J5IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBjb25maWdmc19ybWRpcmAsIGFuZCBJIHNlZSBpdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgaXQncyBzY29wZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEhtbSwgYnV0IGl0J3MgcGFydCBvZiB0aGUgYGNvbmZpZ2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIE5vdywgYGNvbmZpZ2ZzX3N5bWxpbmtgIGlzICphbHNvKiBpbiB0aGF0IHNhbWUgc3RydWN0dXJlLlxuXG5UaGUgc3RhdGljIG5hdHVyZSBvZiBgY29uZmlnZnNfcm1kaXJgIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcgZm9yIGZ1enppbmcuIElmIGl0J3Mgc3RhdGljLCBpdCdzIG5vdCBnb2luZyB0byBzaG93IHVwIGFzIGEgZGlzdGluY3Qgc3ltYm9sIGZvciBhIGZ1enplciB0byB0YXJnZXQgZGlyZWN0bHksIHVubGVzcyB0aGUgY29tcGlsZXIgKmRvZXNuJ3QqIGlubGluZSBpdCwgd2hpY2ggc2VlbXMgdW5saWtlbHkgZm9yIGFuIGlub2RlIG9wZXJhdGlvbi4gVXN1YWxseSB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMgd291bGQgYmUgaGFuZGxlZCB0aHJvdWdoIHRoZSBpbm9kZSBvcGVyYXRpb24gdGFibGUuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gbGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgeWVzLCBoZXJlIHdlIGdvLi4uIGBjb25maWdmc19zeW1saW5rYCAqaXMqIGRlZmluZWQgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AsIGFuZCBpdCdzICpub3QqIHN0YXRpYy4gQWxyaWdodCwgdGhhdCdzIGludGVyZXN0aW5nLiBTbyBpdCdzIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgY29tcGlsYXRpb24gdW5pdC4gVGhpcyBkZXRhaWwgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU4OjEwLjc3MzUzMzQ2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3MDM1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnZnNfc3ltbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMDpERUZJTkVfTVVURVgoY29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxLVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jPTEzOT1zdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1Ni1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTU3OmludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTU4LVxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxOS1cXHRpZiAoIXJldCkge1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMS1cXHRcXHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMjMtXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jPTIzNT1pbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjc5LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyODA6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yODEtXFx0LmdldF9saW5rID0gc2ltcGxlX2dldF9saW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODoxMC44NDUyNDIxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI1MDY4NTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIENvbmZpZ0ZTIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjb25maWdmc2AgY29kZSwgYW5kIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBjb25maWdmc19zeW1saW5rYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgdGhlIGZ1enplciB0byBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbk5vdywgd2hhdCBhYm91dCBgY29uZmlnZnNfcm1kaXJgPyBIbW0sIGl0ICppcyogc3RhdGljIGluIGBmcy9jb25maWdmcy9kaXIuY2AuIFdhaXQgYSBtaW51dGUsIGJ1dCBpdCdzIGFuIGlub2RlIG9wZXJhdGlvbiwgc28gaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGl0ICpjYW5ub3QqIGJlIGlubGluZWQuIFRoYXQgbWFrZXMgaXQgYSBwZXJmZWN0bHkgdmFsaWQgZm9jdXMgc3ltYm9sLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiB0aGUgbWl4LiBJJ2xsIG5lZWQgdGhlIGV4YWN0IGFkZHJlc3Mgb2YgdGhhdCBmdW5jdGlvbi5cblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZS4gWWVwLCBgY29uZmlnZnNfdW5saW5rYCBpcyBhbm90aGVyIGlub2RlIG9wZXJhdGlvbiBhbmQgaXQncyBhbHNvICpub3QqIHN0YXRpYy4gR29vZC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdGU19GU2AgaXMgdGhlIG9ubHkgcmVsZXZhbnQgb3B0aW9uLCB3aGljaCBpcyBzaW1wbGUuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBzdGF0dXNlczsgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIGlzIHN0YXRpYywgYGNyZWF0ZV9saW5rYCBpcyBzdGF0aWMsIGFzIGV4cGVjdGVkLiBTbywgYGNvbmZpZ2ZzX3JtZGlyYCwgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBhbmQgYGNvbmZpZ2ZzX3VubGlua2AgYXJlIGFsbCBzb2xpZCBjYW5kaWRhdGVzLiBUaGV5IGdpdmUgbWUgbW9yZSBjaGFuY2VzIGZvciBlZGdlIGNhc2VzIHRvIHBvcCB1cC5cblxuUmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIE9rYXksIHRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIChjYWxsZWQgYnkgYGNvbmZpZ2ZzX3JtZGlyYCkgYW5kIGBjcmVhdGVfbGlua2AgKGNhbGxlZCBieSBgY29uZmlnZnNfc3ltbGlua2ApLiBHb3QgaXQuIFNvIGZ1enppbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGRpcmVjdGx5IHRlc3QgdGhlIGxvY2tpbmcgYW5kIHVuaGFzaGluZyBsb2dpYyBpbXBsZW1lbnRlZCBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBrZWVwIHRob3NlIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGV5J3JlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBmb2N1cyB0aGUgZnV6emluZyBhcm91bmQgdGhlbS5cblxuU28sIEkgaGF2ZSBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSB0d28uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGxvY2tpbmcgc2NoZW1lIHRvIGd1YXJhbnRlZSBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlyZWN0b3J5IGVudHJ5LiBTaW5jZSBJJ20gZnV6emluZyB0byBleHBsb2l0IHJhY2UgY29uZGl0aW9ucywgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBidXQgZm9yIG5vdywgaXQgc2VlbXMgdGhlIGBDT05GSUdGU19GU2AgaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTg6MjMuMDk1OTMxMTY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk3MjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ORklHRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU4OjIzLjE1NzkwODg4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc1NzQ3MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDT05GSUdGU19GUyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzdXJyb3VuZGluZyBgQ09ORklHRlNfRlNgLiBTaW1wbHkga25vd2luZyB0aGUgb3B0aW9uIGV4aXN0cyBpc24ndCBlbm91Z2g7IEkgbmVlZCB0aGUgZ3JhbnVsYXJpdHkuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgdGhlIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgd2hlcmUgdGhlIEtjb25maWcgZmlsZSBiZWNvbWVzIGVzc2VudGlhbC4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBiZWhhdmVzIHdpdGhpbiB0aGUga2VybmVsJ3MgZWNvc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIEtjb25maWcgYW5kIHNlZSB3aGF0IHdlJ3JlIHJlYWxseSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTg6MjYuNTMzNjU5MDM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDT05GSUdGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBjb25maWdmcyBpcyBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlXFxuICAgNjpcXHRcXHQgIG9mIHN5c2ZzJ3MgZnVuY3Rpb25hbGl0eS4gV2hlcmUgc3lzZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkXFxuICAgNzpcXHRcXHQgIHZpZXcgb2Yga2VybmVsIG9iamVjdHMsIGNvbmZpZ2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZCBtYW5hZ2VyXFxuICAgODpcXHRcXHQgIG9mIGtlcm5lbCBvYmplY3RzLCBvciBjb25maWdfaXRlbXMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXFxuICAxMTpcXHRcXHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTg6MjYuNTMzNzEyMzU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzY1MjE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipQYXRjaCBBc3Nlc3NtZW50IGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBObyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYXJlIGZsYWdnZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW50ZWdyYXRpb24gaW50byBvdXIgZnV6emluZyB3b3JrZmxvdy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGNvbmZpZ2ZzLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiByZW1vdmluZyBhIGRpcmVjdG9yeSBhbmQgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rLiBJdCBzb3VuZHMgbGlrZSB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgd2l0aCBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIHVuaGFzaGluZyBjaGVja3Mg4oCTIGNsYXNzaWMgc3luY2hyb25pemF0aW9uIGZpeGVzLCBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBleGNlbHMgYXQgdW5jb3ZlcmluZy5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKldvcnRoRnV6emluZzogdHJ1ZSoqLlxuXG5Ob3csIHRvIHRhcmdldCB0aGUgZnV6emluZyBlZmZlY3RpdmVseSwgd2UgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIG1vZGlmaWVzLiBUaGUgZGVzY3JpcHRpb24gY2xlYXJseSBwb2ludHMgdG8gYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGFzIHRoZSBmb2NhbCBwb2ludHMuIFRob3NlIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgb2YgdGhlIGZ1enppbmcgY2FtcGFpZ24uIFNvLCAqKkZvY3VzU3ltYm9sczogW1wiY29uZmlnZnNfcm1kaXJcIiwgXCJjb25maWdmc19zeW1saW5rXCJdKiouXG5cbkFuZCBzaW5jZSB0aGlzIHBhdGNoIGlzIGFib3V0IGxvY2tpbmcgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBpdHNlbGYsIHdlJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBhbmFseXNpcywgaXQgbmVlZHMgdGhlIGBDT05GSUdGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBtYWtlIHN1cmUgaXMgZW5hYmxlZCB3b3VsZCBiZTogKipFbmFibGVDb25maWdzOiBbXCJDT05GSUdGU19GU1wiXSoqLlxuXG5UaGUgcmVhc29uaW5nIGZvciB0aGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgdW5oYXNoaW5nIGNoZWNrcyB0byBwcmV2ZW50IHRoZSByYWNlIGNvbmRpdGlvbi4gRnV6emluZyBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AgaXMgdGhlIG1vc3QgZGlyZWN0IHdheSB0byBleGVyY2lzZSB0aGlzIG5ldyBzeW5jaHJvbml6YXRpb24gbG9naWMsIHByb2JpbmcgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbGx5IHJldmVhbGluZyBmdXJ0aGVyIGlzc3Vlcy4gVGhhdCdzIHdoYXQgYSBnb29kIGZ1enppbmcgY2FtcGFpZ24gaXMgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzk4LCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODozMS44NzAyMzY5MzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2NjUwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcm1kaXJcIixcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcm1kaXJcIixcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowl6gfr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 20:06:11 +0000 UTC FinishedAt: 2026-08-05 20:58:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "ac7bb5e7-6b22-4aed-90fd-40af07aad98a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_rmdir", "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcm1kaXImIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTU1OThlM2U3YjhhOTA4MDc4OGY0YzY4OWU1NjhhNzc4MzUxN2IzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjA6NTc6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xuaW5kZXggM2M4OGYxM2YxY2EyZS4uZWM2ZjM1NTAxNzhhMyAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9kaXIuY1xuQEAgLTQxMSw2ICYjNDM7NDExLDIxIEBAIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcbiB7XG4gXHRzdHJ1Y3QgZGVudHJ5ICogcGFyZW50ID0gZGdldChkLVx1MDAzZWRfcGFyZW50KTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgYW55IHJlZmVyZW5jZSB0byB0aGUgZGlyZW50L2l0ZW0gdGhpc1xuJiM0MztcdCAqIGRlbnRyeSBwaW5zOiBhIGNvbmN1cnJlbnQgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKCkgKGUuZy4gZnJvbVxuJiM0MztcdCAqIGNvbmZpZ2ZzX3N5bWxpbmsoKSYjMzk7cyB0YXJnZXQgcmVzb2x1dGlvbiwgd2hpY2ggcnVucyB1bmxvY2tlZFxuJiM0MztcdCAqIGFnYWluc3QgZGlyZWN0b3JpZXMgaXQgZG9lc24mIzM5O3Qgb3RoZXJ3aXNlIG93bikgb25seSBjaGVja3NcbiYjNDM7XHQgKiBkX3VuaGFzaGVkKCkgdW5kZXIgZF9sb2NrIGJlZm9yZSBwaW5uaW5nIHRoZSBpdGVtLiAgVW5oYXNoaW5nXG4mIzQzO1x0ICogZmlyc3QgZW5zdXJlcyB0aGF0IGNoZWNrIHJlbGlhYmx5IGZhaWxzIG9uY2Ugd2UmIzM5O3JlIHBhc3QgdGhpc1xuJiM0MztcdCAqIHBvaW50LCBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgZGlyZW50L2l0ZW0mIzM5O3MgcmVmY291bnQgcmVhY2hpbmdcbiYjNDM7XHQgKiB6ZXJvIHdoaWxlIHRoZSBkZW50cnkgaXMgc3RpbGwgKGJyaWVmbHkpIGhhc2hlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZC1cdTAwM2VkX2xvY2spO1xuJiM0MztcdGlmIChzaW1wbGVfcG9zaXRpdmUoZCkpXG4mIzQzO1x0XHRfX2RfZHJvcChkKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkLVx1MDAzZWRfbG9jayk7XG4mIzQzO1xuIFx0Y29uZmlnZnNfcmVtb3ZlX2RpcmVudChkKTtcbiBcbiBcdGlmIChkX3JlYWxseV9pc19wb3NpdGl2ZShkKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uYjgwNDNhNmIwYjQyNyAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtNzgsMTggJiM0Mzs3OCw0MCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuLVx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gaXRlbS1cdTAwM2VjaV9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqdGFyZ2V0X2RlbnRyeSA9IGl0ZW0tXHUwMDNlY2lfZGVudHJ5O1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnRhcmdldF9zZDtcbiBcdGNoYXIgKmJvZHk7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkodGFyZ2V0X3NkKSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGl0ZW0gaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIsIGJ1dCB0aGF0IG9ubHkga2VlcHMgdGhlIGNvbmZpZ19pdGVtXG4mIzQzO1x0ICogaXRzZWxmIGFsaXZlLiAgaXRlbS1cdTAwM2VjaV9kZW50cnkmIzM5O3MgY29uZmlnZnNfZGlyZW50IChhbmQgdGh1cyBpdHNcbiYjNDM7XHQgKiBzX2NvdW50KSBpcyBhIHNlcGFyYXRlIHJlZmNvdW50IHRoYXQgYSBjb25jdXJyZW50IHJtZGlyIG9mIHRoaXNcbiYjNDM7XHQgKiBzYW1lIGRpcmVjdG9yeSBjYW4gZHJvcCB0byB6ZXJvIGFuZCBmcmVlIGluZGVwZW5kZW50bHkgLS0gc2VlIHRoZVxuJiM0MztcdCAqIG1hdGNoaW5nIGRfbG9jay9kX3VuaGFzaGVkKCkgZGFuY2UgaW4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClcbiYjNDM7XHQgKiBhbmQgdGhlIHVuaGFzaC1iZWZvcmUtZnJlZSBvcmRlcmluZyBjb25maWdmc19yZW1vdmVfZGlyKCkgbm93XG4mIzQzO1x0ICogZ3VhcmFudGVlcy4gIERvIHRoZSBzYW1lIGNoZWNrIGhlcmUgaW5zdGVhZCBvZiB0cnVzdGluZ1xuJiM0MztcdCAqIHRhcmdldF9kZW50cnktXHUwMDNlZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0YXJnZXRfZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4mIzQzO1x0aWYgKGRfdW5oYXNoZWQodGFyZ2V0X2RlbnRyeSkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9kZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcdHRhcmdldF9zZCA9IGNvbmZpZ2ZzX2dldCh0YXJnZXRfZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0YXJnZXRfZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dCh0YXJnZXRfc2QpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuIFxuIFx0Ym9keSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghYm9keSlcbiYjNDM7XHRpZiAoIWJvZHkpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dCh0YXJnZXRfc2QpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4gXG4tXHRjb25maWdmc19nZXQodGFyZ2V0X3NkKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4gXHRpZiAodGFyZ2V0X3NkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9EUk9QUElORykge1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcm1kaXImIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTU1OThlM2U3YjhhOTA4MDc4OGY0YzY4OWU1NjhhNzc4MzUxN2IzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMjA6NTc6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDNjODhmMTNmMWNhMmUuLmVjNmYzNTUwMTc4YTMgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC00MTEsNiAmIzQzOzQxMSwyMSBAQCBzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmQpCiB7CiAJc3RydWN0IGRlbnRyeSAqIHBhcmVudCA9IGRnZXQoZC0mZ3Q7ZF9wYXJlbnQpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgYW55IHJlZmVyZW5jZSB0byB0aGUgZGlyZW50L2l0ZW0gdGhpcwomIzQzOwkgKiBkZW50cnkgcGluczogYSBjb25jdXJyZW50IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbSgpIChlLmcuIGZyb20KJiM0MzsJICogY29uZmlnZnNfc3ltbGluaygpJiMzOTtzIHRhcmdldCByZXNvbHV0aW9uLCB3aGljaCBydW5zIHVubG9ja2VkCiYjNDM7CSAqIGFnYWluc3QgZGlyZWN0b3JpZXMgaXQgZG9lc24mIzM5O3Qgb3RoZXJ3aXNlIG93bikgb25seSBjaGVja3MKJiM0MzsJICogZF91bmhhc2hlZCgpIHVuZGVyIGRfbG9jayBiZWZvcmUgcGlubmluZyB0aGUgaXRlbS4gIFVuaGFzaGluZwomIzQzOwkgKiBmaXJzdCBlbnN1cmVzIHRoYXQgY2hlY2sgcmVsaWFibHkgZmFpbHMgb25jZSB3ZSYjMzk7cmUgcGFzdCB0aGlzCiYjNDM7CSAqIHBvaW50LCBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgZGlyZW50L2l0ZW0mIzM5O3MgcmVmY291bnQgcmVhY2hpbmcKJiM0MzsJICogemVybyB3aGlsZSB0aGUgZGVudHJ5IGlzIHN0aWxsIChicmllZmx5KSBoYXNoZWQuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2soJmFtcDtkLSZndDtkX2xvY2spOwomIzQzOwlpZiAoc2ltcGxlX3Bvc2l0aXZlKGQpKQomIzQzOwkJX19kX2Ryb3AoZCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7ZC0mZ3Q7ZF9sb2NrKTsKJiM0MzsKIAljb25maWdmc19yZW1vdmVfZGlyZW50KGQpOwogCiAJaWYgKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGQpKSB7CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKaW5kZXggMzFlYjI4YjI3MzA5MS4uYjgwNDNhNmIwYjQyNyAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwpAQCAtNzgsMTggJiM0Mzs3OCw0MCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sCiAJCSAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0Jc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gaXRlbS0mZ3Q7Y2lfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqdGFyZ2V0X2RlbnRyeSA9IGl0ZW0tJmd0O2NpX2RlbnRyeTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkOwogCWNoYXIgKmJvZHk7CiAJaW50IHJldDsKIAotCWlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpCiYjNDM7CS8qCiYjNDM7CSAqIGl0ZW0gaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIsIGJ1dCB0aGF0IG9ubHkga2VlcHMgdGhlIGNvbmZpZ19pdGVtCiYjNDM7CSAqIGl0c2VsZiBhbGl2ZS4gIGl0ZW0tJmd0O2NpX2RlbnRyeSYjMzk7cyBjb25maWdmc19kaXJlbnQgKGFuZCB0aHVzIGl0cwomIzQzOwkgKiBzX2NvdW50KSBpcyBhIHNlcGFyYXRlIHJlZmNvdW50IHRoYXQgYSBjb25jdXJyZW50IHJtZGlyIG9mIHRoaXMKJiM0MzsJICogc2FtZSBkaXJlY3RvcnkgY2FuIGRyb3AgdG8gemVybyBhbmQgZnJlZSBpbmRlcGVuZGVudGx5IC0tIHNlZSB0aGUKJiM0MzsJICogbWF0Y2hpbmcgZF9sb2NrL2RfdW5oYXNoZWQoKSBkYW5jZSBpbiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKQomIzQzOwkgKiBhbmQgdGhlIHVuaGFzaC1iZWZvcmUtZnJlZSBvcmRlcmluZyBjb25maWdmc19yZW1vdmVfZGlyKCkgbm93CiYjNDM7CSAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmcKJiM0MzsJICogdGFyZ2V0X2RlbnRyeS0mZ3Q7ZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dGFyZ2V0X2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKJiM0MzsJaWYgKGRfdW5oYXNoZWQodGFyZ2V0X2RlbnRyeSkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dGFyZ2V0X2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsJdGFyZ2V0X3NkID0gY29uZmlnZnNfZ2V0KHRhcmdldF9kZW50cnktJmd0O2RfZnNkYXRhKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0YXJnZXRfZGVudHJ5LSZndDtkX2xvY2spOwomIzQzOwomIzQzOwlpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeSh0YXJnZXRfc2QpKSB7CiYjNDM7CQljb25maWdmc19wdXQodGFyZ2V0X3NkKTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiAKIAlib2R5ID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghYm9keSkKJiM0MzsJaWYgKCFib2R5KSB7CiYjNDM7CQljb25maWdmc19wdXQodGFyZ2V0X3NkKTsKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAotCWNvbmZpZ2ZzX2dldCh0YXJnZXRfc2QpOwogCXNwaW5fbG9jaygmYW1wO2NvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKIAlpZiAodGFyZ2V0X3NkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfVVNFVF9EUk9QUElORykgewogCQlzcGluX3VubG9jaygmYW1wO2NvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25maWdmcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWUgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiBDb25maWdmcy4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYGZzL2NvbmZpZ2ZzL2Rpci5jYCBhbmQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZGlyZWN0b3J5IG1hbmFnZW1lbnQgYW5kIHN5bWxpbmsgaGFuZGxpbmcgd2l0aGluIHRoZSBDb25maWdmcyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgc3BpbmxvY2sgYW5kIHVuaGFzaGluZyBvcGVyYXRpb25zIGluIGBjb25maWdmc19yZW1vdmVfZGlyYC4gVGhhdCBzdWdnZXN0cyB0aGVyZSB3ZXJlIHJhY2UgY29uZGl0aW9ucyBpbiBkaXJlY3RvcnkgcmVtb3ZhbCwgYW5kIHRoZSBzcGlubG9jayBpcyBhIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGFkZHJlc3MgaXQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIHRvIGBjcmVhdGVfbGlua2AgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AsIHRvIG5vdyBjaGVjayBgZF91bmhhc2hlZCgpYCB1bmRlciBgZF9sb2NrYCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgY29uZmlnZnNfZGlyZW50YCwgaW5kaWNhdGVzIGEgcG9zc2libGUgZml4IHRvIGEgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiBkZWFsaW5nIHdpdGggc3ltbGlua3MgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4KClRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBmdW5jdGlvbmFsIGNoYW5nZS4gQ29uZmlnZnMgaXMgYSBmdW5kYW1lbnRhbCBrZXJuZWwgc3Vic3lzdGVtLCBzbyBhbnkgbW9kaWZpY2F0aW9uIGhlcmUgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB1c2VkIHRoaXMgZnVuY3Rpb25hbGl0eSBpcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIENPTkZJRyBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gQ29uZmlnZnMgb3IgdGhlIGltcGFjdGVkIGZlYXR1cmVzLiBJIG5lZWQgdG8gZ2F1Z2UgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZ2ZzX3JlbW92ZV9kaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvZGlyLmM9MjUzPWludCBjb25maWdmc19tYWtlX2RpcmVudChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogcGFyZW50X3NkLFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTI3MC1cbmZzL2NvbmZpZ2ZzL2Rpci5jOjI3MTpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL2Rpci5jLTI3Mi17XG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MjkzPXN0YXRpYyBpbnQgY29uZmlnZnNfY3JlYXRlX2RpcihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0zMjYtXHRjb25maWdmc19wdXQoZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjMyNzpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTMyOC1cdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbi0tXG5mcy9jb25maWdmcy9kaXIuYz0zNjk9aW50IGNvbmZpZ2ZzX2NyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnRhcmdldCwgc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5NC1cdGNvbmZpZ2ZzX3B1dChkZW50cnktXHUwMDNlZF9mc2RhdGEpO1xuZnMvY29uZmlnZnMvZGlyLmM6Mzk1Olx0Y29uZmlnZnNfcmVtb3ZlX2RpcmVudChkZW50cnkpO1xuZnMvY29uZmlnZnMvZGlyLmMtMzk2LVx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5OS0vKipcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwMDogKiBjb25maWdmc19yZW1vdmVfZGlyIC0gcmVtb3ZlIGFuIGNvbmZpZ19pdGVtJiMzOTtzIGRpcmVjdG9yeS5cbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwMS0gKiBAZDpcdGRlbnRyeSB3ZSYjMzk7cmUgcmVtb3ZpbmcuXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtNDA5LVxuZnMvY29uZmlnZnMvZGlyLmM6NDEwOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQxMS17XG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtNDI4LVxuZnMvY29uZmlnZnMvZGlyLmM6NDI5Olx0Y29uZmlnZnNfcmVtb3ZlX2RpcmVudChkKTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQzMC1cbi0tXG5mcy9jb25maWdmcy9kaXIuYz04NTE9c3RhdGljIHZvaWQgY29uZmlnZnNfZGV0YWNoX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTg1My1cdGRldGFjaF9hdHRycyhkZW50cnkpO1xuZnMvY29uZmlnZnMvZGlyLmM6ODU0Olx0Y29uZmlnZnNfcmVtb3ZlX2RpcihkZW50cnkpO1xuZnMvY29uZmlnZnMvZGlyLmMtODU1LX1cbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmM9Nzc9c3RhdGljIGludCBjcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtLFxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy05MS1cdCAqIG1hdGNoaW5nIGRfbG9jay9kX3VuaGFzaGVkKCkgZGFuY2UgaW4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo5MjpcdCAqIGFuZCB0aGUgdW5oYXNoLWJlZm9yZS1mcmVlIG9yZGVyaW5nIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoKSBub3dcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy05My1cdCAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGluZGljYXRlcyBzb21lIHBvdGVudGlhbCBzeW1saW5rLXJlbGF0ZWQgY2hhbmdlcyB3aXRoaW4gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cyB3aXRoIHRoZXNlIHR5cGVzIG9mIGFkanVzdG1lbnRzLCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGhhdCBlbmFibGUgY29uZmlnZnMgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBjaGVjayBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgYW5kIHRoZW4gbWF5YmUgYGZzL0tjb25maWdgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEtub3dpbmcgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIHJlbGF0ZWQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgbWlnaHQgaGF2ZSBhbnkgYnJvYWRlciBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBjb25maWdmcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQ09ORklHRlNfRlNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBraW5kcyBvZiBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIGFzIGR5bmFtaWMgYXMgY29uZmlnZnMuIFRoZSBwYXRjaCBtZW50aW9ucyBhIHJhY2UgYmV0d2VlbiBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBhYnNvbHV0ZWx5IG5lZWRzIGZ1enppbmcuIENvbmN1cnJlbmN5IGJ1Z3MgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBmaW5kIHRocm91Z2ggbWFudWFsIHJldmlldyBhbG9uZS4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgdnVsbmVyYWJpbGl0eSBiZXR0ZXIgYW5kIHBsYW4gdGhlIGZ1enppbmcgY2FtcGFpZ24sIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gVGhlIGNvcmUgZnVuY3Rpb25zIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBjb25maWdmc19yZW1vdmVfZGlyYCBhbmQgYGNyZWF0ZV9saW5rYCwgb3IgcGVyaGFwcyBldmVuIGBjb25maWdmc19zeW1saW5rYCB3aGljaCBJIHJlY2FsbCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgY3JlYXRlX2xpbmtgLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbHMgYW5kIGNvbnRleHRzIGZvciBgY3JlYXRlX2xpbmtgLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbnN0cnVjdCBlZmZlY3RpdmUgZnV6emluZyBoYXJuZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3JlYXRlX2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jPTU2PXN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RhcmdldF9wYXRoKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzYtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6Nzc6c3RhdGljIGludCBjcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVx0XHQgICAgICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMjUtXHRpZiAoIXJldClcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMjY6XHRcdHJldCA9IGNvbmZpZ2ZzX2NyZWF0ZV9saW5rKHRhcmdldF9zZCwgcGFyZW50X2l0ZW0tXHUwMDNlY2lfZGVudHJ5LFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTEyNy1cdFx0XHRcdFx0ICAgZGVudHJ5LCBib2R5KTtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmM9MTU3PWludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjIwLVx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyMTpcdFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBDb25maWdGUyBMaW5rIFJlbW92YWwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgY29uZmlnZnNfc3ltbGlua2AgdWx0aW1hdGVseSBib2lscyBkb3duIHRvIGBjcmVhdGVfbGlua2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHN5bWJvbGljIGxpbmtzIGFyZSBqdXN0IGFub3RoZXIgZm9ybSBvZiBmaWxlIHN5c3RlbSBlbnRyeS4gQnV0LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgdGhlc2UgbGlua3MgYXJlICpyZW1vdmVkKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbGluayByZW1vdmFsIHdpdGhpbiBDb25maWdGUy4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGFsbCB0aGUgY2FsbGVycyBvZiBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGdhdGVrZWVwZXIgZm9yIGRpcmVjdG9yeSByZW1vdmFsIGluIHRoaXMgY29udGV4dCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aG8qIGlzIHJlbW92aW5nIGRpcmVjdG9yaWVzLCBhbmQgKndoeSosIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc3ltbGlua3MgcGxheSBpbnRvIHRoYXQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIHBvdGVudGlhbCBhdmVudWVzIGZvciBsaW5rIHJlbW92YWwsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IGhhcHBlbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBzaWRlLWVmZmVjdHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnNfcmVtb3ZlX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jPTI1Mz1pbnQgY29uZmlnZnNfbWFrZV9kaXJlbnQoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqIHBhcmVudF9zZCxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0yNzAtXG5mcy9jb25maWdmcy9kaXIuYzoyNzE6c3RhdGljIHZvaWQgY29uZmlnZnNfcmVtb3ZlX2RpcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9jb25maWdmcy9kaXIuYy0yNzIte1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTI5Mz1zdGF0aWMgaW50IGNvbmZpZ2ZzX2NyZWF0ZV9kaXIoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtMzI2LVx0Y29uZmlnZnNfcHV0KGRlbnRyeS1cdTAwM2VkX2ZzZGF0YSk7XG5mcy9jb25maWdmcy9kaXIuYzozMjc6XHRjb25maWdmc19yZW1vdmVfZGlyZW50KGRlbnRyeSk7XG5mcy9jb25maWdmcy9kaXIuYy0zMjgtXHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MzY5PWludCBjb25maWdmc19jcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXQsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0zOTQtXHRjb25maWdmc19wdXQoZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjM5NTpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5Ni1cdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0zOTktLyoqXG5mcy9jb25maWdmcy9kaXIuYzo0MDA6ICogY29uZmlnZnNfcmVtb3ZlX2RpciAtIHJlbW92ZSBhbiBjb25maWdfaXRlbSYjMzk7cyBkaXJlY3RvcnkuXG5mcy9jb25maWdmcy9kaXIuYy00MDEtICogQGQ6XHRkZW50cnkgd2UmIzM5O3JlIHJlbW92aW5nLlxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwOS1cbmZzL2NvbmZpZ2ZzL2Rpci5jOjQxMDpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmQpXG5mcy9jb25maWdmcy9kaXIuYy00MTEte1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTQyOC1cbmZzL2NvbmZpZ2ZzL2Rpci5jOjQyOTpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZCk7XG5mcy9jb25maWdmcy9kaXIuYy00MzAtXG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9ODUxPXN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RldGFjaF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5mcy9jb25maWdmcy9kaXIuYy04NTMtXHRkZXRhY2hfYXR0cnMoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjg1NDpcdGNvbmZpZ2ZzX3JlbW92ZV9kaXIoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTg1NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBGaWxlIFN5c3RlbSBEZXRhY2htZW50IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gYGNvbmZpZ2ZzX2RldGFjaF9pdGVtYCBpcyBvdXIgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGF0IGl0IHVsdGltYXRlbHkgY2FsbHMgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGFjdGlvbiB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IHRoZSBmbG93IG9mIHRoaXMgZGV0YWNoIG9wZXJhdGlvbi4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hvICphY3R1YWxseSogdHJpZ2dlcnMgdGhpcyBkZXRhY2htZW50PyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgc3lzdGVtcyBhcmUgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGF0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgZGlyZWN0b3J5IGJlaW5nIHJlbW92ZWQuIEl0IGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3Igb3RoZXIgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGltcGxpY2F0aW9ucyBvZiB0aGF0IGRldGFjaG1lbnQuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnNfZGV0YWNoX2l0ZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9kaXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9kaXIuYz04MzE9c3RhdGljIHZvaWQgbGlua19ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnRfZ3JvdXAsIHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTg1MC0vKiBDYWxsZXIgaG9sZHMgdGhlIG11dGV4IG9mIHRoZSBpdGVtJiMzOTtzIGlub2RlICovXG5mcy9jb25maWdmcy9kaXIuYzo4NTE6c3RhdGljIHZvaWQgY29uZmlnZnNfZGV0YWNoX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvY29uZmlnZnMvZGlyLmMtODUyLXtcbi0tXG5mcy9jb25maWdmcy9kaXIuYy04NjYtICpcbmZzL2NvbmZpZ2ZzL2Rpci5jOjg2NzogKiBjb25maWdmc19kZXRhY2hfZ3JvdXAoKSBhbmQgY29uZmlnZnNfZGV0YWNoX2l0ZW0oKSBiZWhhdmUgc2ltaWxhcmx5IG9uXG5mcy9jb25maWdmcy9kaXIuYy04NjgtICogdGhlIHdheSBvdXQuICBUaGV5IGFzc3VtZSB0aGF0IHRoZSBwcm9wZXIgc2VtYXBob3JlcyBhcmUgaGVsZCwgdGhleVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTg3Mj1zdGF0aWMgaW50IGNvbmZpZ2ZzX2F0dGFjaF9pdGVtKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5mcy9jb25maWdmcy9kaXIuYy04ODctXHRcdFx0aW5vZGVfbG9jayhkX2lub2RlKGRlbnRyeSkpO1xuZnMvY29uZmlnZnMvZGlyLmM6ODg4Olx0XHRcdGNvbmZpZ2ZzX2RldGFjaF9pdGVtKGRlbnRyeSk7XG5mcy9jb25maWdmcy9kaXIuYy04ODktXHRcdFx0ZF9pbm9kZShkZW50cnkpLVx1MDAzZWlfZmxhZ3MgfD0gU19ERUFEO1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTkwMD1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfZ3JvdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTkwMi1cdGRldGFjaF9ncm91cHMoZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jOjkwMzpcdGNvbmZpZ2ZzX2RldGFjaF9pdGVtKGRlbnRyeSk7XG5mcy9jb25maWdmcy9kaXIuYy05MDQtfVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTE0ODQ9c3RhdGljIGludCBjb25maWdmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTE1NzQtXHR9IGVsc2Uge1xuZnMvY29uZmlnZnMvZGlyLmM6MTU3NTpcdFx0Y29uZmlnZnNfZGV0YWNoX2l0ZW0oZGVudHJ5KTtcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE1NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ0ZTIFJlbW92YWwgYW5kIFN5bWxpbmsgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGtleSBlbnRyeSBwb2ludHMgYmVjYXVzZSBgY29uZmlnZnNfcm1kaXJgIGV2ZW50dWFsbHkgY2FsbHMgYGNvbmZpZ2ZzX2RldGFjaF9pdGVtYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIFNvLCB0aGUgcmVtb3ZhbCBwcm9jZXNzIHNlZW1zIHRvIGZsb3cgZnJvbSBgY29uZmlnZnNfcm1kaXJgIGRvd24gdG8gYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgLiBJdCYjMzk7cyBsaWtlbHkgc2ltaWxhciBmb3IgdGhlIHN5bWxpbmsgZnVuY3Rpb25hbGl0eS4KCk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nIGFuZCBlbnN1cmUgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcmlnaHQgYXJlYXMsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gWWVzLCBpdCBpcy4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEkmIzM5O2xsIGFsc28gZG8gdGhlIHNhbWUgZm9yIGBjcmVhdGVfbGlua2A7IHRoYXQmIzM5O3MgYWxzbyBzdGF0aWMuIFRoaXMgbWVhbnMgdGhlc2UgYXJlbiYjMzk7dCBwdWJsaWMgQVBJIGVudHJ5IHBvaW50cy4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRlZmluaXRpdmVseSB2ZXJpZnkgdGhhdCBib3RoIGBjb25maWdmc19ybWRpcmAgYW5kIGBjb25maWdmc19zeW1saW5rYCAqYXJlbiYjMzk7dCogc3RhdGljLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGV5IGFyZSBwdWJsaWMsIGV4cG9zZWQgZW50cnkgcG9pbnRzIHRvIHRoZSBBUEkuIFRoaXMgd2lsbCBjb25maXJtIHRoYXQgbXkgZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIGlzIGNvcnJlY3QsIGFuZCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWdmc19ybWRpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL2Rpci5jPTM2OT1pbnQgY29uZmlnZnNfY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0LCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtNDA0LSAqIHRoZSBkaXJlY3RvcnkgYmVmb3JlIHdlIHJlbW92ZSB0aGUgZGlyZWN0b3J5LCBhbmQgd2UmIzM5O3ZlIGlubGluZWRcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwNTogKiB3aGF0IHVzZWQgdG8gYmUgY29uZmlnZnNfcm1kaXIoKSBiZWxvdywgaW5zdGVhZCBvZiBjYWxsaW5nIHNlcGFyYXRlbHkuXG5mcy9jb25maWdmcy9kaXIuYy00MDYtICpcbi0tXG5mcy9jb25maWdmcy9kaXIuYz0xMDA3PXN0YXRpYyBpbnQgY29uZmlnZnNfZHVtcChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCwgaW50IGxldmVsKVxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwNDQtICogVkZTLVx1MDAzZWNvbmZpZ2ZzIHBhdGguICBTbyBpdCBtdXN0IHRha2UgVkZTIGxvY2tzIHRvIHByZXZlbnQgdGhlXG5mcy9jb25maWdmcy9kaXIuYzoxMDQ1OiAqIFZGUy1cdTAwM2Vjb25maWdmcyBzdHVmZiAoY29uZmlnZnNfbWtkaXIoKSwgY29uZmlnZnNfcm1kaXIoKSwgZXRjKS4gIFRoaXMgaXNcbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwNDYtICogd2h5IHlvdSBjYW4mIzM5O3QgY2FsbCB0aGVzZSBmdW5jdGlvbnMgdW5kZXJuZWF0aCBjb25maWdmcyBjYWxsYmFja3MuXG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MTMwND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTE0ODMtXG5mcy9jb25maWdmcy9kaXIuYzoxNDg0OnN0YXRpYyBpbnQgY29uZmlnZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE0ODUte1xuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTE1OTQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9jb25maWdmcy9kaXIuYy0xNTk1LVx0Lm1rZGlyXHRcdD0gY29uZmlnZnNfbWtkaXIsXG5mcy9jb25maWdmcy9kaXIuYzoxNTk2Olx0LnJtZGlyXHRcdD0gY29uZmlnZnNfcm1kaXIsXG5mcy9jb25maWdmcy9kaXIuYy0xNTk3LVx0LnN5bWxpbmtcdD0gY29uZmlnZnNfc3ltbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZmlnRlMgRGlyZWN0b3J5IE9wZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBjb25maWdmc19ybWRpcmAsIGFuZCBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHNjb3BlZCB0byBpdHMgY29tcGlsYXRpb24gdW5pdC4gSG1tLCBidXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgYGNvbmZpZ2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIE5vdywgYGNvbmZpZ2ZzX3N5bWxpbmtgIGlzICphbHNvKiBpbiB0aGF0IHNhbWUgc3RydWN0dXJlLgoKVGhlIHN0YXRpYyBuYXR1cmUgb2YgYGNvbmZpZ2ZzX3JtZGlyYCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIGZvciBmdXp6aW5nLiBJZiBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIG5vdCBnb2luZyB0byBzaG93IHVwIGFzIGEgZGlzdGluY3Qgc3ltYm9sIGZvciBhIGZ1enplciB0byB0YXJnZXQgZGlyZWN0bHksIHVubGVzcyB0aGUgY29tcGlsZXIgKmRvZXNuJiMzOTt0KiBpbmxpbmUgaXQsIHdoaWNoIHNlZW1zIHVubGlrZWx5IGZvciBhbiBpbm9kZSBvcGVyYXRpb24uIFVzdWFsbHkgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zIHdvdWxkIGJlIGhhbmRsZWQgdGhyb3VnaCB0aGUgaW5vZGUgb3BlcmF0aW9uIHRhYmxlLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBsZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCB5ZXMsIGhlcmUgd2UgZ28uLi4gYGNvbmZpZ2ZzX3N5bWxpbmtgICppcyogZGVmaW5lZCBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCwgYW5kIGl0JiMzOTtzICpub3QqIHN0YXRpYy4gQWxyaWdodCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gU28gaXQmIzM5O3MgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBjb21waWxhdGlvbiB1bml0LiBUaGlzIGRldGFpbCBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZ2ZzX3N5bWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIwOkRFRklORV9NVVRFWChjb25maWdmc19zeW1saW5rX211dGV4KTtcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMS1cbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmM9MTM5PXN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1Ni1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxNTc6aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1OC1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxOS1cdGlmICghcmV0KSB7XG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMS1cdFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMy1cdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmspXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jPTIzNT1pbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI3OS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyODA6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTI4MS1cdC5nZXRfbGluayA9IHNpbXBsZV9nZXRfbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBDb25maWdGUyBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjb25maWdmc2AgY29kZSwgYW5kIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBjb25maWdmc19zeW1saW5rYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgdGhlIGZ1enplciB0byBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpOb3csIHdoYXQgYWJvdXQgYGNvbmZpZ2ZzX3JtZGlyYD8gSG1tLCBpdCAqaXMqIHN0YXRpYyBpbiBgZnMvY29uZmlnZnMvZGlyLmNgLiBXYWl0IGEgbWludXRlLCBidXQgaXQmIzM5O3MgYW4gaW5vZGUgb3BlcmF0aW9uLCBzbyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCBtYWtlcyBpdCBhIHBlcmZlY3RseSB2YWxpZCBmb2N1cyBzeW1ib2wsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiB0aGUgbWl4LiBJJiMzOTtsbCBuZWVkIHRoZSBleGFjdCBhZGRyZXNzIG9mIHRoYXQgZnVuY3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZS4gWWVwLCBgY29uZmlnZnNfdW5saW5rYCBpcyBhbm90aGVyIGlub2RlIG9wZXJhdGlvbiBhbmQgaXQmIzM5O3MgYWxzbyAqbm90KiBzdGF0aWMuIEdvb2QuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHRlNfRlNgIGlzIHRoZSBvbmx5IHJlbGV2YW50IG9wdGlvbiwgd2hpY2ggaXMgc2ltcGxlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBzdGF0dXNlczsgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIGlzIHN0YXRpYywgYGNyZWF0ZV9saW5rYCBpcyBzdGF0aWMsIGFzIGV4cGVjdGVkLiBTbywgYGNvbmZpZ2ZzX3JtZGlyYCwgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBhbmQgYGNvbmZpZ2ZzX3VubGlua2AgYXJlIGFsbCBzb2xpZCBjYW5kaWRhdGVzLiBUaGV5IGdpdmUgbWUgbW9yZSBjaGFuY2VzIGZvciBlZGdlIGNhc2VzIHRvIHBvcCB1cC4KClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCwganVzdCB0byBiZSBzdXJlLiBPa2F5LCB0aGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBjb25maWdmc19yZW1vdmVfZGlyYCAoY2FsbGVkIGJ5IGBjb25maWdmc19ybWRpcmApIGFuZCBgY3JlYXRlX2xpbmtgIChjYWxsZWQgYnkgYGNvbmZpZ2ZzX3N5bWxpbmtgKS4gR290IGl0LiBTbyBmdXp6aW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBkaXJlY3RseSB0ZXN0IHRoZSBsb2NraW5nIGFuZCB1bmhhc2hpbmcgbG9naWMgaW1wbGVtZW50ZWQgaW4gdGhlIHBhdGNoLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBhcyB0aGUgcHJpbWFyeSBmb2N1cywgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIGFyb3VuZCB0aGVtLgoKU28sIEkgaGF2ZSBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSB0d28uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGxvY2tpbmcgc2NoZW1lIHRvIGd1YXJhbnRlZSBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlyZWN0b3J5IGVudHJ5LiBTaW5jZSBJJiMzOTttIGZ1enppbmcgdG8gZXhwbG9pdCByYWNlIGNvbmRpdGlvbnMsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGJ1dCBmb3Igbm93LCBpdCBzZWVtcyB0aGUgYENPTkZJR0ZTX0ZTYCBpcyBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09ORklHRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ09ORklHRlNfRlMgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzdXJyb3VuZGluZyBgQ09ORklHRlNfRlNgLiBTaW1wbHkga25vd2luZyB0aGUgb3B0aW9uIGV4aXN0cyBpc24mIzM5O3QgZW5vdWdoOyBJIG5lZWQgdGhlIGdyYW51bGFyaXR5LiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyBpdCBtaWdodCBoYXZlLiBUaGlzIGlzIHdoZXJlIHRoZSBLY29uZmlnIGZpbGUgYmVjb21lcyBlc3NlbnRpYWwuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBtb2R1bGUgYmVoYXZlcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBlY29zeXN0ZW0uIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDT05GSUdGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxuICAgNjpcdFx0ICBvZiBzeXNmcyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcbiAgIDc6XHRcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcbiAgIDg6XHRcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXG4gIDExOlx0XHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTgKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqUGF0Y2ggQXNzZXNzbWVudCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBObyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYXJlIGZsYWdnZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludGVncmF0aW9uIGludG8gb3VyIGZ1enppbmcgd29ya2Zsb3cuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gY29uZmlnZnMsIHNwZWNpZmljYWxseSBiZXR3ZWVuIHJlbW92aW5nIGEgZGlyZWN0b3J5IGFuZCBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsuIEl0IHNvdW5kcyBsaWtlIHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgdW5oYXNoaW5nIGNoZWNrcyDigJMgY2xhc3NpYyBzeW5jaHJvbml6YXRpb24gZml4ZXMsIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIGV4Y2VscyBhdCB1bmNvdmVyaW5nLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKldvcnRoRnV6emluZzogdHJ1ZSoqLgoKTm93LCB0byB0YXJnZXQgdGhlIGZ1enppbmcgZWZmZWN0aXZlbHksIHdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy4gVGhlIGRlc2NyaXB0aW9uIGNsZWFybHkgcG9pbnRzIHRvIGBjb25maWdmc19ybWRpcmAgYW5kIGBjb25maWdmc19zeW1saW5rYCBhcyB0aGUgZm9jYWwgcG9pbnRzLiBUaG9zZSBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgcHJpbWFyeSB0YXJnZXRzIG9mIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBTbywgKipGb2N1c1N5bWJvbHM6IFsmIzM0O2NvbmZpZ2ZzX3JtZGlyJiMzNDssICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7XSoqLgoKQW5kIHNpbmNlIHRoaXMgcGF0Y2ggaXMgYWJvdXQgbG9ja2luZyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGl0c2VsZiwgd2UmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBhbmFseXNpcywgaXQgbmVlZHMgdGhlIGBDT05GSUdGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBtYWtlIHN1cmUgaXMgZW5hYmxlZCB3b3VsZCBiZTogKipFbmFibGVDb25maWdzOiBbJiMzNDtDT05GSUdGU19GUyYjMzQ7XSoqLgoKVGhlIHJlYXNvbmluZyBmb3IgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVuaGFzaGluZyBjaGVja3MgdG8gcHJldmVudCB0aGUgcmFjZSBjb25kaXRpb24uIEZ1enppbmcgYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGlzIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLCBwcm9iaW5nIHRoZSBib3VuZGFyeSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWxseSByZXZlYWxpbmcgZnVydGhlciBpc3N1ZXMuIFRoYXQmIzM5O3Mgd2hhdCBhIGdvb2QgZnV6emluZyBjYW1wYWlnbiBpcyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcm1kaXImIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmZpZ2ZzX3JtZGlyJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX3N5bWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb25maWdmcyBiZXR3ZWVuIGRpcmVjdG9yeSByZW1vdmFsIGFuZCBzeW1saW5rIGNyZWF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgbG9ja2luZyBhbmQgdW5oYXNoaW5nIGNoZWNrcy4gRnV6emluZyBjb25maWdmc19ybWRpciBhbmQgY29uZmlnZnNfc3ltbGluayB3aWxsIGV4ZXJjaXNlIHRoaXMgbmV3IHN5bmNocm9uaXphdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU3OjQwLjI0NjcwMzgzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzc2MjE2OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcm1kaXJcIixcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0MC4yNDY3MTE1NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzkyNTE5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NTU5OGUzZTdiOGE5MDgwNzg4ZjRjNjg5ZTU2OGE3NzgzNTE3YjM3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMjA6NTc6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xcbmluZGV4IDNjODhmMTNmMWNhMmUuLmVjNmYzNTUwMTc4YTMgMTAwNjQ0XFxuLS0tIGEvZnMvY29uZmlnZnMvZGlyLmNcXG4rKysgYi9mcy9jb25maWdmcy9kaXIuY1xcbkBAIC00MTEsNiArNDExLDIxIEBAIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICogcGFyZW50ID0gZGdldChkLVxcdTAwM2VkX3BhcmVudCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGFueSByZWZlcmVuY2UgdG8gdGhlIGRpcmVudC9pdGVtIHRoaXNcXG4rXFx0ICogZGVudHJ5IHBpbnM6IGEgY29uY3VycmVudCBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKSAoZS5nLiBmcm9tXFxuK1xcdCAqIGNvbmZpZ2ZzX3N5bWxpbmsoKSdzIHRhcmdldCByZXNvbHV0aW9uLCB3aGljaCBydW5zIHVubG9ja2VkXFxuK1xcdCAqIGFnYWluc3QgZGlyZWN0b3JpZXMgaXQgZG9lc24ndCBvdGhlcndpc2Ugb3duKSBvbmx5IGNoZWNrc1xcbitcXHQgKiBkX3VuaGFzaGVkKCkgdW5kZXIgZF9sb2NrIGJlZm9yZSBwaW5uaW5nIHRoZSBpdGVtLiAgVW5oYXNoaW5nXFxuK1xcdCAqIGZpcnN0IGVuc3VyZXMgdGhhdCBjaGVjayByZWxpYWJseSBmYWlscyBvbmNlIHdlJ3JlIHBhc3QgdGhpc1xcbitcXHQgKiBwb2ludCwgaW5zdGVhZCBvZiByYWNpbmcgdGhlIGRpcmVudC9pdGVtJ3MgcmVmY291bnQgcmVhY2hpbmdcXG4rXFx0ICogemVybyB3aGlsZSB0aGUgZGVudHJ5IGlzIHN0aWxsIChicmllZmx5KSBoYXNoZWQuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmQtXFx1MDAzZWRfbG9jayk7XFxuK1xcdGlmIChzaW1wbGVfcG9zaXRpdmUoZCkpXFxuK1xcdFxcdF9fZF9kcm9wKGQpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZC1cXHUwMDNlZF9sb2NrKTtcXG4rXFxuIFxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZCk7XFxuIFxcbiBcXHRpZiAoZF9yZWFsbHlfaXNfcG9zaXRpdmUoZCkpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuaW5kZXggMzFlYjI4YjI3MzA5MS4uYjgwNDNhNmIwYjQyNyAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcXG5AQCAtNzgsMTggKzc4LDQwIEBAIHN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbi1cXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXRfc2QgPSBpdGVtLVxcdTAwM2VjaV9kZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICp0YXJnZXRfZGVudHJ5ID0gaXRlbS1cXHUwMDNlY2lfZGVudHJ5O1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXRfc2Q7XFxuIFxcdGNoYXIgKmJvZHk7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeSh0YXJnZXRfc2QpKVxcbitcXHQvKlxcbitcXHQgKiBpdGVtIGlzIHBpbm5lZCBieSB0aGUgY2FsbGVyLCBidXQgdGhhdCBvbmx5IGtlZXBzIHRoZSBjb25maWdfaXRlbVxcbitcXHQgKiBpdHNlbGYgYWxpdmUuICBpdGVtLVxcdTAwM2VjaV9kZW50cnkncyBjb25maWdmc19kaXJlbnQgKGFuZCB0aHVzIGl0c1xcbitcXHQgKiBzX2NvdW50KSBpcyBhIHNlcGFyYXRlIHJlZmNvdW50IHRoYXQgYSBjb25jdXJyZW50IHJtZGlyIG9mIHRoaXNcXG4rXFx0ICogc2FtZSBkaXJlY3RvcnkgY2FuIGRyb3AgdG8gemVybyBhbmQgZnJlZSBpbmRlcGVuZGVudGx5IC0tIHNlZSB0aGVcXG4rXFx0ICogbWF0Y2hpbmcgZF9sb2NrL2RfdW5oYXNoZWQoKSBkYW5jZSBpbiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKVxcbitcXHQgKiBhbmQgdGhlIHVuaGFzaC1iZWZvcmUtZnJlZSBvcmRlcmluZyBjb25maWdmc19yZW1vdmVfZGlyKCkgbm93XFxuK1xcdCAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmdcXG4rXFx0ICogdGFyZ2V0X2RlbnRyeS1cXHUwMDNlZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0YXJnZXRfZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbitcXHRpZiAoZF91bmhhc2hlZCh0YXJnZXRfZGVudHJ5KSkge1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dGFyZ2V0X2RlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFx0dGFyZ2V0X3NkID0gY29uZmlnZnNfZ2V0KHRhcmdldF9kZW50cnktXFx1MDAzZWRfZnNkYXRhKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRhcmdldF9kZW50cnktXFx1MDAzZWRfbG9jayk7XFxuK1xcbitcXHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeSh0YXJnZXRfc2QpKSB7XFxuK1xcdFxcdGNvbmZpZ2ZzX3B1dCh0YXJnZXRfc2QpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0fVxcbiBcXG4gXFx0Ym9keSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKCFib2R5KVxcbitcXHRpZiAoIWJvZHkpIHtcXG4rXFx0XFx0Y29uZmlnZnNfcHV0KHRhcmdldF9zZCk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuIFxcbi1cXHRjb25maWdmc19nZXQodGFyZ2V0X3NkKTtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XFxuIFxcdGlmICh0YXJnZXRfc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfRFJPUFBJTkcpIHtcXG4gXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTc6NDEuNTI3MDExMDA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTA0OTU4OTUyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19ybWRpclwiLFxuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gY29uZmlnZnMgYmV0d2VlbiBkaXJlY3RvcnkgcmVtb3ZhbCBhbmQgc3ltbGluayBjcmVhdGlvbiBieSBhZGRpbmcgcHJvcGVyIGxvY2tpbmcgYW5kIHVuaGFzaGluZyBjaGVja3MuIEZ1enppbmcgY29uZmlnZnNfcm1kaXIgYW5kIGNvbmZpZ2ZzX3N5bWxpbmsgd2lsbCBleGVyY2lzZSB0aGlzIG5ldyBzeW5jaHJvbml6YXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1NTk4ZTNlN2I4YTkwODA3ODhmNGM2ODllNTY4YTc3ODM1MTdiMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIwOjU3OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xuaW5kZXggM2M4OGYxM2YxY2EyZS4uZWM2ZjM1NTAxNzhhMyAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jXG4rKysgYi9mcy9jb25maWdmcy9kaXIuY1xuQEAgLTQxMSw2ICs0MTEsMjEgQEAgc3RhdGljIHZvaWQgY29uZmlnZnNfcmVtb3ZlX2RpcihzdHJ1Y3QgZGVudHJ5ICpkKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKiBwYXJlbnQgPSBkZ2V0KGQtXHUwMDNlZF9wYXJlbnQpO1xuIFxuK1x0LypcbitcdCAqIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgYW55IHJlZmVyZW5jZSB0byB0aGUgZGlyZW50L2l0ZW0gdGhpc1xuK1x0ICogZGVudHJ5IHBpbnM6IGEgY29uY3VycmVudCBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oKSAoZS5nLiBmcm9tXG4rXHQgKiBjb25maWdmc19zeW1saW5rKCkncyB0YXJnZXQgcmVzb2x1dGlvbiwgd2hpY2ggcnVucyB1bmxvY2tlZFxuK1x0ICogYWdhaW5zdCBkaXJlY3RvcmllcyBpdCBkb2Vzbid0IG90aGVyd2lzZSBvd24pIG9ubHkgY2hlY2tzXG4rXHQgKiBkX3VuaGFzaGVkKCkgdW5kZXIgZF9sb2NrIGJlZm9yZSBwaW5uaW5nIHRoZSBpdGVtLiAgVW5oYXNoaW5nXG4rXHQgKiBmaXJzdCBlbnN1cmVzIHRoYXQgY2hlY2sgcmVsaWFibHkgZmFpbHMgb25jZSB3ZSdyZSBwYXN0IHRoaXNcbitcdCAqIHBvaW50LCBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgZGlyZW50L2l0ZW0ncyByZWZjb3VudCByZWFjaGluZ1xuK1x0ICogemVybyB3aGlsZSB0aGUgZGVudHJ5IGlzIHN0aWxsIChicmllZmx5KSBoYXNoZWQuXG4rXHQgKi9cbitcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWRfbG9jayk7XG4rXHRpZiAoc2ltcGxlX3Bvc2l0aXZlKGQpKVxuK1x0XHRfX2RfZHJvcChkKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmQtXHUwMDNlZF9sb2NrKTtcbitcbiBcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZCk7XG4gXG4gXHRpZiAoZF9yZWFsbHlfaXNfcG9zaXRpdmUoZCkpIHtcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbmluZGV4IDMxZWIyOGIyNzMwOTEuLmI4MDQzYTZiMGI0MjcgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcbisrKyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuQEAgLTc4LDE4ICs3OCw0MCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuLVx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gaXRlbS1cdTAwM2VjaV9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRzdHJ1Y3QgZGVudHJ5ICp0YXJnZXRfZGVudHJ5ID0gaXRlbS1cdTAwM2VjaV9kZW50cnk7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXRfc2Q7XG4gXHRjaGFyICpib2R5O1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpXG4rXHQvKlxuK1x0ICogaXRlbSBpcyBwaW5uZWQgYnkgdGhlIGNhbGxlciwgYnV0IHRoYXQgb25seSBrZWVwcyB0aGUgY29uZmlnX2l0ZW1cbitcdCAqIGl0c2VsZiBhbGl2ZS4gIGl0ZW0tXHUwMDNlY2lfZGVudHJ5J3MgY29uZmlnZnNfZGlyZW50IChhbmQgdGh1cyBpdHNcbitcdCAqIHNfY291bnQpIGlzIGEgc2VwYXJhdGUgcmVmY291bnQgdGhhdCBhIGNvbmN1cnJlbnQgcm1kaXIgb2YgdGhpc1xuK1x0ICogc2FtZSBkaXJlY3RvcnkgY2FuIGRyb3AgdG8gemVybyBhbmQgZnJlZSBpbmRlcGVuZGVudGx5IC0tIHNlZSB0aGVcbitcdCAqIG1hdGNoaW5nIGRfbG9jay9kX3VuaGFzaGVkKCkgZGFuY2UgaW4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClcbitcdCAqIGFuZCB0aGUgdW5oYXNoLWJlZm9yZS1mcmVlIG9yZGVyaW5nIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoKSBub3dcbitcdCAqIGd1YXJhbnRlZXMuICBEbyB0aGUgc2FtZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgdHJ1c3RpbmdcbitcdCAqIHRhcmdldF9kZW50cnktXHUwMDNlZF9mc2RhdGEgdW5jb25kaXRpb25hbGx5LlxuK1x0ICovXG4rXHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2RlbnRyeS1cdTAwM2VkX2xvY2spO1xuK1x0aWYgKGRfdW5oYXNoZWQodGFyZ2V0X2RlbnRyeSkpIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2RlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcdHRhcmdldF9zZCA9IGNvbmZpZ2ZzX2dldCh0YXJnZXRfZGVudHJ5LVx1MDAzZWRfZnNkYXRhKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9kZW50cnktXHUwMDNlZF9sb2NrKTtcbitcbitcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHRhcmdldF9zZCkpIHtcbitcdFx0Y29uZmlnZnNfcHV0KHRhcmdldF9zZCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuIFxuIFx0Ym9keSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghYm9keSlcbitcdGlmICghYm9keSkge1xuK1x0XHRjb25maWdmc19wdXQodGFyZ2V0X3NkKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4gXG4tXHRjb25maWdmc19nZXQodGFyZ2V0X3NkKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4gXHRpZiAodGFyZ2V0X3NkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9EUk9QUElORykge1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZjb25maWdmc19kaXJlbnRfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0MS41MjcwMTMzMzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjU4NDA0MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbmZpZ2ZzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3Npbmcgc29tZSBjb25jdXJyZW5jeSBpc3N1ZXMgd2l0aGluIENvbmZpZ2ZzLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGBmcy9jb25maWdmcy9kaXIuY2AgYW5kIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggZGlyZWN0b3J5IG1hbmFnZW1lbnQgYW5kIHN5bWxpbmsgaGFuZGxpbmcgd2l0aGluIHRoZSBDb25maWdmcyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBzcGlubG9jayBhbmQgdW5oYXNoaW5nIG9wZXJhdGlvbnMgaW4gYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgLiBUaGF0IHN1Z2dlc3RzIHRoZXJlIHdlcmUgcmFjZSBjb25kaXRpb25zIGluIGRpcmVjdG9yeSByZW1vdmFsLCBhbmQgdGhlIHNwaW5sb2NrIGlzIGEgc3RhbmRhcmQgYXBwcm9hY2ggdG8gYWRkcmVzcyBpdC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgdG8gYGNyZWF0ZV9saW5rYCBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCwgdG8gbm93IGNoZWNrIGBkX3VuaGFzaGVkKClgIHVuZGVyIGBkX2xvY2tgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBjb25maWdmc19kaXJlbnRgLCBpbmRpY2F0ZXMgYSBwb3NzaWJsZSBmaXggdG8gYSBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aGVuIGRlYWxpbmcgd2l0aCBzeW1saW5rcyBhbmQgY29uY3VycmVudCBvcGVyYXRpb25zLlxuXG5UaGlzIGlzIGEgcHJldHR5IGZvY3VzZWQgZnVuY3Rpb25hbCBjaGFuZ2UuIENvbmZpZ2ZzIGlzIGEgZnVuZGFtZW50YWwga2VybmVsIHN1YnN5c3RlbSwgc28gYW55IG1vZGlmaWNhdGlvbiBoZXJlIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgdXNlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMuIExldCdzIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgQ09ORklHIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBDb25maWdmcyBvciB0aGUgaW1wYWN0ZWQgZmVhdHVyZXMuIEkgbmVlZCB0byBnYXVnZSB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0Ni43ODU0MjEwMDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3ODUwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnZnNfcmVtb3ZlX2RpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvZGlyLmM9MjUzPWludCBjb25maWdmc19tYWtlX2RpcmVudChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogcGFyZW50X3NkLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMjcwLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjI3MTpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy0yNzIte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MjkzPXN0YXRpYyBpbnQgY29uZmlnZnNfY3JlYXRlX2RpcihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTMyNi1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6MzI3OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zMjgtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MzY5PWludCBjb25maWdmc19jcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXQsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5NC1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6Mzk1OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zOTYtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMzk5LS8qKlxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwMDogKiBjb25maWdmc19yZW1vdmVfZGlyIC0gcmVtb3ZlIGFuIGNvbmZpZ19pdGVtJ3MgZGlyZWN0b3J5LlxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwMS0gKiBAZDpcXHRkZW50cnkgd2UncmUgcmVtb3ZpbmcuXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy00MDktXFxuZnMvY29uZmlnZnMvZGlyLmM6NDEwOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcXG5mcy9jb25maWdmcy9kaXIuYy00MTEte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtNDI4LVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQyOTpcXHRjb25maWdmc19yZW1vdmVfZGlyZW50KGQpO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQzMC1cXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTg1MT1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy04NTMtXFx0ZGV0YWNoX2F0dHJzKGRlbnRyeSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6ODU0OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXIoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy04NTUtfVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jPTc3PXN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy05MS1cXHQgKiBtYXRjaGluZyBkX2xvY2svZF91bmhhc2hlZCgpIGRhbmNlIGluIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbSgpXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjkyOlxcdCAqIGFuZCB0aGUgdW5oYXNoLWJlZm9yZS1mcmVlIG9yZGVyaW5nIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoKSBub3dcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtOTMtXFx0ICogZ3VhcmFudGVlcy4gIERvIHRoZSBzYW1lIGNoZWNrIGhlcmUgaW5zdGVhZCBvZiB0cnVzdGluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo0Ni44NTMyMTQxNTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIzNDQ3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGBjb25maWdmc19yZW1vdmVfZGlyYCBhbmQgYGNyZWF0ZV9saW5rYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpbmRpY2F0ZXMgc29tZSBwb3RlbnRpYWwgc3ltbGluay1yZWxhdGVkIGNoYW5nZXMgd2l0aGluIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSB0eXBlcyBvZiBhZGp1c3RtZW50cywgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGhhdCBlbmFibGUgY29uZmlnZnMgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBjaGVjayBgZnMvY29uZmlnZnMvS2NvbmZpZ2AgYW5kIHRoZW4gbWF5YmUgYGZzL0tjb25maWdgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEtub3dpbmcgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIHJlbGF0ZWQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgbWlnaHQgaGF2ZSBhbnkgYnJvYWRlciBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1MC40NzY2NjQ4NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NjA4NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05GSUdGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1MC42MzEyODA1MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkxMjQxOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBjb25maWdmcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQ09ORklHRlNfRlNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBraW5kcyBvZiBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIGFzIGR5bmFtaWMgYXMgY29uZmlnZnMuIFRoZSBwYXRjaCBtZW50aW9ucyBhIHJhY2UgYmV0d2VlbiBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBhYnNvbHV0ZWx5IG5lZWRzIGZ1enppbmcuIENvbmN1cnJlbmN5IGJ1Z3MgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBmaW5kIHRocm91Z2ggbWFudWFsIHJldmlldyBhbG9uZS5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSB2dWxuZXJhYmlsaXR5IGJldHRlciBhbmQgcGxhbiB0aGUgZnV6emluZyBjYW1wYWlnbiwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBUaGUgY29yZSBmdW5jdGlvbnMgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgY29uZmlnZnNfcmVtb3ZlX2RpcmAgYW5kIGBjcmVhdGVfbGlua2AsIG9yIHBlcmhhcHMgZXZlbiBgY29uZmlnZnNfc3ltbGlua2Agd2hpY2ggSSByZWNhbGwgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGNyZWF0ZV9saW5rYC4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxzIGFuZCBjb250ZXh0cyBmb3IgYGNyZWF0ZV9saW5rYC4gVGhpcyBzaG91bGQgaGVscCBtZSBjb25zdHJ1Y3QgZWZmZWN0aXZlIGZ1enppbmcgaGFybmVzc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTc6NTQuODIyNTI1NTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDM0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV9saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmM9NTY9c3RhdGljIGludCBjb25maWdmc19nZXRfdGFyZ2V0X3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc2LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo3NzpzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVxcdFxcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTI1LVxcdGlmICghcmV0KVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMjY6XFx0XFx0cmV0ID0gY29uZmlnZnNfY3JlYXRlX2xpbmsodGFyZ2V0X3NkLCBwYXJlbnRfaXRlbS1cXHUwMDNlY2lfZGVudHJ5LFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMjctXFx0XFx0XFx0XFx0XFx0ICAgZGVudHJ5LCBib2R5KTtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYz0xNTc9aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjIxOlxcdFxcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjIyLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU3OjU0Ljg5NDk2NjkyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQ1MjE4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZmlnRlMgTGluayBSZW1vdmFsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGBjb25maWdmc19zeW1saW5rYCB1bHRpbWF0ZWx5IGJvaWxzIGRvd24gdG8gYGNyZWF0ZV9saW5rYC4gVGhhdCBtYWtlcyBzZW5zZTsgc3ltYm9saWMgbGlua3MgYXJlIGp1c3QgYW5vdGhlciBmb3JtIG9mIGZpbGUgc3lzdGVtIGVudHJ5LiBCdXQsIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0aGVzZSBsaW5rcyBhcmUgKnJlbW92ZWQqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBsaW5rIHJlbW92YWwgd2l0aGluIENvbmZpZ0ZTLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYWxsIHRoZSBjYWxsZXJzIG9mIGBjb25maWdmc19yZW1vdmVfZGlyYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBmb3IgZGlyZWN0b3J5IHJlbW92YWwgaW4gdGhpcyBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgcmVtb3ZpbmcgZGlyZWN0b3JpZXMsIGFuZCAqd2h5KiwgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBzeW1saW5rcyBwbGF5IGludG8gdGhhdC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgcG90ZW50aWFsIGF2ZW51ZXMgZm9yIGxpbmsgcmVtb3ZhbCwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgaGFwcGVucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNpZGUtZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1OC4zNzk0OTE5NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzMwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ2ZzX3JlbW92ZV9kaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvZGlyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvZGlyLmM9MjUzPWludCBjb25maWdmc19tYWtlX2RpcmVudChzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogcGFyZW50X3NkLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMjcwLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjI3MTpzdGF0aWMgdm9pZCBjb25maWdmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy0yNzIte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MjkzPXN0YXRpYyBpbnQgY29uZmlnZnNfY3JlYXRlX2RpcihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTMyNi1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6MzI3OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zMjgtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MzY5PWludCBjb25maWdmc19jcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICp0YXJnZXQsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTM5NC1cXHRjb25maWdmc19wdXQoZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6Mzk1OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXJlbnQoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy0zOTYtXFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMzk5LS8qKlxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQwMDogKiBjb25maWdmc19yZW1vdmVfZGlyIC0gcmVtb3ZlIGFuIGNvbmZpZ19pdGVtJ3MgZGlyZWN0b3J5LlxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQwMS0gKiBAZDpcXHRkZW50cnkgd2UncmUgcmVtb3ZpbmcuXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy00MDktXFxuZnMvY29uZmlnZnMvZGlyLmM6NDEwOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX3JlbW92ZV9kaXIoc3RydWN0IGRlbnRyeSAqZClcXG5mcy9jb25maWdmcy9kaXIuYy00MTEte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtNDI4LVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjQyOTpcXHRjb25maWdmc19yZW1vdmVfZGlyZW50KGQpO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTQzMC1cXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTg1MT1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy04NTMtXFx0ZGV0YWNoX2F0dHJzKGRlbnRyeSk7XFxuZnMvY29uZmlnZnMvZGlyLmM6ODU0OlxcdGNvbmZpZ2ZzX3JlbW92ZV9kaXIoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy04NTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1Nzo1OC40NTI4NDUxMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0ODk2NTM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBGaWxlIFN5c3RlbSBEZXRhY2htZW50IFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gIGlzIG91ciBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoYXQgaXQgdWx0aW1hdGVseSBjYWxscyBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIFRoYXQncyB0aGUgY29yZSBhY3Rpb24gd2UgbmVlZCB0byB1bmRlcnN0YW5kLiBJJ20gd29uZGVyaW5nIGFib3V0IHRoZSBmbG93IG9mIHRoaXMgZGV0YWNoIG9wZXJhdGlvbi4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hvICphY3R1YWxseSogdHJpZ2dlcnMgdGhpcyBkZXRhY2htZW50PyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgc3lzdGVtcyBhcmUgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGF0J3MgZGVwZW5kZW50IG9uIHRoZSBkaXJlY3RvcnkgYmVpbmcgcmVtb3ZlZC4gSXQgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBvdGhlciBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgaW1wbGljYXRpb25zIG9mIHRoYXQgZGV0YWNobWVudC4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODowMS42MDE4MTQ3NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODYxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ2ZzX2RldGFjaF9pdGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jPTgzMT1zdGF0aWMgdm9pZCBsaW5rX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudF9ncm91cCwgc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy04NTAtLyogQ2FsbGVyIGhvbGRzIHRoZSBtdXRleCBvZiB0aGUgaXRlbSdzIGlub2RlICovXFxuZnMvY29uZmlnZnMvZGlyLmM6ODUxOnN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RldGFjaF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy04NTIte1xcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtODY2LSAqXFxuZnMvY29uZmlnZnMvZGlyLmM6ODY3OiAqIGNvbmZpZ2ZzX2RldGFjaF9ncm91cCgpIGFuZCBjb25maWdmc19kZXRhY2hfaXRlbSgpIGJlaGF2ZSBzaW1pbGFybHkgb25cXG5mcy9jb25maWdmcy9kaXIuYy04NjgtICogdGhlIHdheSBvdXQuICBUaGV5IGFzc3VtZSB0aGF0IHRoZSBwcm9wZXIgc2VtYXBob3JlcyBhcmUgaGVsZCwgdGhleVxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9ODcyPXN0YXRpYyBpbnQgY29uZmlnZnNfYXR0YWNoX2l0ZW0oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtODg3LVxcdFxcdFxcdGlub2RlX2xvY2soZF9pbm9kZShkZW50cnkpKTtcXG5mcy9jb25maWdmcy9kaXIuYzo4ODg6XFx0XFx0XFx0Y29uZmlnZnNfZGV0YWNoX2l0ZW0oZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy04ODktXFx0XFx0XFx0ZF9pbm9kZShkZW50cnkpLVxcdTAwM2VpX2ZsYWdzIHw9IFNfREVBRDtcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTkwMD1zdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfZ3JvdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtOTAyLVxcdGRldGFjaF9ncm91cHMoZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYzo5MDM6XFx0Y29uZmlnZnNfZGV0YWNoX2l0ZW0oZGVudHJ5KTtcXG5mcy9jb25maWdmcy9kaXIuYy05MDQtfVxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MTQ4ND1zdGF0aWMgaW50IGNvbmZpZ2ZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy0xNTc0LVxcdH0gZWxzZSB7XFxuZnMvY29uZmlnZnMvZGlyLmM6MTU3NTpcXHRcXHRjb25maWdmc19kZXRhY2hfaXRlbShkZW50cnkpO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE1NzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU4OjAxLjY2NjY4OTIxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc3NDgzODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWdGUyBSZW1vdmFsIGFuZCBTeW1saW5rIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUga2V5IGVudHJ5IHBvaW50cyBiZWNhdXNlIGBjb25maWdmc19ybWRpcmAgZXZlbnR1YWxseSBjYWxscyBgY29uZmlnZnNfZGV0YWNoX2l0ZW1gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBjb25maWdmc19yZW1vdmVfZGlyYC4gU28sIHRoZSByZW1vdmFsIHByb2Nlc3Mgc2VlbXMgdG8gZmxvdyBmcm9tIGBjb25maWdmc19ybWRpcmAgZG93biB0byBgY29uZmlnZnNfcmVtb3ZlX2RpcmAuIEl0J3MgbGlrZWx5IHNpbWlsYXIgZm9yIHRoZSBzeW1saW5rIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nIGFuZCBlbnN1cmUgSSdtIGZvY3VzaW5nIG9uIHRoZSByaWdodCBhcmVhcywgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBjb25maWdmc19yZW1vdmVfZGlyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFllcywgaXQgaXMuIFRoYXQgY29uZmlybXMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEknbGwgYWxzbyBkbyB0aGUgc2FtZSBmb3IgYGNyZWF0ZV9saW5rYDsgdGhhdCdzIGFsc28gc3RhdGljLiBUaGlzIG1lYW5zIHRoZXNlIGFyZW4ndCBwdWJsaWMgQVBJIGVudHJ5IHBvaW50cy5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZGVmaW5pdGl2ZWx5IHZlcmlmeSB0aGF0IGJvdGggYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgICphcmVuJ3QqIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhleSBhcmUgcHVibGljLCBleHBvc2VkIGVudHJ5IHBvaW50cyB0byB0aGUgQVBJLiBUaGlzIHdpbGwgY29uZmlybSB0aGF0IG15IGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBpcyBjb3JyZWN0LCBhbmQgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODowNS42NDQxNzU1MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTU1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ2ZzX3JtZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jPTM2OT1pbnQgY29uZmlnZnNfY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0LCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy00MDQtICogdGhlIGRpcmVjdG9yeSBiZWZvcmUgd2UgcmVtb3ZlIHRoZSBkaXJlY3RvcnksIGFuZCB3ZSd2ZSBpbmxpbmVkXFxuZnMvY29uZmlnZnMvZGlyLmM6NDA1OiAqIHdoYXQgdXNlZCB0byBiZSBjb25maWdmc19ybWRpcigpIGJlbG93LCBpbnN0ZWFkIG9mIGNhbGxpbmcgc2VwYXJhdGVseS5cXG5mcy9jb25maWdmcy9kaXIuYy00MDYtICpcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTEwMDc9c3RhdGljIGludCBjb25maWdmc19kdW1wKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkLCBpbnQgbGV2ZWwpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy0xMDQ0LSAqIFZGUy1cXHUwMDNlY29uZmlnZnMgcGF0aC4gIFNvIGl0IG11c3QgdGFrZSBWRlMgbG9ja3MgdG8gcHJldmVudCB0aGVcXG5mcy9jb25maWdmcy9kaXIuYzoxMDQ1OiAqIFZGUy1cXHUwMDNlY29uZmlnZnMgc3R1ZmYgKGNvbmZpZ2ZzX21rZGlyKCksIGNvbmZpZ2ZzX3JtZGlyKCksIGV0YykuICBUaGlzIGlzXFxuZnMvY29uZmlnZnMvZGlyLmMtMTA0Ni0gKiB3aHkgeW91IGNhbid0IGNhbGwgdGhlc2UgZnVuY3Rpb25zIHVuZGVybmVhdGggY29uZmlnZnMgY2FsbGJhY2tzLlxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmM9MTMwND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvY29uZmlnZnMvZGlyLmMtMTQ4My1cXG5mcy9jb25maWdmcy9kaXIuYzoxNDg0OnN0YXRpYyBpbnQgY29uZmlnZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9kaXIuYy0xNDg1LXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTE1OTQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvY29uZmlnZnMvZGlyLmMtMTU5NS1cXHQubWtkaXJcXHRcXHQ9IGNvbmZpZ2ZzX21rZGlyLFxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjE1OTY6XFx0LnJtZGlyXFx0XFx0PSBjb25maWdmc19ybWRpcixcXG5mcy9jb25maWdmcy9kaXIuYy0xNTk3LVxcdC5zeW1saW5rXFx0PSBjb25maWdmc19zeW1saW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODowNS43MTY3MzgwMjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1Njc5Mjc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlnRlMgRGlyZWN0b3J5IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBjb25maWdmc19ybWRpcmAsIGFuZCBJIHNlZSBpdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgaXQncyBzY29wZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEhtbSwgYnV0IGl0J3MgcGFydCBvZiB0aGUgYGNvbmZpZ2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIE5vdywgYGNvbmZpZ2ZzX3N5bWxpbmtgIGlzICphbHNvKiBpbiB0aGF0IHNhbWUgc3RydWN0dXJlLlxuXG5UaGUgc3RhdGljIG5hdHVyZSBvZiBgY29uZmlnZnNfcm1kaXJgIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcgZm9yIGZ1enppbmcuIElmIGl0J3Mgc3RhdGljLCBpdCdzIG5vdCBnb2luZyB0byBzaG93IHVwIGFzIGEgZGlzdGluY3Qgc3ltYm9sIGZvciBhIGZ1enplciB0byB0YXJnZXQgZGlyZWN0bHksIHVubGVzcyB0aGUgY29tcGlsZXIgKmRvZXNuJ3QqIGlubGluZSBpdCwgd2hpY2ggc2VlbXMgdW5saWtlbHkgZm9yIGFuIGlub2RlIG9wZXJhdGlvbi4gVXN1YWxseSB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMgd291bGQgYmUgaGFuZGxlZCB0aHJvdWdoIHRoZSBpbm9kZSBvcGVyYXRpb24gdGFibGUuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gbGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgeWVzLCBoZXJlIHdlIGdvLi4uIGBjb25maWdmc19zeW1saW5rYCAqaXMqIGRlZmluZWQgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AsIGFuZCBpdCdzICpub3QqIHN0YXRpYy4gQWxyaWdodCwgdGhhdCdzIGludGVyZXN0aW5nLiBTbyBpdCdzIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgY29tcGlsYXRpb24gdW5pdC4gVGhpcyBkZXRhaWwgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU4OjEwLjc3MzUzMzQ2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3MDM1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnZnNfc3ltbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMDpERUZJTkVfTVVURVgoY29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxLVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jPTEzOT1zdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1Ni1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTU3OmludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTU4LVxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxOS1cXHRpZiAoIXJldCkge1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIyMS1cXHRcXHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMjMtXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jPTIzNT1pbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjc5LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyODA6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yODEtXFx0LmdldF9saW5rID0gc2ltcGxlX2dldF9saW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODoxMC44NDUyNDIxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI1MDY4NTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIENvbmZpZ0ZTIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjb25maWdmc2AgY29kZSwgYW5kIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBjb25maWdmc19zeW1saW5rYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgdGhlIGZ1enplciB0byBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbk5vdywgd2hhdCBhYm91dCBgY29uZmlnZnNfcm1kaXJgPyBIbW0sIGl0ICppcyogc3RhdGljIGluIGBmcy9jb25maWdmcy9kaXIuY2AuIFdhaXQgYSBtaW51dGUsIGJ1dCBpdCdzIGFuIGlub2RlIG9wZXJhdGlvbiwgc28gaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGl0ICpjYW5ub3QqIGJlIGlubGluZWQuIFRoYXQgbWFrZXMgaXQgYSBwZXJmZWN0bHkgdmFsaWQgZm9jdXMgc3ltYm9sLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiB0aGUgbWl4LiBJJ2xsIG5lZWQgdGhlIGV4YWN0IGFkZHJlc3Mgb2YgdGhhdCBmdW5jdGlvbi5cblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZS4gWWVwLCBgY29uZmlnZnNfdW5saW5rYCBpcyBhbm90aGVyIGlub2RlIG9wZXJhdGlvbiBhbmQgaXQncyBhbHNvICpub3QqIHN0YXRpYy4gR29vZC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdGU19GU2AgaXMgdGhlIG9ubHkgcmVsZXZhbnQgb3B0aW9uLCB3aGljaCBpcyBzaW1wbGUuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBzdGF0dXNlczsgYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIGlzIHN0YXRpYywgYGNyZWF0ZV9saW5rYCBpcyBzdGF0aWMsIGFzIGV4cGVjdGVkLiBTbywgYGNvbmZpZ2ZzX3JtZGlyYCwgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBhbmQgYGNvbmZpZ2ZzX3VubGlua2AgYXJlIGFsbCBzb2xpZCBjYW5kaWRhdGVzLiBUaGV5IGdpdmUgbWUgbW9yZSBjaGFuY2VzIGZvciBlZGdlIGNhc2VzIHRvIHBvcCB1cC5cblxuUmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIE9rYXksIHRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYGNvbmZpZ2ZzX3JlbW92ZV9kaXJgIChjYWxsZWQgYnkgYGNvbmZpZ2ZzX3JtZGlyYCkgYW5kIGBjcmVhdGVfbGlua2AgKGNhbGxlZCBieSBgY29uZmlnZnNfc3ltbGlua2ApLiBHb3QgaXQuIFNvIGZ1enppbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGRpcmVjdGx5IHRlc3QgdGhlIGxvY2tpbmcgYW5kIHVuaGFzaGluZyBsb2dpYyBpbXBsZW1lbnRlZCBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBrZWVwIHRob3NlIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGV5J3JlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBmb2N1cyB0aGUgZnV6emluZyBhcm91bmQgdGhlbS5cblxuU28sIEkgaGF2ZSBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSB0d28uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGxvY2tpbmcgc2NoZW1lIHRvIGd1YXJhbnRlZSBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlyZWN0b3J5IGVudHJ5LiBTaW5jZSBJJ20gZnV6emluZyB0byBleHBsb2l0IHJhY2UgY29uZGl0aW9ucywgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBidXQgZm9yIG5vdywgaXQgc2VlbXMgdGhlIGBDT05GSUdGU19GU2AgaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTg6MjMuMDk1OTMxMTY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk3MjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ORklHRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIwOjU4OjIzLjE1NzkwODg4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc1NzQ3MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDT05GSUdGU19GUyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzdXJyb3VuZGluZyBgQ09ORklHRlNfRlNgLiBTaW1wbHkga25vd2luZyB0aGUgb3B0aW9uIGV4aXN0cyBpc24ndCBlbm91Z2g7IEkgbmVlZCB0aGUgZ3JhbnVsYXJpdHkuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgdGhlIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgd2hlcmUgdGhlIEtjb25maWcgZmlsZSBiZWNvbWVzIGVzc2VudGlhbC4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBiZWhhdmVzIHdpdGhpbiB0aGUga2VybmVsJ3MgZWNvc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIEtjb25maWcgYW5kIHNlZSB3aGF0IHdlJ3JlIHJlYWxseSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTg6MjYuNTMzNjU5MDM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDT05GSUdGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBjb25maWdmcyBpcyBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlXFxuICAgNjpcXHRcXHQgIG9mIHN5c2ZzJ3MgZnVuY3Rpb25hbGl0eS4gV2hlcmUgc3lzZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkXFxuICAgNzpcXHRcXHQgIHZpZXcgb2Yga2VybmVsIG9iamVjdHMsIGNvbmZpZ2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZCBtYW5hZ2VyXFxuICAgODpcXHRcXHQgIG9mIGtlcm5lbCBvYmplY3RzLCBvciBjb25maWdfaXRlbXMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXFxuICAxMTpcXHRcXHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjA6NTg6MjYuNTMzNzEyMzU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzY1MjE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipQYXRjaCBBc3Nlc3NtZW50IGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBObyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYXJlIGZsYWdnZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW50ZWdyYXRpb24gaW50byBvdXIgZnV6emluZyB3b3JrZmxvdy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGNvbmZpZ2ZzLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiByZW1vdmluZyBhIGRpcmVjdG9yeSBhbmQgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rLiBJdCBzb3VuZHMgbGlrZSB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgd2l0aCBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIHVuaGFzaGluZyBjaGVja3Mg4oCTIGNsYXNzaWMgc3luY2hyb25pemF0aW9uIGZpeGVzLCBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBleGNlbHMgYXQgdW5jb3ZlcmluZy5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKldvcnRoRnV6emluZzogdHJ1ZSoqLlxuXG5Ob3csIHRvIHRhcmdldCB0aGUgZnV6emluZyBlZmZlY3RpdmVseSwgd2UgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIG1vZGlmaWVzLiBUaGUgZGVzY3JpcHRpb24gY2xlYXJseSBwb2ludHMgdG8gYGNvbmZpZ2ZzX3JtZGlyYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGFzIHRoZSBmb2NhbCBwb2ludHMuIFRob3NlIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgb2YgdGhlIGZ1enppbmcgY2FtcGFpZ24uIFNvLCAqKkZvY3VzU3ltYm9sczogW1wiY29uZmlnZnNfcm1kaXJcIiwgXCJjb25maWdmc19zeW1saW5rXCJdKiouXG5cbkFuZCBzaW5jZSB0aGlzIHBhdGNoIGlzIGFib3V0IGxvY2tpbmcgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBpdHNlbGYsIHdlJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBhbmFseXNpcywgaXQgbmVlZHMgdGhlIGBDT05GSUdGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBtYWtlIHN1cmUgaXMgZW5hYmxlZCB3b3VsZCBiZTogKipFbmFibGVDb25maWdzOiBbXCJDT05GSUdGU19GU1wiXSoqLlxuXG5UaGUgcmVhc29uaW5nIGZvciB0aGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgdW5oYXNoaW5nIGNoZWNrcyB0byBwcmV2ZW50IHRoZSByYWNlIGNvbmRpdGlvbi4gRnV6emluZyBgY29uZmlnZnNfcm1kaXJgIGFuZCBgY29uZmlnZnNfc3ltbGlua2AgaXMgdGhlIG1vc3QgZGlyZWN0IHdheSB0byBleGVyY2lzZSB0aGlzIG5ldyBzeW5jaHJvbml6YXRpb24gbG9naWMsIHByb2JpbmcgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbGx5IHJldmVhbGluZyBmdXJ0aGVyIGlzc3Vlcy4gVGhhdCdzIHdoYXQgYSBnb29kIGZ1enppbmcgY2FtcGFpZ24gaXMgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzk4LCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMDo1ODozMS44NzAyMzY5MzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2NjUwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcm1kaXJcIixcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcm1kaXJcIixcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvbmZpZ2ZzIGJldHdlZW4gZGlyZWN0b3J5IHJlbW92YWwgYW5kIHN5bWxpbmsgY3JlYXRpb24gYnkgYWRkaW5nIHByb3BlciBsb2NraW5nIGFuZCB1bmhhc2hpbmcgY2hlY2tzLiBGdXp6aW5nIGNvbmZpZ2ZzX3JtZGlyIGFuZCBjb25maWdmc19zeW1saW5rIHdpbGwgZXhlcmNpc2UgdGhpcyBuZXcgc3luY2hyb25pemF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowl6gfr[1] Phase: Succeeded StartedAt: 2026-08-05 20:58:43 +0000 UTC FinishedAt: 2026-08-05 20:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 20:58:43 +0000 UTC FinishedAt: 2026-08-05 20:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2] Phase: Succeeded StartedAt: 2026-08-05 20:58:43 +0000 UTC FinishedAt: 2026-08-06 00:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 20:58:43 +0000 UTC FinishedAt: 2026-08-06 00:39:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 20:58:43 +0000 UTC FinishedAt: 2026-08-05 20:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 20:58:43 +0000 UTC FinishedAt: 2026-08-05 20:58:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowl6gfr/series-workflowl6gfr-convert-artifact-1033905395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 20:58:53 +0000 UTC FinishedAt: 2026-08-05 21:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 20:58:53 +0000 UTC FinishedAt: 2026-08-05 21:15:01 +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:*0b9bc386-fd97-4b87-8e25-c689e6121855,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-workflowl6gfr/series-workflowl6gfr-convert-artifact-1033905395/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": "46322593-c3f8-4a75-a040-5fd84eca18e0", "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-workflowl6gfr/series-workflowl6gfr-build-action-1949992865/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 20:58:53 +0000 UTC FinishedAt: 2026-08-05 21:14:51 +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:*0b9bc386-fd97-4b87-8e25-c689e6121855,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-workflowl6gfr/series-workflowl6gfr-convert-artifact-1033905395/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": "46322593-c3f8-4a75-a040-5fd84eca18e0", "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-workflowl6gfr/series-workflowl6gfr-build-action-1949992865/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 21:15:01 +0000 UTC FinishedAt: 2026-08-05 21:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 21:15:01 +0000 UTC FinishedAt: 2026-08-05 21:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 21:15:01 +0000 UTC FinishedAt: 2026-08-05 21:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 21:15:01 +0000 UTC FinishedAt: 2026-08-05 21:15:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowl6gfr/series-workflowl6gfr-convert-artifact-1896894698/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 21:15:11 +0000 UTC FinishedAt: 2026-08-05 21:17:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 21:15:11 +0000 UTC FinishedAt: 2026-08-05 21:17:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46322593-c3f8-4a75-a040-5fd84eca18e0,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-workflowl6gfr/series-workflowl6gfr-build-action-1949992865/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-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 21:17:12 +0000 UTC FinishedAt: 2026-08-05 21:17:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 21:17:12 +0000 UTC FinishedAt: 2026-08-05 21:17:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 21:17:12 +0000 UTC FinishedAt: 2026-08-05 21:33:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 21:17:12 +0000 UTC FinishedAt: 2026-08-05 21:33:45 +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:*0b9bc386-fd97-4b87-8e25-c689e6121855,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-workflowl6gfr/series-workflowl6gfr-convert-artifact-1896894698/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": "4cd4c1ac-e1d4-48b3-9ba9-84d1c57871ed", "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-workflowl6gfr/series-workflowl6gfr-build-action-3818421518/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 21:17:12 +0000 UTC FinishedAt: 2026-08-05 21:33:34 +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:*0b9bc386-fd97-4b87-8e25-c689e6121855,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-workflowl6gfr/series-workflowl6gfr-convert-artifact-1896894698/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": "4cd4c1ac-e1d4-48b3-9ba9-84d1c57871ed", "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-workflowl6gfr/series-workflowl6gfr-build-action-3818421518/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 21:33:45 +0000 UTC FinishedAt: 2026-08-05 21:33:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 21:33:45 +0000 UTC FinishedAt: 2026-08-05 21:33:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 21:33:45 +0000 UTC FinishedAt: 2026-08-05 21:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 21:33:45 +0000 UTC FinishedAt: 2026-08-05 21:35:35 +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:*4cd4c1ac-e1d4-48b3-9ba9-84d1c57871ed,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-workflowl6gfr/series-workflowl6gfr-build-action-3818421518/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-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 21:35:46 +0000 UTC FinishedAt: 2026-08-06 00:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 21:35:46 +0000 UTC FinishedAt: 2026-08-06 00:39:05 +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_rmdir","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:*46322593-c3f8-4a75-a040-5fd84eca18e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4cd4c1ac-e1d4-48b3-9ba9-84d1c57871ed,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-workflowl6gfr/series-workflowl6gfr-build-action-1949992865/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-workflowl6gfr/series-workflowl6gfr-build-action-3818421518/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 21:35:46 +0000 UTC FinishedAt: 2026-08-05 21:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 21:35:46 +0000 UTC FinishedAt: 2026-08-05 21:35:50 +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_rmdir","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-workflowl6gfr/series-workflowl6gfr-convert-artifact-2137365887/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 21:35:46 +0000 UTC FinishedAt: 2026-08-05 21:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 21:35:46 +0000 UTC FinishedAt: 2026-08-05 21:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 21:35:46 +0000 UTC FinishedAt: 2026-08-05 21:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 21:35:57 +0000 UTC FinishedAt: 2026-08-06 00:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6gfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_rmdir","configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"ac7bb5e7-6b22-4aed-90fd-40af07aad98a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 21:35:57 +0000 UTC FinishedAt: 2026-08-06 00:38:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46322593-c3f8-4a75-a040-5fd84eca18e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4cd4c1ac-e1d4-48b3-9ba9-84d1c57871ed,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-workflowl6gfr/series-workflowl6gfr-build-action-1949992865/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-workflowl6gfr/series-workflowl6gfr-build-action-3818421518/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-workflowl6gfr/series-workflowl6gfr-convert-artifact-2137365887/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,}