Name: series-workflowqm4vl Phase: Succeeded StartedAt: 2026-08-25 02:19:32 +0000 UTC FinishedAt: 2026-08-25 06:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[0] Phase: Succeeded StartedAt: 2026-08-25 02:19:32 +0000 UTC FinishedAt: 2026-08-25 02:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 02:19:32 +0000 UTC FinishedAt: 2026-08-25 02:44:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d268963816d3c5ef1ae011821581e4d951c74542", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "UDMABUF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d268963816d3c5ef1ae011821581e4d951c74542", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "UDMABUF" ], "series_id": "51b9f2d6-80b7-44fe-a95f-ff4664651256" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_hugetlb_folio_reserve", "memfd_alloc_folio", "memfd_pin_folios" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDssCiAgICAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGZvbGlvIGFsbG9jYXRpb24gbG9naWMgYnkgc2V0dGluZyB0aGUgYGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBmbGFnIG9uIGEgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkIGZvbGlvLiBUaGlzIGlzIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFjY291bnRpbmcgYW5kIGh1Z2V0bGIgcmVzZXJ2ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbWVtb3J5IGxlYWtzLCBpbmNvcnJlY3QgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZWJjOTY2M2E5ZTI3N2VlNzBiYjk1NDkwY2JkNTQyMTVjN2JhMjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDI6NDE6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBkODg0OTE5NmFkOWIxLi5mYWRmZTFkYmMwNDdhIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0yMTc4LDggJiM0MzsyMTc4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4gXHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4tXHRpZiAoZm9saW8pXG4mIzQzO1x0aWYgKGZvbGlvKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xuIFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuJiM0MztcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0cmV0dXJuIGZvbGlvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDttZW1mZF9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZWJjOTY2M2E5ZTI3N2VlNzBiYjk1NDkwY2JkNTQyMTVjN2JhMjgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDI6NDE6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjE3OCw4ICYjNDM7MjE3OCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCWZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLCBwcmVmZXJyZWRfbmlkLAogCQkJCQkgICAgICAgbm1hc2spOwotCWlmIChmb2xpbykKJiM0MzsJaWYgKGZvbGlvKSB7CiYjNDM7CQlmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pOwogCQloLSZndDtyZXN2X2h1Z2VfcGFnZXMtLTsKJiM0MzsJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAlyZXR1cm4gZm9saW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtbS9odWdldGxiLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgY2hhbmdlIHRvIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBmdW5jdGlvbi4gVGhlIGtleSBhZGRpdGlvbiBoZXJlIGlzIGEgY2FsbCB0byBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKWAgYWZ0ZXIgYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgcGlxdWVzIG15IGludGVyZXN0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGZ1bmN0aW9uIGNhbGwuIFdoYXQgZXhhY3RseSBpcyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBkb2luZz8gV2hhdCBraW5kIG9mIHN0YXRlIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBpcyAmIzM0O3Jlc2VydmUmIzM0OyByZWZlcnJpbmcgdG8gaW4gdGhpcyBjb250ZXh0PwoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIG5lZWQgdG8gcmVhZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gVGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gV2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgZmxvdyBvZiBleGVjdXRpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgcHVycG9zZSBhbmQgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IHNjaGVtZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmb2xpbyByZXNlcnZlcywgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDU9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cdFx0XHRcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA5LVx0XHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTM0OmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXHRcdFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MjE0ND1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjE2Ny1cbm1tL2h1Z2V0bGIuYzoyMTY4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxNjktXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbi0tXG5tbS9tZW1mZC5jLTkzLVxubW0vbWVtZmQuYzo5NDpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbm1tL21lbWZkLmMtOTUtXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBSZXNlcnZhdGlvbioqCgpPa2F5LCBzbyBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGNhbGxpbmcgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcmVzZXJ2aW5nIHNwYWNlIGZvciB0aGVzZSBIdWdlVExCIGZvbGlvcy4gTXkgZm9jdXMgbm93IGlzIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuIFdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXN0b3JlIHJlc2VydmUgZnVuY3Rpb25hbGl0eT8gTGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIHJlc2VydmF0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIdWdlVExCIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTgxLVx0aWYgKGZvbGlvKSB7XG5tbS9odWdldGxiLmM6MjE4MjpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yMTgzLVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz0yNTUwPXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTkyLVx0XHRcdFx0ICovXG5tbS9odWdldGxiLmM6MjU5MzpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtMjU5NC1cdFx0fSBlbHNlIGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbm1tL2h1Z2V0bGIuYy0yNjEzLVx0XHRcdFx0ICovXG5tbS9odWdldGxiLmM6MjYxNDpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtMjYxNS1cdFx0fSBlbHNlIHtcbi0tXG5tbS9odWdldGxiLmM9MjgzMj1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjg3NC1cdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XG5tbS9odWdldGxiLmM6Mjg3NTpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yODc2LVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz01MjEwPXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTMyOC1cdFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG5tbS9odWdldGxiLmM6NTMyOTpcdFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTUzMzAtXHRcdFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBQcm9iYWJseSBkZWFsaW5nIHdpdGggaHVnZXBhZ2VzIGluIHRoZSBrZXJuZWwsIGxpa2VseSByZWxhdGVkIHRvIHJlc3RvcmluZyByZXNlcnZhdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgYnV0IGxldCYjMzk7cyBiZSBwcmVjaXNlLiBUaW1lIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgc3ltYm9sIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCBhbmQgd2hhdCBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyBpbi4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGl0cyBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSwgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBjZW50cmFsIHRvIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgaHVnZXBhZ2UgcmVzZXJ2YXRpb25zLiBJIGV4cGVjdCBpdCYjMzk7cyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyB0aG9zZSByZXNlcnZhdGlvbnMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2hlbiByZXN0b3JpbmcgdGhlbSwgbWF5YmUgYWZ0ZXIgYSBzeXN0ZW0gc3VzcGVuZCBvciBvdGhlciBldmVudCB0aGF0IGNvdWxkIGxlYWQgdG8gbWVtb3J5IHN0YXRlIGNoYW5nZXMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHNjaGVtZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqV2hlcmUmIzM5O3MgdGhlIERlZmluaXRpb24gQnVyaWVkPyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgaXNzdWUuLi4gYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBtaW5kIGdvZXMgaXMsICYjMzQ7V2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8mIzM0OyBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZSBkZWZpbml0aW9uIEkmIzM5O20gbG9va2luZyBmb3IgaXMgbGlrZWx5IGhpZGluZyB3aXRoaW4gdGhlIGRlcHRocyBvZiB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIE1vcmUgcHJlY2lzZWx5LCBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGl0IGVpdGhlciBkZWZpbmVkIHZpYSBhIHByZXByb2Nlc3NvciBtYWNyb+KAlHRoZSBnb29kIG9sZCBgI2RlZmluZWAgcm91dGXigJRvciBwZXJoYXBzIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIFRoYXQgaGVhZGVyIGZpbGUgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RvcCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBIdWdlVExCIGludGVybmFscywgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIHN0YXJ0IGRpZ2dpbmcuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIxNjg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxubW0vaHVnZXRsYi5jLTIxODEtXHRpZiAoZm9saW8pIHtcbm1tL2h1Z2V0bGIuYzoyMTgyOlx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTIxODMtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTI1NTA9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI1OTItXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNTkzOlx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNTk0LVx0XHR9IGVsc2UgaWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTI2MTMtXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNjE0Olx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNjE1LVx0XHR9IGVsc2Uge1xuLS1cbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODc0LVx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcbm1tL2h1Z2V0bGIuYzoyODc1Olx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI4NzYtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzI4LVx0XHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbm1tL2h1Z2V0bGIuYzo1MzI5Olx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTMzMC1cdFx0XHQvKiBSZXNlcnZhdGlvbiB0byBiZSBhZGp1c3RlZCBhZnRlciB0aGUgc3BpbiBsb2NrICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBSZXNlcnZlIFJlc3RvcmUgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gRnJvbSB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgc29tZSBIdWdlVExCIHJlc291cmNlIHJlc2VydmF0aW9uIG5lZWRzIHRvIGJlIGJyb3VnaHQgYmFjayBpbnRvIHBsYXkuIFRoZSBxdWVzdGlvbiBpcywgaG93JiMzOTtzIHRoaXMgcmVzdG9yYXRpb24gaGFuZGxlZCBpbiB0aGUga2VybmVsPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSwgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgZGVmaW5pdGlvbnMgZm9yIEh1Z2VUTEIgbWFuYWdlbWVudCBhcmUga2VwdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGEgZnVuY3Rpb24gb3IgbWFjcm8gZGVhbGluZyB3aXRoICYjMzQ7cmVzdG9yZV9yZXNlcnZlLiYjMzQ7IFRoYXQgc2hvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYmVoaW5kIHJlY292ZXJpbmcgdGhlIHJlc2VydmVkIHJlc291cmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzdG9yZV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NDk4PVRoaXMgaXMgYSBzcGVjaWFsIHdyYXBwZXIgcm91dGluZSB0byBoZWxwIGZhY2lsaXRhdGUgcmVzZXJ2YXRpb24gY2xlYW51cFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo0OTk6b24gZXJyb3IgcGF0aHMuICBJdCBpcyBvbmx5IGNhbGxlZCBmcm9tIHRoZSByb3V0aW5lIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01MDAtVGhpcyByb3V0aW5lIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gaW4gYW4gYXR0ZW1wdFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NTMyPWJlICBoaWdoZXIgdGhhbiBpdCBzaG91bGQgYW5kIHByZXZlbnQgYWxsb2NhdGlvbiBvZiBhIHByZS1hbGxvY2F0ZWQgcGFnZS5cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTMzLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1MzQ6VGhlIHJvdXRpbmUgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKCkgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uLiAgSXRcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTM1LWlzIGZhaXJseSB3ZWxsIGRvY3VtZW50ZWQuICBUaGUgaW50ZW50aW9uIG9mIHRoaXMgcm91dGluZSBpcyB0byByZXN0b3JlXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01Mzg9Y291bnQgYWZ0ZXIgdGhlIHBhZ2UgaXMgZnJlZWQuXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTUzOS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NTQwOlRoZSByb3V0aW5lIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvciBpdHNlbGYgbWF5IGVuY291bnRlciBlcnJvcnMgd2hpbGVcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTQxLWF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgcmVzZXJ2YXRpb24gbWFwIGVudHJ5LiAgSW4gdGhpcyBjYXNlLCBpdCB3aWxsXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01NDg9VGhlcmUgaXMgc29tZSBjb2RlIChtb3N0IG5vdGFibHkgdXNlcmZhdWx0ZmQpIHdoaWNoIGNhbiBub3QgY2FsbFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NDk6cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yLiAgSW4gdGhpcyBjYXNlLCBpdCBzaW1wbHkgbW9kaWZpZXMgdGhlIFBhZ2VQcml2YXRlXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTU1MC1zbyB0aGF0IGEgcmVzZXJ2YXRpb24gd2lsbCBub3QgYmUgbGVha2VkIHdoZW4gdGhlIGh1Z2UgcGFnZSBpcyBmcmVlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0zMzE9cmVnaW9uX2NvdW50KCnlnKjop6PpmaTnp4HmnInlt6jpobXmmKDlsITml7booqvosIPnlKjjgILlnKjnp4HmnInmmKDlsITkuK3vvIzpooTnlZnmmKDlsITkuK3msqHmnInmnaHnm67ooajmmI7lrZjlnKjkuIDkuKrpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0zOTMtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozOTQ65Ye95pWwIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpIOivleWbvuWkhOeQhui/meenjeaDheWGteOAguWug+acieebuOW9k+WujOWWhOeahOaWh+aho+OAgui/meS4quWHveaVsOeahOebrueahFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMzk1LeaYr+WwhumihOeVmeaYoOWwhOaBouWkjeWIsOmhtemdouWIhumFjeWJjeeahOeKtuaAgeOAgumAmui/h+i/meenjeaWueW8j++8jOmihOeVmeaYoOWwhOeahOeKtuaAgeWwhuS4jumhtemdoumHiuaUvuWQjueahOWFqOWxgOmihOeVmeiuoVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjM5ODrlh73mlbByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3LmnKzouqvlnKjor5Xlm77mgaLlpI3pooTnlZnmmKDlsITmnaHnm67ml7blj6/og73kvJrpgYfliLDplJnor6/jgILlnKjov5nnp43mg4XlhrXkuIvvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5OS3lroPlsIbnroDljZXlnLDmuIXpmaTor6XpobXnmoRQYWdlUHJpdmF0Zeagh+W/l+OAgui/meagt+S4gOadpe+8jOW9k+mhtemdouiiq+mHiuaUvuaXtu+8jOWFqOWxgOmihOeVmeiuoeaVsOWwhuS4jeS8muiiq+mAkuWinuOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQwMi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjQwMzrmnInkuIDkupvku6PnoIHvvIjmnIDmmI7mmL7nmoTmmK91c2VyZmF1bHRmZO+8ieS4jeiDveiwg+eUqHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcuOAguWcqOi/meenjeaDheWGteS4i++8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDA0LeWug+eugOWNleWcsOS/ruaUueS6hlBhZ2VQcml2YXRl77yM5Lul5L6/5Zyo6YeK5pS+5beo6aG15pe25LiN5Lya5rOE6Zyy6aKE55WZ44CCXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDk4PXN0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZV9zaW5nbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MjAtXHQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyMTpcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKSwgZm9saW8pO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTIyLVx0aHVnZXRsYl9kZWxldGVfZnJvbV9wYWdlX2NhY2hlKGZvbGlvKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODAyLVx0XHRpZiAodW5saWtlbHkoZXJyb3IpKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MDM6XHRcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZvbGlvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgwNC1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU0OT1odWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTU3LSAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1NTg6ICogSFBHX3Jlc3RvcmVfcmVzZXJ2ZSAtIFNldCB3aGVuIGEgaHVnZXRsYiBwYWdlIGNvbnN1bWVzIGEgcmVzZXJ2YXRpb24gYXRcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU1OS0gKlx0YWxsb2NhdGlvbiB0aW1lLiAgQ2xlYXJlZCB3aGVuIHBhZ2UgaXMgZnVsbHkgaW5zdGFudGlhdGVkLiAgRnJlZVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU4Mz1lbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1ODQ6XHRIUEdfcmVzdG9yZV9yZXNlcnZlID0gMCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU4NS1cdEhQR19taWdyYXRhYmxlLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYzMj1mb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjQzLSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjQ0OkhQQUdFRkxBRyhSZXN0b3JlUmVzZXJ2ZSwgcmVzdG9yZV9yZXNlcnZlKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjQ1LUhQQUdFRkxBRyhNaWdyYXRhYmxlLCBtaWdyYXRhYmxlKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcxMT1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcxMi1cdFx0XHRwZ29mZl90IGlkeCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MTM6dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjczPXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE2ODEtXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBodWdldGxiX2ZvbGlvX3N1YnBvb2woZm9saW8pO1xubW0vaHVnZXRsYi5jOjE2ODI6XHRib29sIHJlc3RvcmVfcmVzZXJ2ZTtcbm1tL2h1Z2V0bGIuYy0xNjgzLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5tbS9odWdldGxiLmMtMTY5MS1cdGZvbGlvLVx1MDAzZW1hcHBpbmcgPSBOVUxMO1xubW0vaHVnZXRsYi5jOjE2OTI6XHRyZXN0b3JlX3Jlc2VydmUgPSBmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYzoxNjkzOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2OTQtXG4tLVxubW0vaHVnZXRsYi5jLTE3MDItXHQgKi9cbm1tL2h1Z2V0bGIuYzoxNzAzOlx0aWYgKCFyZXN0b3JlX3Jlc2VydmUpIHtcbm1tL2h1Z2V0bGIuYy0xNzA0LVx0XHQvKlxuLS1cbm1tL2h1Z2V0bGIuYy0xNzA2LVx0XHQgKiB1bmRlciBpdHMgbWluaW11bSBzaXplIGlmIHRoZSByZXNlcnZhdGlvbiBpcyBub3QgcmVzdG9yZWRcbm1tL2h1Z2V0bGIuYzoxNzA3Olx0XHQgKiBhZnRlciBwYWdlIGlzIGZyZWUuICBUaGVyZWZvcmUsIGZvcmNlIHJlc3RvcmVfcmVzZXJ2ZVxubW0vaHVnZXRsYi5jLTE3MDgtXHRcdCAqIG9wZXJhdGlvbi5cbi0tXG5tbS9odWdldGxiLmMtMTcxMC1cdFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxubW0vaHVnZXRsYi5jOjE3MTE6XHRcdFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcbm1tL2h1Z2V0bGIuYy0xNzEyLVx0fVxuLS1cbm1tL2h1Z2V0bGIuYy0xNzIxLVx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XG5tbS9odWdldGxiLmM6MTcyMjpcdGlmIChyZXN0b3JlX3Jlc2VydmUpXG5tbS9odWdldGxiLmMtMTcyMy1cdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTgxLVx0aWYgKGZvbGlvKSB7XG5tbS9odWdldGxiLmM6MjE4MjpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yMTgzLVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz0yNTI0PXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjUzNi0gKiAxKSBBIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBhbmQgdGhlIGZvbGlvIGNvbnN1bWVkIHRoZSByZXNlcnZhdGlvbi5cbm1tL2h1Z2V0bGIuYzoyNTM3OiAqICAgIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzIHNldCBpbiB0aGUgZm9saW8uXG5tbS9odWdldGxiLmM6MjUzODogKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xubW0vaHVnZXRsYi5jLTI1MzktICogICAgbm90IHNldC4gIEhvd2V2ZXIsIGFsbG9jX2h1Z2V0bGJfZm9saW8gYWx3YXlzIHVwZGF0ZXMgdGhlIHJlc2VydmUgbWFwLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQ5LSAqL1xubW0vaHVnZXRsYi5jOjI1NTA6dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtMjU1MS1cdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTI1NTQtXG5tbS9odWdldGxiLmM6MjU1NTpcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jLTI1NTYtXHRcdGlmICh1bmxpa2VseShyYyBcdTAwM2MgMCkpXG4tLVxubW0vaHVnZXRsYi5jLTI1NTgtXHRcdFx0ICogUmFyZSBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbiBpbiByZXNlcnZlIG1hcFxubW0vaHVnZXRsYi5jOjI1NTk6XHRcdFx0ICogbWFuaXB1bGF0aW9uLiAgQ2xlYXIgaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgc29cbm1tL2h1Z2V0bGIuYy0yNTYwLVx0XHRcdCAqIHRoYXQgZ2xvYmFsIHJlc2VydmUgY291bnQgd2lsbCBub3QgYmUgaW5jcmVtZW50ZWRcbi0tXG5tbS9odWdldGxiLmMtMjU2Ny1cdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNTY4Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNTY5LVx0XHRlbHNlIGlmIChyYylcbi0tXG5tbS9odWdldGxiLmMtMjU3OC1cdFx0XHQgKiBiZWZvcmUgdGhlIGFsbG9jX2h1Z2V0bGJfZm9saW8gY2FsbCwgb3RoZXJ3aXNlXG5tbS9odWdldGxiLmM6MjU3OTpcdFx0XHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxubW0vaHVnZXRsYi5jLTI1ODAtXHRcdFx0ICogUmVtb3ZlIHRoZSBlbnRyeSBzbyB0aGF0IGEgc3Vic2VxdWVudCBhbGxvY2F0aW9uXG4tLVxubW0vaHVnZXRsYi5jLTI1ODctXHRcdFx0XHQgKiB3ZSBjYW4gbm90IGRlbGV0ZSB0aGUgZW50cnksIHNldFxubW0vaHVnZXRsYi5jOjI1ODg6XHRcdFx0XHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBzbyB0aGF0IHRoZSByZXNlcnZlXG5tbS9odWdldGxiLmMtMjU4OS1cdFx0XHRcdCAqIGNvdW50IHdpbGwgYmUgaW5jcmVtZW50ZWQgd2hlbiB0aGUgZm9saW9cbi0tXG5tbS9odWdldGxiLmMtMjU5Mi1cdFx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjI1OTM6XHRcdFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI1OTQtXHRcdH0gZWxzZSBpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5tbS9odWdldGxiLmMtMjYwOC1cdFx0XHRcdCAqIGEgcmVzZXJ2YXRpb24gaXMgcHJlc2VudC4gIFNpbmNlIHdlIGNhblxubW0vaHVnZXRsYi5jOjI2MDk6XHRcdFx0XHQgKiBub3QgYWRkIGFuIGVudHJ5LCBzZXQgaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVcbm1tL2h1Z2V0bGIuYy0yNjEwLVx0XHRcdFx0ICogb24gdGhlIGZvbGlvIHNvIHJlc2VydmUgY291bnQgd2lsbCBiZVxuLS1cbm1tL2h1Z2V0bGIuYy0yNjEzLVx0XHRcdFx0ICovXG5tbS9odWdldGxiLmM6MjYxNDpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtMjYxNS1cdFx0fSBlbHNlIHtcbi0tXG5tbS9odWdldGxiLmM9MjgzMj1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjg3NC1cdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XG5tbS9odWdldGxiLmM6Mjg3NTpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yODc2LVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz00ODk4PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNTAyOS1cdFx0XHRcdGlmIChyZXQpIHtcbm1tL2h1Z2V0bGIuYzo1MDMwOlx0XHRcdFx0XHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgZHN0X3ZtYSwgYWRkciwgbmV3X2ZvbGlvKTtcbm1tL2h1Z2V0bGIuYy01MDMxLVx0XHRcdFx0XHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmMtNTA0MC1cdFx0XHRcdGlmICghcHRlX3NhbWUoc3JjX3B0ZV9vbGQsIGVudHJ5KSkge1xubW0vaHVnZXRsYi5jOjUwNDE6XHRcdFx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBhZGRyLFxubW0vaHVnZXRsYi5jLTUwNDItXHRcdFx0XHRcdFx0XHRcdG5ld19mb2xpbyk7XG4tLVxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzI4LVx0XHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbm1tL2h1Z2V0bGIuYzo1MzI5Olx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTMzMC1cdFx0XHQvKiBSZXNlcnZhdGlvbiB0byBiZSBhZGp1c3RlZCBhZnRlciB0aGUgc3BpbiBsb2NrICovXG4tLVxubW0vaHVnZXRsYi5jLTUzNDctXHRcdFx0XHQgKiB0byBhbGxvY2F0ZSBhIGZpbGVfcmVnaW9uIHN0cnVjdC4gQ2xlYXJcbm1tL2h1Z2V0bGIuYzo1MzQ4Olx0XHRcdFx0ICogaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgc28gdGhhdCBnbG9iYWwgcmVzZXJ2ZVxubW0vaHVnZXRsYi5jLTUzNDktXHRcdFx0XHQgKiBjb3VudCB3aWxsIG5vdCBiZSBpbmNyZW1lbnRlZCBieSBmcmVlX2h1Z2VfZm9saW8uXG4tLVxubW0vaHVnZXRsYi5jLTUzNTEtXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo1MzUyOlx0XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTUzNTMtXHRcdFx0ZWxzZSBpZiAocmMpXG4tLVxubW0vaHVnZXRsYi5jPTU0OTE9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTY3MS1cdGlmIChuZXdfZm9saW8gIT0gb2xkX2ZvbGlvKVxubW0vaHVnZXRsYi5jOjU2NzI6XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCB2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBuZXdfZm9saW8pO1xubW0vaHVnZXRsYi5jLTU2NzMtXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmM9NTcwMD1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTcxNC1cdH1cbm1tL2h1Z2V0bGIuYzo1NzE1Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTU3MTYtXG4tLVxubW0vaHVnZXRsYi5jPTU3NjM9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01ODY1LVx0XHRcdFx0ICogdG8gdGhlIHBhZ2UgY2FjaGUuIFNvIGl0JiMzOTtzIHNhZmUgdG8gY2FsbFxubW0vaHVnZXRsYi5jOjU4NjY6XHRcdFx0XHQgKiByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoKSBoZXJlLlxubW0vaHVnZXRsYi5jLTU4NjctXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo1ODY4Olx0XHRcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsXG5tbS9odWdldGxiLmMtNTg2OS1cdFx0XHRcdFx0XHRcdGZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmMtNTk4MS1cdGlmIChuZXdfYW5vbl9mb2xpbylcbm1tL2h1Z2V0bGIuYzo1OTgyOlx0XHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgdm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZm9saW8pO1xubW0vaHVnZXRsYi5jLTU5ODMtXG4tLVxubW0vaHVnZXRsYi5jPTYyNzY9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjM1Mi1cdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo2MzUzOlx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBkc3RfYWRkciwgZm9saW8pO1xubW0vaHVnZXRsYi5jLTYzNTQtXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmMtNjM5MC1cdFx0aWYgKHJldCkge1xubW0vaHVnZXRsYi5jOjYzOTE6XHRcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGRzdF9hZGRyLCBmb2xpbyk7XG5tbS9odWdldGxiLmMtNjM5Mi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2h1Z2V0bGIuYy02NDkwLVx0aWYgKCFmb2xpb19pbl9wYWdlY2FjaGUpXG5tbS9odWdldGxiLmM6NjQ5MTpcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGRzdF9hZGRyLCBmb2xpbyk7XG5tbS9odWdldGxiLmMtNjQ5Mi1cdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vcm1hcC5jPTMxOTQ9dm9pZCBodWdldGxiX2FkZF9uZXdfYW5vbl9ybWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTMyMDItXHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9sYXJnZV9tYXBjb3VudCwgMCk7XG5tbS9ybWFwLmM6MzIwMzpcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL3JtYXAuYy0zMjA0LVx0X19mb2xpb19zZXRfYW5vbihmb2xpbywgdm1hLCBhZGRyZXNzLCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZSwgYnJva2VuIGRvd24gaW4gYSB3YXkgdGhhdCwgYXMgYW4gZXhwZXJ0LCBJJiMzOTtkIHByb2Nlc3MgaXQ6CgoqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKWAgYW5kIGRlY3JlbWVudHMgYGgtJmd0O3Jlc3ZfaHVnZV9wYWdlc2Agd2l0aGluIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBmdW5jdGlvbi4gVGhpcyAqaW1tZWRpYXRlbHkqIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBIdWdlVExCIGZvbGlvcy4gQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIEkmIzM5O20gcmVtZW1iZXJpbmcgY29ycmVjdGx5IOKAkyBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGFtIOKAkyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCAqc2ltcGx5KiByZXR1cm5lZCB0aGUgZm9saW8uIFRoZSByZXNlcnZhdGlvbiB3YXMgbGlrZWx5IGJlaW5nIGhhbmRsZWQgZWxzZXdoZXJlLCBvciBwZXJoYXBzICpub3QqIGV4cGxpY2l0bHksIGFuZCB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogY2hhbmdlcyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgdXNlZCB0byBsb29rIGluIGBtbS9odWdldGxiLmNgIHRvIGNvbXBhcmUgdG8gdGhlIHVwZGF0ZWQgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcmVzZXJ2ZSBtdXN0IGhhdmUgYmVlbiBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE2ODpcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuMjE2OTpcdFx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4yMTcwOlx0e1xuMjE3MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjIxNzI6XHRcbjIxNzM6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjIxNzQ6XHRcdGlmICghaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMpIHtcbjIxNzU6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yMTc2Olx0XHRcdHJldHVybiBOVUxMO1xuMjE3NzpcdFx0fVxuMjE3ODpcdFxuMjE3OTpcdFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4yMTgwOlx0XHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4yMTgxOlx0XHRpZiAoZm9saW8pIHtcbjIxODI6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbjIxODM6XHRcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbjIxODQ6XHRcdH1cbjIxODU6XHRcbjIxODY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjE4NzpcdFx0cmV0dXJuIGZvbGlvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZGlmZiBpbiBgbW0vaHVnZXRsYi5jYC4gIEJlZm9yZSwgdGhlIGNvZGUgY2hlY2tlZCBpZiBhIGZvbGlvIHdhcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQgYW5kLCBpZiBzbywgZGVjcmVtZW50ZWQgdGhlIHJlc2VydmVkIGh1Z2UgcGFnZSBjb3VudCAoYGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcy0tYCkuIFRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtgICp3aXRoaW4qIHRoYXQgYGlmYCBibG9jay4gIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHNldHMgYSBmbGFnIG9uIHRoZSBmb2xpbywgYGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCwgaWYgdGhlIGZvbGlvIGlzIGFsbG9jYXRlZCBmcm9tIHRoZSByZXNlcnZlLiBUaGlzIG1lYW5zIGlmIHRoZSBmb2xpbyBnZXRzIGZyZWVkLCB3ZSBjYW4gcmVzdG9yZSB0aGUgcmVzZXJ2YXRpb24uCgpUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBsb2dpYy4gSXQmIzM5O3Mgbm90IGp1c3QgYSByZWZhY3RvciBvciBjb3NtZXRpYyBjaGFuZ2U7IGl0IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIGh1Z2UgcGFnZSByZXNlcnZlIHN5c3RlbSBpbiB0aGUga2VybmVsLiBUaGlzIGNoYW5nZSBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIG5vdyBuZWVkIHRvIGNoZWNrIHdoZXJlIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzIGNhbGxlZCBmcm9tIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0byBidWlsZCBhIGZ1enogdGVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwNT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVx0XHRcdFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cdFx0XHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTY3LVxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE2OS1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtOTMtXG5tbS9tZW1mZC5jOjk0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxubW0vbWVtZmQuYy05NS1cdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDUxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtZW1mZF9hbGxvY19mb2xpb2AqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGNhbGwuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY29taW5nIGZyb20gYG1lbWZkX2FsbG9jX2ZvbGlvYCB3aXRoaW4gYG1tL21lbWZkLmNgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMsIGxpa2VseSB0aWVkIHRvIGFub255bW91cyBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgYG1lbWZkX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgb2YgYWxsb2NhdGlvbiwgdGhlIGNvcmUgb2YgaG93IHRoaXMgYWxsIGdldHMgaW5zdGFudGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBjYWxsIGltcGxpZXMgaXQmIzM5O3MgYSBmb2xpby1iYXNlZCBhbGxvY2F0aW9uLiBXaGljaCBhbHNvIHRlbGxzIG1lIHRoYXQgdGhleSBhcmVuJiMzOTt0IHdvcmtpbmcgd2l0aCB0cmFkaXRpb25hbCBwYWdlcy4gQSBmb2xpbyBpcyBhIG11Y2ggbW9yZSBtb2Rlcm4gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtZmQuaD0xMD1leHRlcm4gbG9uZyBtZW1mZF9mY250bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IGFyZyk7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0xMi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjctfVxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTI5LXtcbi0tXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5tbS9ndXAuYy0zNTE4LVx0XHRcdGlmICghbnJfZm91bmQpIHtcbm1tL2d1cC5jOjM1MTk6XHRcdFx0XHRmb2xpbyA9IG1lbWZkX2FsbG9jX2ZvbGlvKG1lbWZkLCBzdGFydF9pZHgpO1xubW0vZ3VwLmMtMzUyMC1cdFx0XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY3LSAqL1xubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG5tbS9tZW1mZC5jLTY5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRm9saW8gQWxsb2NhdGlvbiB3aXRoaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGZvbGlvIGFsbG9jYXRpb24gcHJvY2VzcywgYW5kIGl0IGxvb2tzIGxpa2UgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgbWVtZmRfcGluX2ZvbGlvc2Agd2l0aGluIGBtbS9ndXAuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkga25vdyBgZ3VwLmNgIGlzIHRoZSAmIzM0O2dldCB1c2VyIHBhZ2VzJiMzNDsgY29kZSwgd2hpY2ggaXMgYWxsIGFib3V0IHNlY3VyZWx5IGFjY2Vzc2luZyB1c2VyLXNwYWNlIG1lbW9yeSwgYW5kIHBpbm5pbmcgdGhvc2UgcGFnZXMgaW4gdGhlIHBhZ2UgdGFibGVzLiBTbywgdGhpcyBgbWVtZmRfcGluX2ZvbGlvc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwaW5uaW5nIGZvbGlvcyByZWxhdGVkIHRvIG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIChtZW1mZHMpLiBJdCBtYWtlcyBzZW5zZSB0aGF0IHdlIG5lZWQgYSB3YXkgdG8gYWxsb2NhdGUgdGhlIGZvbGlvIGFuZCBnZXQgaXQgcmVhZHkgZm9yIHBpbm5pbmcsIGhlbmNlIHRoZSBjYWxsIHRvIGBtZW1mZF9hbGxvY19mb2xpb2AuIEkgd29uZGVyIHdoYXQgdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gZmxhZ3MgYW5kIGNvbnN0cmFpbnRzIGFyZSwgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aG9zZSBmdW5jdGlvbiBjYWxscyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgYnV0IHRoaXMgYXQgbGVhc3QgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtZmQgZm9saW9zIGFyZSBiZWluZyBoYW5kbGVkIGR1cmluZyBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBzZWUgd2hhdCBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCBhbmQgaG93IHRoZSBmb2xpbyBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE1LVx0ZW5kID0gc3RhcnQgJiM0MzsgKHBnY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIDE7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMxNjpcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFx1MDAyNnBnb2ZmKTtcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE3LVx0aWYgKG5yX2ZvbGlvcyBcdTAwM2M9IDApXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXHRcdCAqIEluIGEgZ2l2ZW4gcmFuZ2UsIG9ubHkgdGhlIGZpcnN0IHN1YnBhZ2Ugb2YgdGhlIGZpcnN0IGZvbGlvXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcdFx0ICogaGFzIGFuIG9mZnNldCwgdGhhdCBpcyByZXR1cm5lZCBieSBtZW1mZF9waW5fZm9saW9zKCkuXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cdFx0ICogVGhlIGZpcnN0IHN1YnBhZ2VzIG9mIG90aGVyIGZvbGlvcyAoaW4gdGhlIHJhbmdlKSBoYXZlIGFuXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cdC8qXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MzU6XHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVx0ICogd2UgY2FuIGNvbXB1dGUgbnBhZ2VzIHBpbm5lZCwgYW5kIGF2b2lkIGxvb3Bpbmcgb3ZlciBmb2xpb3MgaGVyZVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cdCAqL1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5Olx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cdTAwM2VmaWxlLCBzdGFydCwgZW5kLCB1c2VyLVx1MDAzZXVmb2xpb3MsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXHRcdFx0XHQgICBuZm9saW9zLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0zMzc4PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzc5LVx0XHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzM4MDpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM4MS1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYz0xOTA9RVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3BhZ2UpO1xuLS1cbm1tL2d1cC5jLTE5NS0gKlxubW0vZ3VwLmM6MTk2OiAqIEZvbGlvcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBtZW1mZF9waW5fZm9saW9zKCkgb3Igb3RoZXIgc2ltaWxhciByb3V0aW5lc1xubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXG4tLVxubW0vZ3VwLmM9MzQxNT1FWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKTtcbi0tXG5tbS9ndXAuYy0zNDE3LS8qKlxubW0vZ3VwLmM6MzQxODogKiBtZW1mZF9waW5fZm9saW9zKCkgLSBwaW4gZm9saW9zIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWZkXG5tbS9ndXAuYy0zNDE5LSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcbi0tXG5tbS9ndXAuYy0zNDQyLSAqL1xubW0vZ3VwLmM6MzQ0Mzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5tbS9ndXAuYy0zNDQ0LVx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxuLS1cbm1tL2d1cC5jLTM1MzktfVxubW0vZ3VwLmM6MzU0MDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcbm1tL2d1cC5jLTM1NDEtXG4tLVxubW0vZ3VwLmMtMzU1MS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xubW0vZ3VwLmM6MzU1MjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xubW0vZ3VwLmMtMzU1My0gKiAoZS5nLiwgaW5kaXZpZHVhbCBwYWdlcykgb2YgdGhlIGZvbGlvIGxhdGVyLCBmb3IgZXhhbXBsZSwgdXNpbmdcbi0tXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxubW0vbWVtZmQuYy02Ni0gKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cbi0tXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vbWVtZmRfbHVvLmMtMTI5LVx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcbm1tL21lbWZkX2x1by5jOjEzMDpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XG5tbS9tZW1mZF9sdW8uYy0xMzEtXHQgKiBzbG90cy5cbm1tL21lbWZkX2x1by5jLTEzMi1cdCAqL1xubW0vbWVtZmRfbHVvLmM6MTMzOlx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxubW0vbWVtZmRfbHVvLmMtMTM0LVx0XHRcdFx0ICAgICBcdTAwMjZvZmZzZXQpO1xuLS1cbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtMjkxLVx0Lypcbm1tL21lbWZkX2x1by5jOjI5MjpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxubW0vbWVtZmRfbHVvLmMtMjkzLVx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgRm9saW8gQWxsb2NhdGlvbiBGbG93KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUsIGNhbGxlZCBkaXJlY3RseSBieSBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2Agd2l0aGluIHRoZSBpb21tdWZkIGNvbXBvbmVudC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UmIzM5O3JlIHBpbm5pbmcgbWVtb3J5LCBzbyB3ZSBuZWVkIHRvIHRyYWNrIGl0LgoKTm93LCBpZiBgbWVtZmRfcGluX2ZvbGlvc2AgZG9lc24mIzM5O3QgZmluZCBhIHN1aXRhYmxlIGZvbGlvIOKAkyB3aGljaCBpcyBwcm9iYWJseSB0aGUgaW50ZXJlc3RpbmcgYml0IOKAkyBpdCYjMzk7cyByZWFjaGluZyBvdXQgdG8gYG1lbWZkX2FsbG9jX2ZvbGlvYC4gQW5kIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBwb3RlbnRpYWxseSBjb21wbGV4LiBJJiMzOTttIG5vdGluZyB0aGF0IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCBiZW5lYXRoIGBtZW1mZF9waW5fZm9saW9zYC4gSG1tLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBhbGxvY2F0aW9uIHBhdGguIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBmcmFnbWVudGF0aW9uLgoKVGhlIGtleSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBiZXlvbmQgdGhpcyBzcGVjaWZpYyBjYWxsIGNoYWluLCAqd2hlcmUgZWxzZSogaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYmVpbmcgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoYXQgd291bGQgaW5mb3JtIG15IGFuYWx5c2lzIG9mIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwNT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVx0XHRcdFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cdFx0XHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTY3LVxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE2OS1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtOTMtXG5tbS9tZW1mZC5jOjk0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxubW0vbWVtZmQuYy05NS1cdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIE1lbWZkX0FsbG9jX0ZvbGlvIFJhYmJpdCBIb2xlKioKCk9rYXksIHNvIHRoZSB0cmFpbCBzdGFydHMgd2l0aCBgbWVtZmRfYWxsb2NfZm9saW9gLCB0aGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uIFdoZXJlJiMzOTtzIGl0IGdldHRpbmcgY2FsbGVkIGZyb20/IFJpZ2h0LCBgbWVtZmRfcGluX2ZvbGlvc2AuIE5vdyB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB1c2VyIHNwYWNlIHJlYWNoIGBtZW1mZF9waW5fZm9saW9zYCBkaXJlY3RseT8gVGhlIGFuc3dlciBpcyB5ZXMsIHdlJiMzOTt2ZSBnb3QgYHVkbWFidWZgIGFuZCBgaW9tbXVmZGAgaW4gdGhlIG1peCwgc28gdGhhdCYjMzk7cyBhIHZlY3RvciBmb3IgcG90ZW50aWFsIGludGVyYWN0aW9uLgoKTGV0IG1lIGp1c3QgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlc2UgYXJlIGxvY2F0ZWQuIGBtZW1mZF9hbGxvY19mb2xpb2AgaXMgZGVmaW5lZCBpbiBgbW0vbWVtZmQuY2AsIGdvdCBpdC4gTm93IGxldCYjMzk7cyBkb3VibGUgY2hlY2sgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJIHNlZW0gdG8gcmVjYWxsIGl0IHJlc2lkaW5nIGluIGBtbS9ndXAuY2AsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGwgY2hhaW5zIHRvIGNvbnNpZGVyLiBPa2F5LCB0aGF0JiMzOTtzIHRoZSBpbW1lZGlhdGUgcGF0aCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cdGVuZCA9IHN0YXJ0ICYjNDM7IChwZ2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcdTAwMjZwZ29mZik7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cdGlmIChucl9mb2xpb3MgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVx0XHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XHRcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXHRcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXHQvKlxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1Olx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXHQgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cdTAwM2V1Zm9saW9zLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVx0XHRcdFx0ICAgbmZvbGlvcywgXHUwMDI2b2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM3OD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM3OS1cdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMzODA6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzODEtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcbi0tXG5tbS9ndXAuYy0xOTUtICpcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxuLS1cbm1tL2d1cC5jPTM0MTU9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XG4tLVxubW0vZ3VwLmMtMzQxNy0vKipcbm1tL2d1cC5jOjM0MTg6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxubW0vZ3VwLmMtMzQxOS0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXG4tLVxubW0vZ3VwLmMtMzQ0Mi0gKi9cbm1tL2d1cC5jOjM0NDM6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxubW0vZ3VwLmMtMzQ0NC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0zNTM5LX1cbm1tL2d1cC5jOjM1NDA6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XG5tbS9ndXAuYy0zNTQxLVxuLS1cbm1tL2d1cC5jLTM1NTEtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cbm1tL2d1cC5jOjM1NTI6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcbm1tL2d1cC5jLTM1NTMtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4tLVxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTEyOS1cdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXG5tbS9tZW1mZF9sdW8uYzoxMzA6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxubW0vbWVtZmRfbHVvLmMtMTMxLVx0ICogc2xvdHMuXG5tbS9tZW1mZF9sdW8uYy0xMzItXHQgKi9cbm1tL21lbWZkX2x1by5jOjEzMzpcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcbm1tL21lbWZkX2x1by5jLTEzNC1cdFx0XHRcdCAgICAgXHUwMDI2b2Zmc2V0KTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTI5MS1cdC8qXG5tbS9tZW1mZF9sdW8uYzoyOTI6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcbm1tL21lbWZkX2x1by5jLTI5My1cdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHVkbWFidWZgIGFuZCBgaW9tbXVmZGAgc2l0dWF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBib3RoIGxldmVyYWdpbmcgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJbnRlcmVzdGluZy4gVGhlIG5leHQgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kIGlzLCAmIzM0O0hvdyBhY2Nlc3NpYmxlIGlzIGB1ZG1hYnVmYD8gSXMgaXQganVzdCB0aHJvdWdoIGtlcm5lbCBmdW5jdGlvbnMgb3IgZG9lcyBpdCBleHBvc2UgaXRzZWxmIHRocm91Z2ggYSBzeXN0ZW0gY2FsbD8mIzM0Oy4gTG9va3MgbGlrZSBpdCBkb2VzLCB1c2luZyBgaW9jdGwoVURNQUJVRl9DUkVBVEUpYCBvciBzb21ldGhpbmcgc2ltaWxhci4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O2xsIG5lZWQgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jYC4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VURNQUJVRl9DUkVBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00ODk9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDk0LVx0c3dpdGNoIChpb2N0bCkge1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0OTU6XHRjYXNlIFVETUFCVUZfQ1JFQVRFOlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00OTYtXHRcdHJldCA9IHVkbWFidWZfaW9jdGxfY3JlYXRlKGZpbHAsIGFyZyk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5Ny1cdFx0YnJlYWs7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ5ODpcdGNhc2UgVURNQUJVRl9DUkVBVEVfTElTVDpcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDk5LVx0XHRyZXQgPSB1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0KGZpbHAsIGFyZyk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaD0yND1zdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfbGlzdCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaC0yOS1cbmluY2x1ZGUvdWFwaS9saW51eC91ZG1hYnVmLmg6MzA6I2RlZmluZSBVRE1BQlVGX0NSRUFURSAgICAgICBfSU9XKCYjMzk7dSYjMzk7LCAweDQyLCBzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUpXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oOjMxOiNkZWZpbmUgVURNQUJVRl9DUkVBVEVfTElTVCAgX0lPVygmIzM5O3UmIzM5OywgMHg0Mywgc3RydWN0IHVkbWFidWZfY3JlYXRlX2xpc3QpXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oLTMyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmM9Mjk9c3RhdGljIGludCBjcmVhdGVfdWRtYWJ1Zih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmMtNTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9kbWFidWZfaXRlci5jOjU5Olx0bG9jYWxfdWRtYWJ1ZiA9IGlvY3RsKGRldl91ZG1hYnVmLCBVRE1BQlVGX0NSRUFURSwgXHUwMDI2Y3JlYXRlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmMtNjAtXHRjbG9zZShkZXZfdWRtYWJ1Zik7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz01Nz1zdGF0aWMgaW50IGNyZWF0ZV91ZG1hYnVmX2xpc3QoaW50IGRldmZkLCBpbnQgbWVtZmQsIG9mZjY0X3QgbWVtZmRfc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTc2LVx0bGlzdC1cdTAwM2VmbGFncyA9IFVETUFCVUZfRkxBR1NfQ0xPRVhFQztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6Nzc6XHR1YnVmX2ZkID0gaW9jdGwoZGV2ZmQsIFVETUFCVUZfQ1JFQVRFX0xJU1QsIGxpc3QpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy03OC1cdGZyZWUobGlzdCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0xMzM9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE3NS1cdGNyZWF0ZS5zaXplICAgPSBnZXRwYWdlc2l6ZSgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoxNzY6XHRidWYgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFx1MDAyNmNyZWF0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE3Ny1cdGlmIChidWYgXHUwMDNlPSAwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTg1LVx0Y3JlYXRlLnNpemUgICA9IGdldHBhZ2VzaXplKCkvMjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTg2Olx0YnVmID0gaW9jdGwoZGV2ZmQsIFVETUFCVUZfQ1JFQVRFLCBcdTAwMjZjcmVhdGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xODctXHRpZiAoYnVmIFx1MDAzZT0gMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5NS1cdGNyZWF0ZS5zaXplICAgPSBzaXplO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoxOTY6XHRidWYgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFx1MDAyNmNyZWF0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5Ny1cdGlmIChidWYgXHUwMDNlPSAwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMjA4LVx0Y3JlYXRlLnNpemUgICA9IHNpemU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjIwOTpcdGJ1ZiA9IGlvY3RsKGRldmZkLCBVRE1BQlVGX0NSRUFURSwgXHUwMDI2Y3JlYXRlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMjEwLVx0aWYgKGJ1ZiBcdTAwM2MgMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTE0MT1zdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xODEtXHRjcmVhdGUuc2l6ZSA9IHNpemU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjE4MjpcdGN0eC1cdTAwM2VmZCA9IGlvY3RsKGN0eC1cdTAwM2VkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFx1MDAyNmNyZWF0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTE4My1cdGlmIChjdHgtXHUwMDNlZmQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBDb21wb25lbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCBgdWRtYWJ1ZmAgaXMgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gc2VlIGFib3V0IGBpb21tdWZkYC4gQWgsIHllcywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGNvcmUgc3Vic3lzdGVtIEkgbmVlZCB0byBiZSBjb25zaWRlcmluZy4gRXhwYW5kaW5nIG91dHdhcmRzLCBJIHNlZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGFsc28gYSByZWFjaGFibGUgZnVuY3Rpb24uIEdvb2QsIGdvb2QuIEJ1dCB3aGF0IGFib3V0IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgPyBBaCwgSSByZW1lbWJlciwgdGhhdCYjMzk7cyBjYWxsZWQgd2hlbiBgbWVtZmRfYWxsb2NfZm9saW9gIGFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8g4oCTIHRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBIb2xkIG9uLCBgbWVtZmRfYWxsb2NfZm9saW9gICpvbmx5KiBhbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIGlmIHRoZSBtZW1mZCBpcyBhIGh1Z2V0bGJmcyBmaWxlLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIC0gdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGJlaGF2aW91ci4gUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9tZW1mZC5jYCBhbmQgY2hlY2sgYG1lbWZkX2FsbG9jX2ZvbGlvYCBkaXJlY3RseS4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjg6XHRzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4gIDY5Olx0e1xuICA3MDpcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gIDcxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICA3MjpcdFx0Z2ZwX3QgZ2ZwX21hc2s7XG4gIDczOlx0XG4gIDc0Olx0XHRpZiAoaXNfZmlsZV9odWdlcGFnZXMobWVtZmQpKSB7XG4gIDc1Olx0XHRcdC8qXG4gIDc2Olx0XHRcdCAqIFRoZSBmb2xpbyB3b3VsZCBtb3N0IGxpa2VseSBiZSBhY2Nlc3NlZCBieSBhIERNQSBkcml2ZXIsXG4gIDc3Olx0XHRcdCAqIHRoZXJlZm9yZSwgd2UgaGF2ZSB6b25lIG1lbW9yeSBjb25zdHJhaW50cyB3aGVyZSB3ZSBjYW5cbiAgNzg6XHRcdFx0ICogYWxsb2MgZnJvbS4gQWxzbywgdGhlIGZvbGlvIHdpbGwgYmUgcGlubmVkIGZvciBhbiBpbmRlZmluaXRlXG4gIDc5Olx0XHRcdCAqIGFtb3VudCBvZiB0aW1lLCBzbyBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbWlncmF0ZWQgYXdheS5cbiAgODA6XHRcdFx0ICovXG4gIDgxOlx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKG1lbWZkKTtcbiAgODI6XHRcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcbiAgODM6XHRcdFx0aW50IGVyciA9IC1FTk9NRU07XG4gIDg0Olx0XHRcdGxvbmcgbnJfcmVzdjtcbiAgODU6XHRcbiAgODY6XHRcdFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4gIDg3Olx0XHRcdGdmcF9tYXNrIFx1MDAyNj0gfihfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSk7XG4gIDg4Olx0XHRcdGlkeCBcdTAwM2VcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcbiAgODk6XHRcbiAgOTA6XHRcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcbiAgOTE6XHRcdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApXG4gIDkyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIobnJfcmVzdik7XG4gIDkzOlx0XG4gIDk0Olx0XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG4gIDk1Olx0XHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuICA5NjpcdFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuICA5NzpcdFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4gIDk4Olx0XHRcdGlmIChmb2xpbykge1xuICA5OTpcdFx0XHRcdHUzMiBoYXNoO1xuIDEwMDpcdFxuIDEwMTpcdFx0XHRcdC8qXG4gMTAyOlx0XHRcdFx0ICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuXG4gMTAzOlx0XHRcdFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xuIDEwNDpcdFx0XHRcdCAqIHBhZ2VzLiBQYXNzIDAgYXMgYWRkcl9oaW50IHNpbmNlIHRoaXMgaXMgbm90IGEgZmF1bHRpbmcgcGF0aFxuIDEwNTpcdFx0XHRcdCAqICBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgYSB1c2VyIHZpcnR1YWwgYWRkcmVzcyB5ZXQuXG4gMTA2Olx0XHRcdFx0ICovXG4gMTA3Olx0XHRcdFx0Zm9saW9femVyb191c2VyKGZvbGlvLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NjcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG1lbWZkX2FsbG9jX2ZvbGlvYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB5ZXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBpc3N1ZS4gTXkgaW5pdGlhbCByZWFkIGNvbmZpcm1zIHRoYXQgYG1lbWZkX2FsbG9jX2ZvbGlvYCAqZG9lcyogaW5kZWVkIGFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpbyB3aGVuIGRlYWxpbmcgd2l0aCBhIG1lbWZkIGZsYWdnZWQgZm9yIGh1Z2VwYWdlcyDigJMgcHJlY2lzZWx5IGFzIGludGVuZGVkLiBUaGlzIG9jY3VycyBmb2xsb3dpbmcgYSBjYWxsIHRvIGBtZW1mZF9waW5fZm9saW9zYCBvbiBhIGh1Z2V0bGJmcyBtZW1mZC4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIGluIGEgbWlzc2luZyBjYWxsIHRvIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pYC4gVGhpcyBtZWFucyB0aGF0IGlmIGEgZm9saW8gYWxsb2NhdGVkIGluIHRoaXMgbWFubmVyIGdldHMgZnJlZWQsIHRoZSBuZWNlc3NhcnkgcmVzZXJ2YXRpb24gaXNuJiMzOTt0IGJlaW5nIHByb3Blcmx5IHJlc3RvcmVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGxlYWthZ2UgYW5kIHBvc3NpYmxlIGZyYWdtZW50YXRpb24gaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNyaXRpY2FsIG9uZSBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgbmVlZHMgdG8gYmUgYnVsbGV0cHJvb2YuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgZnV6emluZyB0aGlzLiBZZXMsIGFic29sdXRlbHksIGl0JiMzOTtzIHdhcnJhbnRlZCBnaXZlbiB0aGUgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzcG90IHdlIHNob3VsZCBwdXQgdW5kZXIgc2NydXRpbnkuIE5vdywgd2hhdCYjMzk7cyB0aGUgbW9zdCByZWxldmFudCBmb2N1cyBzeW1ib2wgaGVyZT8gQWgsICp0aGF0KiB3b3VsZCBiZSBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gSGFuZyBvbiwgaXMgdGhpcyBmdW5jdGlvbiBleHBvcnRlZCBvciBub24tc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjay4gTGV0JiMzOTtzIHB1bGwgdXAgYG1tL2h1Z2V0bGIuY2AgdG8gY29uZmlybSBpdHMgc2NvcGUgYW5kIHVzYWdlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgdGFyZ2V0IGNhbiBiZSBkaXJlY3RseSB0YXJnZXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLgpZb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS4KRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsCnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDk0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IHN0YXJ0ZWQgYnkgZ3JlcHBpbmcgZm9yIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLiBHb29kLCBpdCYjMzk7cyBub3Qgc3RhdGljLCBhbmQgSSBmb3VuZCBpdCBpbiBgbW0vaHVnZXRsYi5jYC4gRXhjZWxsZW50LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIHNlZSwgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBgbWVtZmRfYWxsb2NfZm9saW9gLiBPa2F5LCB0aGF0JiMzOTtzIGEgdXNlZnVsIGNvbm5lY3Rpb24uIEFyZSB0aGVyZSBvdGhlciBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXI/IEFoLCB5ZXMsIGBtZW1mZF9hbGxvY19mb2xpb2AgaXRzZWxmIGlzIGEgc29saWQgc3ltYm9sIHRvIGtlZXAgaW4gZm9jdXMsIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AgbG9va3MgcHJvbWlzaW5nIHRvby4KCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGFnYWluIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IHN0YXRpYzoKCmBgYGMKc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsCgkJbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKQpgYGAKCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIHdoYXQgZG8gSSBuZWVkPyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBmb3IgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYW5kIGFsc28gZm9yIGBpc19maWxlX2h1Z2VwYWdlc2AuIFRpbWUgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIG9yIG1heWJlIGV2ZW4gYGZzL0tjb25maWdgIHRvIHBpbiBkb3duIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTEyOT1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTM0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjEzNTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTEzOC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Mi1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDM6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTQ1LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Njpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTQ3LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTQ5LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE1MDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE1MS1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbi0tXG5tbS9LY29uZmlnLTY5Ni1cbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy02OTgtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjY2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGV4cGxpY2l0IGFib3V0IHRoZXNlIGRlcGVuZGVuY2llcy4gU28sIHRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvZiBgSFVHRVRMQkZTYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgSHVnZVRMQiBmaWxlc3lzdGVtIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZvciB0aGUgdGFzayBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MzIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBtZW1mZF9waW5fZm9saW9zYCBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEhVR0VUTEJGU2AgbWlnaHQgYmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gaGVyZS4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3YXJyYW50cyBhIGRlZXBlciBkaXZlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9uLiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9ndXAuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIGl0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZXhlY3V0ZWQgYmFzZWQgb24gKmFueSoga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSSBuZWVkIHRvIGtub3cgaWYgaXRzIGJlaGF2aW9yIGlzIGNvbnRpbmdlbnQgb24gdGhpbmdzIGxpa2UgaHVnZSBwYWdlcywgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dGluZ3MuIFRvIGNsYXJpZnkgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgbW0vZ3VwLmNgIGl0c2VsZi4gSeKAmW0gZ29pbmcgdG8gcG9yZSBvdmVyIHRoYXQgY29kZSBub3cgYW5kIHZlcmlmeSBpZiBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgYWZmZWN0cyB0aGUgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yIG9mIGBtZW1mZF9waW5fZm9saW9zYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0aGF0IHdvdWxkIGxpbmsgaXRzIHVzZSB0byBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cdGVuZCA9IHN0YXJ0ICYjNDM7IChwZ2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcdTAwMjZwZ29mZik7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cdGlmIChucl9mb2xpb3MgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVx0XHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XHRcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXHRcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXHQvKlxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1Olx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXHQgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cdTAwM2V1Zm9saW9zLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVx0XHRcdFx0ICAgbmZvbGlvcywgXHUwMDI2b2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM3OD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM3OS1cdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMzODA6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzODEtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcbi0tXG5tbS9ndXAuYy0xOTUtICpcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxuLS1cbm1tL2d1cC5jPTM0MTU9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XG4tLVxubW0vZ3VwLmMtMzQxNy0vKipcbm1tL2d1cC5jOjM0MTg6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxubW0vZ3VwLmMtMzQxOS0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXG4tLVxubW0vZ3VwLmMtMzQ0Mi0gKi9cbm1tL2d1cC5jOjM0NDM6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxubW0vZ3VwLmMtMzQ0NC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0zNTM5LX1cbm1tL2d1cC5jOjM1NDA6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XG5tbS9ndXAuYy0zNTQxLVxuLS1cbm1tL2d1cC5jLTM1NTEtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cbm1tL2d1cC5jOjM1NTI6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcbm1tL2d1cC5jLTM1NTMtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4tLVxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTEyOS1cdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXG5tbS9tZW1mZF9sdW8uYzoxMzA6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxubW0vbWVtZmRfbHVvLmMtMTMxLVx0ICogc2xvdHMuXG5tbS9tZW1mZF9sdW8uYy0xMzItXHQgKi9cbm1tL21lbWZkX2x1by5jOjEzMzpcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcbm1tL21lbWZkX2x1by5jLTEzNC1cdFx0XHRcdCAgICAgXHUwMDI2b2Zmc2V0KTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTI5MS1cdC8qXG5tbS9tZW1mZF9sdW8uYzoyOTI6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcbm1tL21lbWZkX2x1by5jLTI5My1cdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtleSBTeW1ib2xzIGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKgoKT2theSwgc28gYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgYSBrbm93biBxdWFudGl0eS4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGlzIHdoZXRoZXIgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBhbHNvIGV4cG9ydGVkLiBIbW0sIG5vLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBtbS9tZW1mZC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtZmQuaGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgdXNhZ2UuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzZWVpbmcgYG1lbWZkX2FsbG9jX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbSBgbW0vZ3VwLmNgLiBZZXAsIHRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoYXQgZmVlbHMgbGlrZSBhIHNvbGlkIGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBzZWXigKYgSSBhbHNvIGtub3cgdGhhdCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpcyByZWxldmFudCBoZXJlLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoYXQmIzM5O3MgZXhwb3J0ZWQuIE5vcGUsIG5vdCBleHBvcnRlZCwgYnV0IGl0IGlzICpub24tc3RhdGljKi4gT2theSwgc28gYm90aCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBhbmQgYG1lbWZkX2FsbG9jX2ZvbGlvYCBhcmUgcHJpbWUgY2FuZGlkYXRlcy4gQWgsIGEgc21hbGwgZXBpcGhhbnkhIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzIGNhbGxlZCBmcm9tIGBtZW1mZF9hbGxvY19mb2xpb2AsIGFuZCBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGBtZW1mZF9waW5fZm9saW9zYC4gVGhlcmVmb3JlLCBpbmNsdWRpbmcgYG1lbWZkX3Bpbl9mb2xpb3NgIHdpbGwgZ2l2ZSBtZSBnb29kIGluc2lnaHQuIFNvIGl0JiMzOTtzIGJlc3QgdG8gbG9vayBhdCBhbGwgdGhyZWUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS9tZW1mZC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1mZF9hbGxvY19mb2xpb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtZmQuaD0xMD1leHRlcm4gbG9uZyBtZW1mZF9mY250bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IGFyZyk7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0xMi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjctfVxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTI5LXtcbi0tXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5tbS9ndXAuYy0zNTE4LVx0XHRcdGlmICghbnJfZm91bmQpIHtcbm1tL2d1cC5jOjM1MTk6XHRcdFx0XHRmb2xpbyA9IG1lbWZkX2FsbG9jX2ZvbGlvKG1lbWZkLCBzdGFydF9pZHgpO1xubW0vZ3VwLmMtMzUyMC1cdFx0XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY3LSAqL1xubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG5tbS9tZW1mZC5jLTY5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG1lbWZkX2FsbG9jX2ZvbGlvYCBhbmQgVURNQUJVRioqCgpSaWdodCwgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBJIHN1c3BlY3RlZC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGVuc3VyZSB0aGF0IHRoZSBgVURNQUJVRmAgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZGV0YWlscyB3aXRoaW4gdGhlIGBVRE1BQlVGYCBjb25maWcsIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5LCBiZWNhdXNlIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyB3b3JrIHRvZ2V0aGVyIGlzIGNlbnRyYWwgdG8gdGhlIGRlc2lnbiBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVURNQUJVRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTMyLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDt1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgVURNQUJVRiBhbmQgSU9NTVVGRCBmb3IgT3B0aW1pemVkIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIGl0IHNlZW1zIGxpa2UgbGV2ZXJhZ2luZyBgVURNQUJVRmAgaXMgYSBzb2xpZCBwYXRoIGZvcndhcmQuIFNwZWNpZmljYWxseSwgZW5hYmxpbmcgYHVkbWFidWZfcGluX2ZvbGlvc2AgbG9va3MgcHJvbWlzaW5nIHRvIGdhaW4gZGlyZWN0IGFjY2VzcyB0byB0aGUgbWVtb3J5IHZpYSBgVURNQUJVRmAuIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGF0IGFwcHJvYWNoIGFsaWducyB3aXRoIHRoZSBwZXJmb3JtYW5jZSBnb2Fscy4KCkZ1cnRoZXJtb3JlLCBJJiMzOTttIGNvbnNpZGVyaW5nIGVuYWJsaW5nIGBJT01NVUZEYCBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGlzLiBJdCBtaWdodCBvZmZlciBzb21lIGFkZGl0aW9uYWwgZmxleGliaWxpdHkgb3IgY29udHJvbCwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhIEkmIzM5O20gaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gd2VpZ2ggdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiBgSU9NTVVGRGAgYWdhaW5zdCBgVURNQUJVRmAgYW5kIGhvdyB0aGV5JiMzOTtkIGludGVncmF0ZSB3aXRoIG15IGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgYmVuY2htYXJrcyB0byBtYWtlIGEgZnVsbHkgaW5mb3JtZWQgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT01NVUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZz03PWNvbmZpZyBJT01NVV9BUElcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWctOS1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoxMDpjb25maWcgSU9NTVVGRF9EUklWRVJcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMS1cdGJvb2xcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mjpjb25maWcgSU9NTVVGRF9EUklWRVJfQ09SRVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMy1cdGJvb2xcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy01LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Njpjb25maWcgSU9NTVVGRFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0lPTU1VIFVzZXJzcGFjZSBBUElcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0xOD1pZiBJT01NVUZEXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoxOTpjb25maWcgSU9NTVVGRF9WRklPX0NPTlRBSU5FUlxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjAtXHRib29sIFwmIzM0O0lPTU1VRkQgcHJvdmlkZXMgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMzgtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzozOTpjb25maWcgSU9NTVVGRF9URVNUXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SU9NTVUgVXNlcnNwYWNlIEFQSSBUZXN0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgSU9NTVVGRGAgaGVyZSwgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjb25zaWRlci4gQnV0IHJlYWxseSwgdGhlIG9uZXMgSSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYEhVR0VUTEJGU2AgYW5kIGBVRE1BQlVGYC4gVGhvc2UgYXJlIHRoZSBiaWcgcGxheWVycywgdGhlIG9uZXMgdGhhdCBvZnRlbiBtYWtlIG9yIGJyZWFrIG15IHNldHVwLiBGaXJzdCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgSFVHRVRMQkZTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgcmVsaWVzIG9uIG90aGVyIG9wdGlvbnMgYmVpbmcgZW5hYmxlZCBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkLiBHb3R0YSBtYXAgb3V0IHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYXZvaWQgYW55IHN1cnByaXNlcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEtjb25maWcgZm9yIEhVR0VUTEJGUyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24uIFdoZXJlIGRvZXMgdGhlIGtlcm5lbCBkZWZpbmUgdGhhdD8gUmlnaHQsIGBmcy9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgZmlsZXN5c3RlbS1yZWxhdGVkIG9wdGlvbnMuIExldCYjMzk7cyBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBjb25maWcgSFVHRVRMQkZTYCBkaXJlY3RpdmUsIGxpa2VseSB3aXRoIHNvbWUgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBldmVuIHNvbWUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgaXRzIHB1cnBvc2UgYW5kIHVzZS4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgaWYgYW55IG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMgb3IgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIG5lYXJieSwganVzdCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiAyNjU6XHRcdGRlZmF1bHQgblxuIDI2NjpcdFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgbXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBob3cgdGhleSByZWxhdGUgdG8gdGhlIGh1Z2UgcGFnZXMuIEl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYEhVR0VUTEJGU2AgaXMgdGhlICpwcmltYXJ5KiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG9mIGludGVyZXN0IGJlY2F1c2UgaXRzIHByZXNlbmNlIGlzIGdhdGVkIG9uIHRoZSBtb3JlIGZ1bmRhbWVudGFsIGhhcmR3YXJlIHJlcXVpcmVtZW50IGRlZmluZWQgYnkgYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYC4gU2luY2UgdGhlIGFyY2hpdGVjdHVyZSAqbXVzdCogc3VwcG9ydCBodWdlIHBhZ2VzIHRvIGVuYWJsZSBgSFVHRVRMQkZTYCwgdGhhdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbiBmaXJzdCBhbmQgZm9yZW1vc3QuCgpOb3csIEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMgYSBiaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBMZXQmIzM5O3MgbG9vayBhdCBgVURNQUJVRmAuIEkga25vdyB0aGlzIGlzIHVzZWQgYnkgc2V2ZXJhbCBkbWEtYnVmIGRyaXZlcnMuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHRyZWUuCkkmIzM5O2xsIGdvIGNoZWNrIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgdG8gc3RhcnQsIGFuZCBzZWUgaWYgaXQgaW50ZXJhY3RzIHdpdGggbXkgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMzpcdGNvbmZpZyBVRE1BQlVGXG4gIDM0Olx0XHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiAgMzU6XHRcdGRlZmF1bHQgblxuICAzNjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICAzNzpcdFx0ZGVwZW5kcyBvbiBNRU1GRF9DUkVBVEUgfHwgQ09NUElMRV9URVNUXG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1NVVxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBBIGRyaXZlciB0byBsZXQgdXNlcnNwYWNlIHR1cm4gbWVtZmQgcmVnaW9ucyBpbnRvIGRtYS1idWZzLlxuICA0MTpcdFx0ICBRZW11IGNhbiB1c2UgdGhpcyB0byBjcmVhdGUgaG9zdCBkbWFidWZzIGZvciBndWVzdCBmcmFtZWJ1ZmZlcnMuXG4gIDQyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTE1CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYFVETUFCVUZgIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBmb2N1cyBpcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYFVETUFCVUZgIHJlbGllcyBoZWF2aWx5IG9uIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBNRU1GRF9DUkVBVEVgLCB3aGljaCwgaW4gdHVybiwgcG9pbnRzIGRpcmVjdGx5IHRvIGBIVUdFVExCRlNgIGJlaW5nIGEga2V5IGNvbmZpZ3VyYXRpb24gZWxlbWVudCBhbG9uZ3NpZGUgYFVETUFCVUZgIGl0c2VsZi4gU28sIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBhbmQgYFVETUFCVUZgIGFyZSB0aGUgd2lubmVycyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhc3BlY3QuIFRoZSBrZXkgc3ltYm9scyBpZGVudGlmaWVkIOKAkyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCwgYG1lbWZkX2FsbG9jX2ZvbGlvYCwgYW5kIGBtZW1mZF9waW5fZm9saW9zYCDigJMgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0IHRoZSBhcmVhIG9mIGNvbmNlcm4uIFRoZSBjcnV4IG9mIHRoZSBmaXggaXMgdGhhdCBhIGNydWNpYWwgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgY2FsbCB3YXMgbWlzc2luZyB3aXRoaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgc3BlY2lmaWNhbGx5IHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBoZWFydCBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIdWdldGxiIHN1YnN5c3RlbS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSBpcyB0aGUgdXNlcnNwYWNlIHJlYWNoYWJpbGl0eSB2aWEgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJZiBhIHVzZXIgY2FuIHVzZSBgdWRtYWJ1ZmAgb3IgZXZlbiBgaW9tbXVmZGAgaW4gY29uanVuY3Rpb24gd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCwgdGhleSBjYW4gaGl0IHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBtYWtpbmcgdGhpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGVmZmVjdGl2ZWx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgcmVzZXJ2YXRpb24gbGVhayBvciBjb3JydXB0aW9uIHNjZW5hcmlvIHRyaWdnZXJlZCB0aHJvdWdoIHRoaXMgdXNlci1zcGFjZSBpbnRlcmZhY2UuIFRoaXMgdHlwZSBvZiBwYXRjaCBpcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBsaWtlbHkgZ28gdW5ub3RpY2VkIGluIGRheS10by1kYXkgdXNlLCBidXQgd2hlbiBwdXNoZWQgdG8gaXRzIGxpbWl0cyBjb3VsZCBjYXVzZSBhbiBpc3N1ZSB0aGF0IGNvdWxkIGJlIGV4cGxvaXRhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1VETUFCVUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7bWVtZmRfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgY2FsbCBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCB3aGVuIGEgZm9saW8gaXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoaHVnZXRsYikgdGhhdCBhZmZlY3RzIGhvdyByZXNlcnZhdGlvbnMgYXJlIHJlc3RvcmVkIHdoZW4gZm9saW9zIGFyZSBmcmVlZC4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYG1lbWZkX3Bpbl9mb2xpb3NgIChlLmcuLCB1c2luZyBgdWRtYWJ1ZmAgb3IgYGlvbW11ZmRgIHdpdGggYSBodWdldGxiZnMgbWVtZmQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDttZW1mZF9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZWJjOTY2M2E5ZTI3N2VlNzBiYjk1NDkwY2JkNTQyMTVjN2JhMjgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDI6NDE6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjE3OCw4ICYjNDM7MjE3OCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCWZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLCBwcmVmZXJyZWRfbmlkLAogCQkJCQkgICAgICAgbm1hc2spOwotCWlmIChmb2xpbykKJiM0MzsJaWYgKGZvbGlvKSB7CiYjNDM7CQlmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pOwogCQloLSZndDtyZXN2X2h1Z2VfcGFnZXMtLTsKJiM0MzsJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAlyZXR1cm4gZm9saW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2V0bGIgRm9saW8gUmVzZXJ2ZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGluIGBtbS9odWdldGxiLmNgLiBJdCYjMzk7cyBhZGRpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7YCB3aGVuIHRoZSBgZm9saW9gIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBsb29rIGludG8gd2hhdCBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBhY3R1YWxseSAqZG9lcyouIE15IGd1dCBmZWVsaW5nIGlzIGl0JiMzOTtzIHByb2JhYmx5IGEgZmxhZyBzZXR0aW5nIG9wZXJhdGlvbiBvbiB0aGUgZm9saW8gc3RydWN0dXJlIGl0c2VsZi4KCkhtbSwgdGhpcyBpbml0aWFsbHkgZG9lc24mIzM5O3Qgc2NyZWFtICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSYjMzQ7IHRvIG1lLiBJdCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBzcXVhcmVseSBpbiB0aGUgcmVhbG0gb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaHVnZXRsYiByZXNlcnZlcyBhbmQgZm9saW8gZmxhZ3MuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaC4gTGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLgoKSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBoZXJlLiBUaGUgcGF0Y2ggKmp1c3QqIHNldHMgYSBmbGFnIG9uIGEgYGZvbGlvYC4gU2luY2UgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCB0aGlzIGlzIGp1c3QgYSBmbGFnIHNldHRpbmcuLi4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoaXMgaXNuJiMzOTt0IEtBU0FOIHRlcnJpdG9yeSwgZWl0aGVyOyB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCBPT0IgYWNjZXNzLCBVc2UtQWZ0ZXItRnJlZSwgb3IgYW55IG9mIHRob3NlIGtpbmRzIG9mIGlzc3Vlcy4KCkZyb20gdGhpcyBxdWljayBnbGFuY2UsIHRoaXMgbG9va3MgbGlrZSBhIGJ1ZyBmaXggcmVsYXRlZCB0byBodWdldGxiIHJlc2VydmVzIOKAkyBwb3NzaWJseSBhIGxlYWsgb3IgYWNjb3VudGluZyBlcnJvci4gQ3J1Y2lhbGx5LCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gTm8gbW9kaWZpY2F0aW9ucyBvZiBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgZWl0aGVyLgoKSSB0aGluayBJJiMzOTtsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlICpjb21wbGV0ZWx5KiBzdXJlLiBJdCYjMzk7cyBwcm9iYWJseSBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGJpdC1zZXQgb3BlcmF0aW9uLiBCdXQgSSYjMzk7bSBmZWVsaW5nIGZhaXJseSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIxNjg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxubW0vaHVnZXRsYi5jLTIxODEtXHRpZiAoZm9saW8pIHtcbm1tL2h1Z2V0bGIuYzoyMTgyOlx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTIxODMtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTI1NTA9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI1OTItXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNTkzOlx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNTk0LVx0XHR9IGVsc2UgaWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTI2MTMtXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNjE0Olx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNjE1LVx0XHR9IGVsc2Uge1xuLS1cbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODc0LVx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcbm1tL2h1Z2V0bGIuYzoyODc1Olx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI4NzYtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzI4LVx0XHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbm1tL2h1Z2V0bGIuYzo1MzI5Olx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTMzMC1cdFx0XHQvKiBSZXNlcnZhdGlvbiB0byBiZSBhZGp1c3RlZCBhZnRlciB0aGUgc3BpbiBsb2NrICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTUKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRm9saW8gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgZXNzZW50aWFsbHkganVzdCBhIHNpbXBsZSBmbGFnIHRoYXQmIzM5O3MgYmVpbmcgc2V0IG9uIGEgZm9saW8uIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYWNjb3VudGluZy4gVGhpcyBmbGFnJiMzOTtzIHJvbGUgaXMgY2xlYXJseSBkZWZpbmVkOiBpdCYjMzk7cyB1c2VkIHRvIHJlc3RvcmUgdGhvc2UgaHVnZXRsYiByZXNlcnZlcyBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igb3IgZHVyaW5nIGFuIHVubWFwIG9wZXJhdGlvbi4gTXkgYW5hbHlzaXMgc3VnZ2VzdHMgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGNyb3BwaW5nIHVwIGhlcmUuIFRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToxOC4wODkxMTczMTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1NTEyNDU2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJVRE1BQlVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlXCIsXG4gICAgXCJtZW1mZF9hbGxvY19mb2xpb1wiLFxuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjE4LjA4OTEyMTgyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDE5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2ViYzk2NjNhOWUyNzdlZTcwYmI5NTQ5MGNiZDU0MjE1YzdiYTI4M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMjo0MToxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCBkODg0OTE5NmFkOWIxLi5mYWRmZTFkYmMwNDdhIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yMTc4LDggKzIxNzgsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcbiBcXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzaywgcHJlZmVycmVkX25pZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5tYXNrKTtcXG4tXFx0aWYgKGZvbGlvKVxcbitcXHRpZiAoZm9saW8pIHtcXG4rXFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4gXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuK1xcdH1cXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToxOC41Mzc3Nzg4MDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzA0OTYyNTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJVRE1BQlVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlXCIsXG4gICAgXCJtZW1mZF9hbGxvY19mb2xpb1wiLFxuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlYmM5NjYzYTllMjc3ZWU3MGJiOTU0OTBjYmQ1NDIxNWM3YmEyODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMjo0MToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMjE3OCw4ICsyMTc4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4gXHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4tXHRpZiAoZm9saW8pXG4rXHRpZiAoZm9saW8pIHtcbitcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbiBcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbitcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MTguNTM3Nzc5OTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MDYxODE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbS9odWdldGxiLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIGNoYW5nZSB0byB0aGUgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgZnVuY3Rpb24uIFRoZSBrZXkgYWRkaXRpb24gaGVyZSBpcyBhIGNhbGwgdG8gYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbylgIGFmdGVyIGEgZm9saW8gaXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkLiBUaGlzIHBpcXVlcyBteSBpbnRlcmVzdCBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBmdW5jdGlvbiBjYWxsLiBXaGF0IGV4YWN0bHkgaXMgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZG9pbmc/IFdoYXQga2luZCBvZiBzdGF0ZSBpcyBpdCBtYW5pcHVsYXRpbmc/IFdoYXQgaXMgXCJyZXNlcnZlXCIgcmVmZXJyaW5nIHRvIGluIHRoaXMgY29udGV4dD9cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIG5lZWQgdG8gcmVhZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gVGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gV2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFdoYXQncyB0aGUgb3ZlcmFsbCBmbG93IG9mIGV4ZWN1dGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIGFuZCBpbXBhY3Qgb2YgdGhpcyBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgaHVnZSBwYWdlIG1hbmFnZW1lbnQgc2NoZW1lLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZvbGlvIHJlc2VydmVzLCBhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjIyLjMwODQwMDQ5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0MTIyMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDU9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVxcdFxcdFxcdFxcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEzNDphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cXHRcXHRcXHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTIxNDQ9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjE2Ny1cXG5tbS9odWdldGxiLmM6MjE2ODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9odWdldGxiLmMtMjE2OS1cXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4tLVxcbm1tL21lbWZkLmMtOTMtXFxubW0vbWVtZmQuYzo5NDpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxcbm1tL21lbWZkLmMtOTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG51bWFfbm9kZV9pZCgpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToyMy45MzI1MjYxNzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc5NzU4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBIdWdlVExCIEZvbGlvIFJlc2VydmF0aW9uKipcblxuT2theSwgc28gYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBjYWxsaW5nIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcmVzZXJ2aW5nIHNwYWNlIGZvciB0aGVzZSBIdWdlVExCIGZvbGlvcy4gTXkgZm9jdXMgbm93IGlzIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGVyZS4gV2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc3RvcmUgcmVzZXJ2ZSBmdW5jdGlvbmFsaXR5PyBMZXQncyBnZXQgZG93biB0byB0aGUgZGV0YWlscyBvZiBob3cgdGhpcyByZXNlcnZhdGlvbiBpcyBlc3RhYmxpc2hlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZVRMQiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MjcuNDEyMjg3MTc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc3Nzk2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODEtXFx0aWYgKGZvbGlvKSB7XFxubW0vaHVnZXRsYi5jOjIxODI6XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjE4My1cXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTUwPXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1OTItXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI1OTM6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjU5NC1cXHRcXHR9IGVsc2UgaWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTI2MTMtXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI2MTQ6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjYxNS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4MzI9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjg3NC1cXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xcbm1tL2h1Z2V0bGIuYzoyODc1OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI4NzYtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9NTIxMD12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTMyOC1cXHRcXHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbm1tL2h1Z2V0bGIuYzo1MzI5OlxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUzMzAtXFx0XFx0XFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToyOC45OTAwNzEzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjk5NTA4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYC4gUHJvYmFibHkgZGVhbGluZyB3aXRoIGh1Z2VwYWdlcyBpbiB0aGUga2VybmVsLCBsaWtlbHkgcmVsYXRlZCB0byByZXN0b3JpbmcgcmVzZXJ2YXRpb25zLiBJJ20gZ3Vlc3NpbmcgaXQncyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBidXQgbGV0J3MgYmUgcHJlY2lzZS4gVGltZSB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHN5bWJvbCBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBkZWNsYXJlZCBhbmQgd2hhdCBjb250ZXh0IGl0J3Mgb3BlcmF0aW5nIGluLiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biBpdHMgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UsIGdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjZW50cmFsIHRvIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgaHVnZXBhZ2UgcmVzZXJ2YXRpb25zLiBJIGV4cGVjdCBpdCdzIGdvaW5nIHRvIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRob3NlIHJlc2VydmF0aW9ucyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIHJlc3RvcmluZyB0aGVtLCBtYXliZSBhZnRlciBhIHN5c3RlbSBzdXNwZW5kIG9yIG90aGVyIGV2ZW50IHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgc3RhdGUgY2hhbmdlcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc2NoZW1lLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYyOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjMzLjMyMDAyNDgyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5MjcxMzAwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MTozNC43ODkzMDI3ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjczNjMzODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXaGVyZSdzIHRoZSBEZWZpbml0aW9uIEJ1cmllZD8qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpc3N1ZS4uLiBhbmQgdGhlIGZpcnN0IHBsYWNlIG15IG1pbmQgZ29lcyBpcywgXCJXaGVyZSAqZXhhY3RseSogaXMgdGhpcyB0aGluZyBkZWZpbmVkP1wiIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhlIGRlZmluaXRpb24gSSdtIGxvb2tpbmcgZm9yIGlzIGxpa2VseSBoaWRpbmcgd2l0aGluIHRoZSBkZXB0aHMgb2YgdGhlIGtlcm5lbCdzIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIE1vcmUgcHJlY2lzZWx5LCBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgZWl0aGVyIGRlZmluZWQgdmlhIGEgcHJlcHJvY2Vzc29yIG1hY3Jv4oCUdGhlIGdvb2Qgb2xkIGAjZGVmaW5lYCByb3V0ZeKAlG9yIHBlcmhhcHMgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdG9wIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEh1Z2VUTEIgaW50ZXJuYWxzLCBzbyB0aGF0J3Mgd2hlcmUgSSdkIHN0YXJ0IGRpZ2dpbmcuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MzguNDYyOTM5ODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNzMzNTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjE2OD1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMTgxLVxcdGlmIChmb2xpbykge1xcbm1tL2h1Z2V0bGIuYzoyMTgyOlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTIxODMtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9MjU1MD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTkyLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNTkzOlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI1OTQtXFx0XFx0fSBlbHNlIGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjEzLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNjE0OlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI2MTUtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI4NzQtXFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcXG5tbS9odWdldGxiLmM6Mjg3NTpcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yODc2LVxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzMjgtXFx0XFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6NTMyOTpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01MzMwLVxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MzkuOTE0NjgwMzM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDk4ODM0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFJlc2VydmUgUmVzdG9yZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gRnJvbSB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBzb21lIEh1Z2VUTEIgcmVzb3VyY2UgcmVzZXJ2YXRpb24gbmVlZHMgdG8gYmUgYnJvdWdodCBiYWNrIGludG8gcGxheS4gVGhlIHF1ZXN0aW9uIGlzLCBob3cncyB0aGlzIHJlc3RvcmF0aW9uIGhhbmRsZWQgaW4gdGhlIGtlcm5lbD8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGUsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBkZWZpbml0aW9ucyBmb3IgSHVnZVRMQiBtYW5hZ2VtZW50IGFyZSBrZXB0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYSBmdW5jdGlvbiBvciBtYWNybyBkZWFsaW5nIHdpdGggXCJyZXN0b3JlX3Jlc2VydmUuXCIgVGhhdCBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBiZWhpbmQgcmVjb3ZlcmluZyB0aGUgcmVzZXJ2ZWQgcmVzb3VyY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njc5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6NDMuODY0NTY1ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDA5ODQ5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVzdG9yZV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NDk4PVRoaXMgaXMgYSBzcGVjaWFsIHdyYXBwZXIgcm91dGluZSB0byBoZWxwIGZhY2lsaXRhdGUgcmVzZXJ2YXRpb24gY2xlYW51cFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NDk5Om9uIGVycm9yIHBhdGhzLiAgSXQgaXMgb25seSBjYWxsZWQgZnJvbSB0aGUgcm91dGluZSByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoKS5cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTUwMC1UaGlzIHJvdXRpbmUgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHZtYV9uZWVkc19yZXNlcnZhdGlvbiBpbiBhbiBhdHRlbXB0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTUzMj1iZSAgaGlnaGVyIHRoYW4gaXQgc2hvdWxkIGFuZCBwcmV2ZW50IGFsbG9jYXRpb24gb2YgYSBwcmUtYWxsb2NhdGVkIHBhZ2UuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01MzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1MzQ6VGhlIHJvdXRpbmUgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKCkgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uLiAgSXRcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTUzNS1pcyBmYWlybHkgd2VsbCBkb2N1bWVudGVkLiAgVGhlIGludGVudGlvbiBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gcmVzdG9yZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01Mzg9Y291bnQgYWZ0ZXIgdGhlIHBhZ2UgaXMgZnJlZWQuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01MzktXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NDA6VGhlIHJvdXRpbmUgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yIGl0c2VsZiBtYXkgZW5jb3VudGVyIGVycm9ycyB3aGlsZVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTQxLWF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgcmVzZXJ2YXRpb24gbWFwIGVudHJ5LiAgSW4gdGhpcyBjYXNlLCBpdCB3aWxsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTU0OD1UaGVyZSBpcyBzb21lIGNvZGUgKG1vc3Qgbm90YWJseSB1c2VyZmF1bHRmZCkgd2hpY2ggY2FuIG5vdCBjYWxsXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NDk6cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yLiAgSW4gdGhpcyBjYXNlLCBpdCBzaW1wbHkgbW9kaWZpZXMgdGhlIFBhZ2VQcml2YXRlXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01NTAtc28gdGhhdCBhIHJlc2VydmF0aW9uIHdpbGwgbm90IGJlIGxlYWtlZCB3aGVuIHRoZSBodWdlIHBhZ2UgaXMgZnJlZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0zMzE9cmVnaW9uX2NvdW50KCnlnKjop6PpmaTnp4HmnInlt6jpobXmmKDlsITml7booqvosIPnlKjjgILlnKjnp4HmnInmmKDlsITkuK3vvIzpooTnlZnmmKDlsITkuK3msqHmnInmnaHnm67ooajmmI7lrZjlnKjkuIDkuKrpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5My1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozOTQ65Ye95pWwIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpIOivleWbvuWkhOeQhui/meenjeaDheWGteOAguWug+acieebuOW9k+WujOWWhOeahOaWh+aho+OAgui/meS4quWHveaVsOeahOebrueahFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5NS3mmK/lsIbpooTnlZnmmKDlsITmgaLlpI3liLDpobXpnaLliIbphY3liY3nmoTnirbmgIHjgILpgJrov4fov5nnp43mlrnlvI/vvIzpooTnlZnmmKDlsITnmoTnirbmgIHlsIbkuI7pobXpnaLph4rmlL7lkI7nmoTlhajlsYDpooTnlZnorqFcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozOTg65Ye95pWwcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9y5pys6Lqr5Zyo6K+V5Zu+5oGi5aSN6aKE55WZ5pig5bCE5p2h55uu5pe25Y+v6IO95Lya6YGH5Yiw6ZSZ6K+v44CC5Zyo6L+Z56eN5oOF5Ya15LiL77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMzk5LeWug+WwhueugOWNleWcsOa4hemZpOivpemhteeahFBhZ2VQcml2YXRl5qCH5b+X44CC6L+Z5qC35LiA5p2l77yM5b2T6aG16Z2i6KKr6YeK5pS+5pe277yM5YWo5bGA6aKE55WZ6K6h5pWw5bCG5LiN5Lya6KKr6YCS5aKe44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC00MDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NDAzOuacieS4gOS6m+S7o+egge+8iOacgOaYjuaYvueahOaYr3VzZXJmYXVsdGZk77yJ5LiN6IO96LCD55SocmVzdG9yZV9yZXNlcnZlX29uX2Vycm9y44CC5Zyo6L+Z56eN5oOF5Ya15LiL77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDA0LeWug+eugOWNleWcsOS/ruaUueS6hlBhZ2VQcml2YXRl77yM5Lul5L6/5Zyo6YeK5pS+5beo6aG15pe25LiN5Lya5rOE6Zyy6aKE55WZ44CCXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTg9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTIwLVxcdCAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyMTpcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyksIGZvbGlvKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MjItXFx0aHVnZXRsYl9kZWxldGVfZnJvbV9wYWdlX2NhY2hlKGZvbGlvKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTcwMD1zdGF0aWMgbG9uZyBodWdldGxiZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgwMi1cXHRcXHRpZiAodW5saWtlbHkoZXJyb3IpKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODAzOlxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZm9saW8pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgwNC1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTQ5PWh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU1Ny0gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjU1ODogKiBIUEdfcmVzdG9yZV9yZXNlcnZlIC0gU2V0IHdoZW4gYSBodWdldGxiIHBhZ2UgY29uc3VtZXMgYSByZXNlcnZhdGlvbiBhdFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU1OS0gKlxcdGFsbG9jYXRpb24gdGltZS4gIENsZWFyZWQgd2hlbiBwYWdlIGlzIGZ1bGx5IGluc3RhbnRpYXRlZC4gIEZyZWVcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU4Mz1lbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTg0OlxcdEhQR19yZXN0b3JlX3Jlc2VydmUgPSAwLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU4NS1cXHRIUEdfbWlncmF0YWJsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYzMj1mb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjQzLSAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY0NDpIUEFHRUZMQUcoUmVzdG9yZVJlc2VydmUsIHJlc3RvcmVfcmVzZXJ2ZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02NDUtSFBBR0VGTEFHKE1pZ3JhdGFibGUsIG1pZ3JhdGFibGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MTE9aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzEyLVxcdFxcdFxcdHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MTM6dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzE0LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY3Mz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE2ODEtXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gaHVnZXRsYl9mb2xpb19zdWJwb29sKGZvbGlvKTtcXG5tbS9odWdldGxiLmM6MTY4MjpcXHRib29sIHJlc3RvcmVfcmVzZXJ2ZTtcXG5tbS9odWdldGxiLmMtMTY4My1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2OTEtXFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbm1tL2h1Z2V0bGIuYzoxNjkyOlxcdHJlc3RvcmVfcmVzZXJ2ZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzoxNjkzOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTY5NC1cXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzAyLVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoxNzAzOlxcdGlmICghcmVzdG9yZV9yZXNlcnZlKSB7XFxubW0vaHVnZXRsYi5jLTE3MDQtXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzA2LVxcdFxcdCAqIHVuZGVyIGl0cyBtaW5pbXVtIHNpemUgaWYgdGhlIHJlc2VydmF0aW9uIGlzIG5vdCByZXN0b3JlZFxcbm1tL2h1Z2V0bGIuYzoxNzA3OlxcdFxcdCAqIGFmdGVyIHBhZ2UgaXMgZnJlZS4gIFRoZXJlZm9yZSwgZm9yY2UgcmVzdG9yZV9yZXNlcnZlXFxubW0vaHVnZXRsYi5jLTE3MDgtXFx0XFx0ICogb3BlcmF0aW9uLlxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MTAtXFx0XFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxcbm1tL2h1Z2V0bGIuYzoxNzExOlxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZSA9IHRydWU7XFxubW0vaHVnZXRsYi5jLTE3MTItXFx0fVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MjEtXFx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jOjE3MjI6XFx0aWYgKHJlc3RvcmVfcmVzZXJ2ZSlcXG5tbS9odWdldGxiLmMtMTcyMy1cXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMrKztcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODEtXFx0aWYgKGZvbGlvKSB7XFxubW0vaHVnZXRsYi5jOjIxODI6XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjE4My1cXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTI0PXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTM2LSAqIDEpIEEgcmVzZXJ2YXRpb24gd2FzIGluIHBsYWNlIGFuZCB0aGUgZm9saW8gY29uc3VtZWQgdGhlIHJlc2VydmF0aW9uLlxcbm1tL2h1Z2V0bGIuYzoyNTM3OiAqICAgIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzIHNldCBpbiB0aGUgZm9saW8uXFxubW0vaHVnZXRsYi5jOjI1Mzg6ICogMikgTm8gcmVzZXJ2YXRpb24gd2FzIGluIHBsYWNlIGZvciB0aGUgcGFnZSwgc28gaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgaXNcXG5tbS9odWdldGxiLmMtMjUzOS0gKiAgICBub3Qgc2V0LiAgSG93ZXZlciwgYWxsb2NfaHVnZXRsYl9mb2xpbyBhbHdheXMgdXBkYXRlcyB0aGUgcmVzZXJ2ZSBtYXAuXFxuLS1cXG5tbS9odWdldGxiLmMtMjU0OS0gKi9cXG5tbS9odWdldGxiLmM6MjU1MDp2b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjU1MS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMjU1NC1cXG5tbS9odWdldGxiLmM6MjU1NTpcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbykpIHtcXG5tbS9odWdldGxiLmMtMjU1Ni1cXHRcXHRpZiAodW5saWtlbHkocmMgXFx1MDAzYyAwKSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTU4LVxcdFxcdFxcdCAqIFJhcmUgb3V0IG9mIG1lbW9yeSBjb25kaXRpb24gaW4gcmVzZXJ2ZSBtYXBcXG5tbS9odWdldGxiLmM6MjU1OTpcXHRcXHRcXHQgKiBtYW5pcHVsYXRpb24uICBDbGVhciBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBzb1xcbm1tL2h1Z2V0bGIuYy0yNTYwLVxcdFxcdFxcdCAqIHRoYXQgZ2xvYmFsIHJlc2VydmUgY291bnQgd2lsbCBub3QgYmUgaW5jcmVtZW50ZWRcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTY3LVxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNTY4OlxcdFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjU2OS1cXHRcXHRlbHNlIGlmIChyYylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTc4LVxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmM6MjU3OTpcXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTgwLVxcdFxcdFxcdCAqIFJlbW92ZSB0aGUgZW50cnkgc28gdGhhdCBhIHN1YnNlcXVlbnQgYWxsb2NhdGlvblxcbi0tXFxubW0vaHVnZXRsYi5jLTI1ODctXFx0XFx0XFx0XFx0ICogd2UgY2FuIG5vdCBkZWxldGUgdGhlIGVudHJ5LCBzZXRcXG5tbS9odWdldGxiLmM6MjU4ODpcXHRcXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBzbyB0aGF0IHRoZSByZXNlcnZlXFxubW0vaHVnZXRsYi5jLTI1ODktXFx0XFx0XFx0XFx0ICogY291bnQgd2lsbCBiZSBpbmNyZW1lbnRlZCB3aGVuIHRoZSBmb2xpb1xcbi0tXFxubW0vaHVnZXRsYi5jLTI1OTItXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI1OTM6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjU5NC1cXHRcXHR9IGVsc2UgaWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTI2MDgtXFx0XFx0XFx0XFx0ICogYSByZXNlcnZhdGlvbiBpcyBwcmVzZW50LiAgU2luY2Ugd2UgY2FuXFxubW0vaHVnZXRsYi5jOjI2MDk6XFx0XFx0XFx0XFx0ICogbm90IGFkZCBhbiBlbnRyeSwgc2V0IGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXFxubW0vaHVnZXRsYi5jLTI2MTAtXFx0XFx0XFx0XFx0ICogb24gdGhlIGZvbGlvIHNvIHJlc2VydmUgY291bnQgd2lsbCBiZVxcbi0tXFxubW0vaHVnZXRsYi5jLTI2MTMtXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI2MTQ6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjYxNS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4MzI9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjg3NC1cXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xcbm1tL2h1Z2V0bGIuYzoyODc1OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI4NzYtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9NDg5OD1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9odWdldGxiLmMtNTAyOS1cXHRcXHRcXHRcXHRpZiAocmV0KSB7XFxubW0vaHVnZXRsYi5jOjUwMzA6XFx0XFx0XFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGFkZHIsIG5ld19mb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUwMzEtXFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KG5ld19mb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmMtNTA0MC1cXHRcXHRcXHRcXHRpZiAoIXB0ZV9zYW1lKHNyY19wdGVfb2xkLCBlbnRyeSkpIHtcXG5tbS9odWdldGxiLmM6NTA0MTpcXHRcXHRcXHRcXHRcXHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgZHN0X3ZtYSwgYWRkcixcXG5tbS9odWdldGxiLmMtNTA0Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZXdfZm9saW8pO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzMjgtXFx0XFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6NTMyOTpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01MzMwLVxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYy01MzQ3LVxcdFxcdFxcdFxcdCAqIHRvIGFsbG9jYXRlIGEgZmlsZV9yZWdpb24gc3RydWN0LiBDbGVhclxcbm1tL2h1Z2V0bGIuYzo1MzQ4OlxcdFxcdFxcdFxcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHNvIHRoYXQgZ2xvYmFsIHJlc2VydmVcXG5tbS9odWdldGxiLmMtNTM0OS1cXHRcXHRcXHRcXHQgKiBjb3VudCB3aWxsIG5vdCBiZSBpbmNyZW1lbnRlZCBieSBmcmVlX2h1Z2VfZm9saW8uXFxuLS1cXG5tbS9odWdldGxiLmMtNTM1MS1cXHRcXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTM1MjpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUzNTMtXFx0XFx0XFx0ZWxzZSBpZiAocmMpXFxuLS1cXG5tbS9odWdldGxiLmM9NTQ5MT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZXRsYi5jLTU2NzEtXFx0aWYgKG5ld19mb2xpbyAhPSBvbGRfZm9saW8pXFxubW0vaHVnZXRsYi5jOjU2NzI6XFx0XFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBuZXdfZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01NjczLVxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbi0tXFxubW0vaHVnZXRsYi5jPTU3MDA9aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTcxNC1cXHR9XFxubW0vaHVnZXRsYi5jOjU3MTU6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01NzE2LVxcbi0tXFxubW0vaHVnZXRsYi5jPTU3NjM9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU4NjUtXFx0XFx0XFx0XFx0ICogdG8gdGhlIHBhZ2UgY2FjaGUuIFNvIGl0J3Mgc2FmZSB0byBjYWxsXFxubW0vaHVnZXRsYi5jOjU4NjY6XFx0XFx0XFx0XFx0ICogcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKCkgaGVyZS5cXG5tbS9odWdldGxiLmMtNTg2Ny1cXHRcXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTg2ODpcXHRcXHRcXHRcXHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgdm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsXFxubW0vaHVnZXRsYi5jLTU4NjktXFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW8pO1xcbi0tXFxubW0vaHVnZXRsYi5jLTU5ODEtXFx0aWYgKG5ld19hbm9uX2ZvbGlvKVxcbm1tL2h1Z2V0bGIuYzo1OTgyOlxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCB2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcywgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01OTgzLVxcbi0tXFxubW0vaHVnZXRsYi5jPTYyNzY9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzUyLVxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MzUzOlxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBkc3RfYWRkciwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy02MzU0LVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM5MC1cXHRcXHRpZiAocmV0KSB7XFxubW0vaHVnZXRsYi5jOjYzOTE6XFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGRzdF9hZGRyLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTYzOTItXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NDkwLVxcdGlmICghZm9saW9faW5fcGFnZWNhY2hlKVxcbm1tL2h1Z2V0bGIuYzo2NDkxOlxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBkc3RfYWRkciwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy02NDkyLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9ybWFwLmM9MzE5ND12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0zMjAyLVxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbGFyZ2VfbWFwY291bnQsIDApO1xcbm1tL3JtYXAuYzozMjAzOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9ybWFwLmMtMzIwNC1cXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MTo0NS4zNjU1NTQ2NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNjA4ODc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZSwgYnJva2VuIGRvd24gaW4gYSB3YXkgdGhhdCwgYXMgYW4gZXhwZXJ0LCBJJ2QgcHJvY2VzcyBpdDpcblxuKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKWAgYW5kIGRlY3JlbWVudHMgYGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzYCB3aXRoaW4gdGhlIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGZ1bmN0aW9uLiBUaGlzICppbW1lZGlhdGVseSogcGlxdWVzIG15IGludGVyZXN0LiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHRoZSByZXNlcnZhdGlvbiBsb2dpYyBmb3IgSHVnZVRMQiBmb2xpb3MuIEJlZm9yZSB0aGlzIHBhdGNoLCBpZiBJJ20gcmVtZW1iZXJpbmcgY29ycmVjdGx5IOKAkyBhbmQgSSdtIHByZXR0eSBzdXJlIEkgYW0g4oCTIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgICpzaW1wbHkqIHJldHVybmVkIHRoZSBmb2xpby4gVGhlIHJlc2VydmF0aW9uIHdhcyBsaWtlbHkgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgKm5vdCogZXhwbGljaXRseSwgYW5kIHRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBjaGFuZ2VzIGFyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHVzZWQgdG8gbG9vayBpbiBgbW0vaHVnZXRsYi5jYCB0byBjb21wYXJlIHRvIHRoZSB1cGRhdGVkIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHJlc2VydmUgbXVzdCBoYXZlIGJlZW4gZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjUwLjMwMTY0NTY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2ODpcXHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4yMTY5OlxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4yMTcwOlxcdHtcXG4yMTcxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMjE3MjpcXHRcXG4yMTczOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjE3NDpcXHRcXHRpZiAoIWgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcykge1xcbjIxNzU6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjIxNzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjE3NzpcXHRcXHR9XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLCBwcmVmZXJyZWRfbmlkLFxcbjIxODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5tYXNrKTtcXG4yMTgxOlxcdFxcdGlmIChmb2xpbykge1xcbjIxODI6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4yMTgzOlxcdFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbjIxODQ6XFx0XFx0fVxcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjE4NzpcXHRcXHRyZXR1cm4gZm9saW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjUwLjMwMTk5NTM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NDg1ODgxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIEZvbGlvIEFsbG9jYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkaWZmIGluIGBtbS9odWdldGxiLmNgLiAgQmVmb3JlLCB0aGUgY29kZSBjaGVja2VkIGlmIGEgZm9saW8gd2FzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBhbmQsIGlmIHNvLCBkZWNyZW1lbnRlZCB0aGUgcmVzZXJ2ZWQgaHVnZSBwYWdlIGNvdW50IChgaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLWApLiBUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7YCAqd2l0aGluKiB0aGF0IGBpZmAgYmxvY2suICBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCBzZXRzIGEgZmxhZyBvbiB0aGUgZm9saW8sIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAsIGlmIHRoZSBmb2xpbyBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgcmVzZXJ2ZS4gVGhpcyBtZWFucyBpZiB0aGUgZm9saW8gZ2V0cyBmcmVlZCwgd2UgY2FuIHJlc3RvcmUgdGhlIHJlc2VydmF0aW9uLlxuXG5UaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBsb2dpYy4gSXQncyBub3QganVzdCBhIHJlZmFjdG9yIG9yIGNvc21ldGljIGNoYW5nZTsgaXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGUgaHVnZSBwYWdlIHJlc2VydmUgc3lzdGVtIGluIHRoZSBrZXJuZWwuIFRoaXMgY2hhbmdlIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gV2Ugbm93IG5lZWQgdG8gY2hlY2sgd2hlcmUgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgaXMgY2FsbGVkIGZyb20gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRvIGJ1aWxkIGEgZnV6eiB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAyNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjU3Ljg1MDU4NTQ5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDEzOTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NzA1PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cXHRcXHRcXHRcXHRib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA5LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXFx0XFx0XFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjctXFxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjktXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuLS1cXG5tbS9tZW1mZC5jLTkzLVxcbm1tL21lbWZkLmM6OTQ6XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG5tbS9tZW1mZC5jLTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6NTkuMjk0NzMwNjc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjAwOTk2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1mZF9hbGxvY19mb2xpb2AqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsLiBTcGVjaWZpY2FsbHksIGl0J3MgY29taW5nIGZyb20gYG1lbWZkX2FsbG9jX2ZvbGlvYCB3aXRoaW4gYG1tL21lbWZkLmNgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycywgbGlrZWx5IHRpZWQgdG8gYW5vbnltb3VzIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBgbWVtZmRfYWxsb2NfZm9saW9gIGZ1bmN0aW9uIGlzIHRoZSBwb2ludCBvZiBhbGxvY2F0aW9uLCB0aGUgY29yZSBvZiBob3cgdGhpcyBhbGwgZ2V0cyBpbnN0YW50aWF0ZWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgY2FsbCBpbXBsaWVzIGl0J3MgYSBmb2xpby1iYXNlZCBhbGxvY2F0aW9uLiBXaGljaCBhbHNvIHRlbGxzIG1lIHRoYXQgdGhleSBhcmVuJ3Qgd29ya2luZyB3aXRoIHRyYWRpdGlvbmFsIHBhZ2VzLiBBIGZvbGlvIGlzIGEgbXVjaCBtb3JlIG1vZGVybiBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjowNi4wMTQ4MzI3NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDkzMzUwMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1mZC5oPTEwPWV4dGVybiBsb25nIG1lbWZkX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yNy19XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yOS17XFxuLS1cXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbm1tL2d1cC5jLTM1MTgtXFx0XFx0XFx0aWYgKCFucl9mb3VuZCkge1xcbm1tL2d1cC5jOjM1MTk6XFx0XFx0XFx0XFx0Zm9saW8gPSBtZW1mZF9hbGxvY19mb2xpbyhtZW1mZCwgc3RhcnRfaWR4KTtcXG5tbS9ndXAuYy0zNTIwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02Ny0gKi9cXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG5tbS9tZW1mZC5jLTY5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6MDcuNDY0MTcyNDI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTY3MzgwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEZvbGlvIEFsbG9jYXRpb24gd2l0aGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZm9saW8gYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgaXQgbG9va3MgbGlrZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBtZW1mZF9waW5fZm9saW9zYCB3aXRoaW4gYG1tL2d1cC5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgYGd1cC5jYCBpcyB0aGUgXCJnZXQgdXNlciBwYWdlc1wiIGNvZGUsIHdoaWNoIGlzIGFsbCBhYm91dCBzZWN1cmVseSBhY2Nlc3NpbmcgdXNlci1zcGFjZSBtZW1vcnksIGFuZCBwaW5uaW5nIHRob3NlIHBhZ2VzIGluIHRoZSBwYWdlIHRhYmxlcy4gU28sIHRoaXMgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcGlubmluZyBmb2xpb3MgcmVsYXRlZCB0byBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycyAobWVtZmRzKS4gSXQgbWFrZXMgc2Vuc2UgdGhhdCB3ZSBuZWVkIGEgd2F5IHRvIGFsbG9jYXRlIHRoZSBmb2xpbyBhbmQgZ2V0IGl0IHJlYWR5IGZvciBwaW5uaW5nLCBoZW5jZSB0aGUgY2FsbCB0byBgbWVtZmRfYWxsb2NfZm9saW9gLiBJIHdvbmRlciB3aGF0IHRoZSBzcGVjaWZpYyBhbGxvY2F0aW9uIGZsYWdzIGFuZCBjb25zdHJhaW50cyBhcmUsIGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aG9zZSBmdW5jdGlvbiBjYWxscyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgYnV0IHRoaXMgYXQgbGVhc3QgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtZmQgZm9saW9zIGFyZSBiZWluZyBoYW5kbGVkIGR1cmluZyBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBzZWUgd2hhdCBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCBhbmQgaG93IHRoZSBmb2xpbyBpcyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjE0LjcyMDkxMjk3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Mzk1ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9waW5fZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTUtXFx0ZW5kID0gc3RhcnQgKyAocGdjbnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzE2OlxcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFxcdTAwMjZwZ29mZik7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTctXFx0aWYgKG5yX2ZvbGlvcyBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXFx0XFx0ICogSW4gYSBnaXZlbiByYW5nZSwgb25seSB0aGUgZmlyc3Qgc3VicGFnZSBvZiB0aGUgZmlyc3QgZm9saW9cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcXHRcXHQgKiBoYXMgYW4gb2Zmc2V0LCB0aGF0IGlzIHJldHVybmVkIGJ5IG1lbWZkX3Bpbl9mb2xpb3MoKS5cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cXHRcXHQgKiBUaGUgZmlyc3Qgc3VicGFnZXMgb2Ygb3RoZXIgZm9saW9zIChpbiB0aGUgcmFuZ2UpIGhhdmUgYW5cXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cXHQvKlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzNTpcXHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cXHQgKiB3ZSBjYW4gY29tcHV0ZSBucGFnZXMgcGlubmVkLCBhbmQgYXZvaWQgbG9vcGluZyBvdmVyIGZvbGlvcyBoZXJlXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXFx0ICovXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5OlxcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXFx1MDAzZWZpbGUsIHN0YXJ0LCBlbmQsIHVzZXItXFx1MDAzZXVmb2xpb3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVxcdFxcdFxcdFxcdCAgIG5mb2xpb3MsIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMzNzg9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzc5LVxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzM4MDpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzODEtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jPTE5MD1FWFBPUlRfU1lNQk9MKHVucGluX3VzZXJfcGFnZSk7XFxuLS1cXG5tbS9ndXAuYy0xOTUtICpcXG5tbS9ndXAuYzoxOTY6ICogRm9saW9zIHRoYXQgd2VyZSBwaW5uZWQgdmlhIG1lbWZkX3Bpbl9mb2xpb3MoKSBvciBvdGhlciBzaW1pbGFyIHJvdXRpbmVzXFxubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXFxuLS1cXG5tbS9ndXAuYz0zNDE1PUVYUE9SVF9TWU1CT0wocGluX3VzZXJfcGFnZXNfdW5sb2NrZWQpO1xcbi0tXFxubW0vZ3VwLmMtMzQxNy0vKipcXG5tbS9ndXAuYzozNDE4OiAqIG1lbWZkX3Bpbl9mb2xpb3MoKSAtIHBpbiBmb2xpb3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtZmRcXG5tbS9ndXAuYy0zNDE5LSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcXG4tLVxcbm1tL2d1cC5jLTM0NDItICovXFxubW0vZ3VwLmM6MzQ0Mzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxubW0vZ3VwLmMtMzQ0NC1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmMtMzUzOS19XFxubW0vZ3VwLmM6MzU0MDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcXG5tbS9ndXAuYy0zNTQxLVxcbi0tXFxubW0vZ3VwLmMtMzU1MS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xcbm1tL2d1cC5jOjM1NTI6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcXG5tbS9ndXAuYy0zNTUzLSAqIChlLmcuLCBpbmRpdmlkdWFsIHBhZ2VzKSBvZiB0aGUgZm9saW8gbGF0ZXIsIGZvciBleGFtcGxlLCB1c2luZ1xcbi0tXFxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXFxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cXG5tbS9tZW1mZC5jLTY2LSAqIGluZGV4IGluIHRoZSBtYXBwaW5nLlxcbi0tXFxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMTI5LVxcdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXFxubW0vbWVtZmRfbHVvLmM6MTMwOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XFxubW0vbWVtZmRfbHVvLmMtMTMxLVxcdCAqIHNsb3RzLlxcbm1tL21lbWZkX2x1by5jLTEzMi1cXHQgKi9cXG5tbS9tZW1mZF9sdW8uYzoxMzM6XFx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxcbm1tL21lbWZkX2x1by5jLTEzNC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTI5MS1cXHQvKlxcbm1tL21lbWZkX2x1by5jOjI5MjpcXHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcXG5tbS9tZW1mZF9sdW8uYy0yOTMtXFx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjoxNi4xNjQ4Nzc5NjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyMDQ1NDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgRm9saW8gQWxsb2NhdGlvbiBGbG93KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUsIGNhbGxlZCBkaXJlY3RseSBieSBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2Agd2l0aGluIHRoZSBpb21tdWZkIGNvbXBvbmVudC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UncmUgcGlubmluZyBtZW1vcnksIHNvIHdlIG5lZWQgdG8gdHJhY2sgaXQuXG5cbk5vdywgaWYgYG1lbWZkX3Bpbl9mb2xpb3NgIGRvZXNuJ3QgZmluZCBhIHN1aXRhYmxlIGZvbGlvIOKAkyB3aGljaCBpcyBwcm9iYWJseSB0aGUgaW50ZXJlc3RpbmcgYml0IOKAkyBpdCdzIHJlYWNoaW5nIG91dCB0byBgbWVtZmRfYWxsb2NfZm9saW9gLiBBbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgcG90ZW50aWFsbHkgY29tcGxleC4gSSdtIG5vdGluZyB0aGF0IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCBiZW5lYXRoIGBtZW1mZF9waW5fZm9saW9zYC4gSG1tLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBhbGxvY2F0aW9uIHBhdGguIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBmcmFnbWVudGF0aW9uLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIGJleW9uZCB0aGlzIHNwZWNpZmljIGNhbGwgY2hhaW4sICp3aGVyZSBlbHNlKiBpcyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBiZWluZyBpbnZva2VkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhhdCB3b3VsZCBpbmZvcm0gbXkgYW5hbHlzaXMgb2YgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjoyMi43ODUzMzQ4ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTUzMTU3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwNT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDctXFx0XFx0XFx0XFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOS1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTM0OmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTM1LVxcdFxcdFxcdCAgICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MjE0ND1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMTY3LVxcbm1tL2h1Z2V0bGIuYzoyMTY4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTY5LVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjI0LjI4MDY1NDY0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzYwMDE3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIE1lbWZkX0FsbG9jX0ZvbGlvIFJhYmJpdCBIb2xlKipcblxuT2theSwgc28gdGhlIHRyYWlsIHN0YXJ0cyB3aXRoIGBtZW1mZF9hbGxvY19mb2xpb2AsIHRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uIFdoZXJlJ3MgaXQgZ2V0dGluZyBjYWxsZWQgZnJvbT8gUmlnaHQsIGBtZW1mZF9waW5fZm9saW9zYC4gTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHVzZXIgc3BhY2UgcmVhY2ggYG1lbWZkX3Bpbl9mb2xpb3NgIGRpcmVjdGx5PyBUaGUgYW5zd2VyIGlzIHllcywgd2UndmUgZ290IGB1ZG1hYnVmYCBhbmQgYGlvbW11ZmRgIGluIHRoZSBtaXgsIHNvIHRoYXQncyBhIHZlY3RvciBmb3IgcG90ZW50aWFsIGludGVyYWN0aW9uLlxuXG5MZXQgbWUganVzdCByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGVzZSBhcmUgbG9jYXRlZC4gYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBkZWZpbmVkIGluIGBtbS9tZW1mZC5jYCwgZ290IGl0LiBOb3cgbGV0J3MgZG91YmxlIGNoZWNrIGBtZW1mZF9waW5fZm9saW9zYC4gSSBzZWVtIHRvIHJlY2FsbCBpdCByZXNpZGluZyBpbiBgbW0vZ3VwLmNgLCBJIHNob3VsZCBjb25maXJtIHRoYXQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjYWxsIGNoYWlucyB0byBjb25zaWRlci4gT2theSwgdGhhdCdzIHRoZSBpbW1lZGlhdGUgcGF0aCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6MzEuMDQwNjc1ODg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxOTE2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX3Bpbl9mb2xpb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cXHRlbmQgPSBzdGFydCArIChwZ2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAtIDE7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XFx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXFx1MDAyNnBnb2ZmKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cXHRpZiAobnJfZm9saW9zIFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cXHRcXHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4OlxcdFxcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVxcdFxcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVxcdC8qXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1OlxcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVxcdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XFx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cXHUwMDNldWZvbGlvcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXFx0XFx0XFx0XFx0ICAgbmZvbGlvcywgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM3OD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzNzktXFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMzgwOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM4MS1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcXG4tLVxcbm1tL2d1cC5jLTE5NS0gKlxcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cXG4tLVxcbm1tL2d1cC5jPTM0MTU9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XFxuLS1cXG5tbS9ndXAuYy0zNDE3LS8qKlxcbm1tL2d1cC5jOjM0MTg6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxcbm1tL2d1cC5jLTM0MTktICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxcbi0tXFxubW0vZ3VwLmMtMzQ0Mi0gKi9cXG5tbS9ndXAuYzozNDQzOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5tbS9ndXAuYy0zNDQ0LVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0zNTM5LX1cXG5tbS9ndXAuYzozNTQwOkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xcbm1tL2d1cC5jLTM1NDEtXFxuLS1cXG5tbS9ndXAuYy0zNTUxLSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXFxubW0vZ3VwLmM6MzU1MjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xcbm1tL2d1cC5jLTM1NTMtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuLS1cXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0xMjktXFx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcXG5tbS9tZW1mZF9sdW8uYzoxMzA6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcXG5tbS9tZW1mZF9sdW8uYy0xMzEtXFx0ICogc2xvdHMuXFxubW0vbWVtZmRfbHVvLmMtMTMyLVxcdCAqL1xcbm1tL21lbWZkX2x1by5jOjEzMzpcXHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMTM0LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMjkxLVxcdC8qXFxubW0vbWVtZmRfbHVvLmM6MjkyOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxcbm1tL21lbWZkX2x1by5jLTI5My1cXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjMyLjQ5MjU5NzgwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDUxMDAxOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHVkbWFidWZgIGFuZCBgaW9tbXVmZGAgc2l0dWF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGJvdGggbGV2ZXJhZ2luZyBgbWVtZmRfcGluX2ZvbGlvc2AuIEludGVyZXN0aW5nLiBUaGUgbmV4dCBxdWVzdGlvbiBidXJuaW5nIGluIG15IG1pbmQgaXMsIFwiSG93IGFjY2Vzc2libGUgaXMgYHVkbWFidWZgPyBJcyBpdCBqdXN0IHRocm91Z2gga2VybmVsIGZ1bmN0aW9ucyBvciBkb2VzIGl0IGV4cG9zZSBpdHNlbGYgdGhyb3VnaCBhIHN5c3RlbSBjYWxsP1wiLiBMb29rcyBsaWtlIGl0IGRvZXMsIHVzaW5nIGBpb2N0bChVRE1BQlVGX0NSRUFURSlgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSdsbCBuZWVkIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jYC4gSXQncyB0aW1lIHRvIHNlZSB3aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjM3Ljk0MzYwMTg3M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTI4OTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVRE1BQlVGX0NSRUFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTQ4OT1zdGF0aWMgbG9uZyB1ZG1hYnVmX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5NC1cXHRzd2l0Y2ggKGlvY3RsKSB7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0OTU6XFx0Y2FzZSBVRE1BQlVGX0NSRUFURTpcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5Ni1cXHRcXHRyZXQgPSB1ZG1hYnVmX2lvY3RsX2NyZWF0ZShmaWxwLCBhcmcpO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDk3LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDk4OlxcdGNhc2UgVURNQUJVRl9DUkVBVEVfTElTVDpcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5OS1cXHRcXHRyZXQgPSB1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0KGZpbHAsIGFyZyk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oPTI0PXN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC91ZG1hYnVmLmgtMjktXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaDozMDojZGVmaW5lIFVETUFCVUZfQ1JFQVRFICAgICAgIF9JT1coJ3UnLCAweDQyLCBzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUpXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaDozMTojZGVmaW5lIFVETUFCVUZfQ1JFQVRFX0xJU1QgIF9JT1coJ3UnLCAweDQzLCBzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfbGlzdClcXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oLTMyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZG1hYnVmX2l0ZXIuYz0yOT1zdGF0aWMgaW50IGNyZWF0ZV91ZG1hYnVmKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9kbWFidWZfaXRlci5jLTU4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmM6NTk6XFx0bG9jYWxfdWRtYWJ1ZiA9IGlvY3RsKGRldl91ZG1hYnVmLCBVRE1BQlVGX0NSRUFURSwgXFx1MDAyNmNyZWF0ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZG1hYnVmX2l0ZXIuYy02MC1cXHRjbG9zZShkZXZfdWRtYWJ1Zik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTU3PXN0YXRpYyBpbnQgY3JlYXRlX3VkbWFidWZfbGlzdChpbnQgZGV2ZmQsIGludCBtZW1mZCwgb2ZmNjRfdCBtZW1mZF9zaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy03Ni1cXHRsaXN0LVxcdTAwM2VmbGFncyA9IFVETUFCVUZfRkxBR1NfQ0xPRVhFQztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjc3OlxcdHVidWZfZmQgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEVfTElTVCwgbGlzdCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy03OC1cXHRmcmVlKGxpc3QpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0xMzM9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTc1LVxcdGNyZWF0ZS5zaXplICAgPSBnZXRwYWdlc2l6ZSgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTc2OlxcdGJ1ZiA9IGlvY3RsKGRldmZkLCBVRE1BQlVGX0NSRUFURSwgXFx1MDAyNmNyZWF0ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xNzctXFx0aWYgKGJ1ZiBcXHUwMDNlPSAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xODUtXFx0Y3JlYXRlLnNpemUgICA9IGdldHBhZ2VzaXplKCkvMjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjE4NjpcXHRidWYgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFxcdTAwMjZjcmVhdGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTg3LVxcdGlmIChidWYgXFx1MDAzZT0gMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTk1LVxcdGNyZWF0ZS5zaXplICAgPSBzaXplO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTk2OlxcdGJ1ZiA9IGlvY3RsKGRldmZkLCBVRE1BQlVGX0NSRUFURSwgXFx1MDAyNmNyZWF0ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xOTctXFx0aWYgKGJ1ZiBcXHUwMDNlPSAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0yMDgtXFx0Y3JlYXRlLnNpemUgICA9IHNpemU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoyMDk6XFx0YnVmID0gaW9jdGwoZGV2ZmQsIFVETUFCVUZfQ1JFQVRFLCBcXHUwMDI2Y3JlYXRlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTIxMC1cXHRpZiAoYnVmIFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9MTQxPXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTgxLVxcdGNyZWF0ZS5zaXplID0gc2l6ZTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjE4MjpcXHRjdHgtXFx1MDAzZWZkID0gaW9jdGwoY3R4LVxcdTAwM2VkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFxcdTAwMjZjcmVhdGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTgzLVxcdGlmIChjdHgtXFx1MDAzZWZkIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjozOS4zODI4OTU1ODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyMjM2MjQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IENvbXBvbmVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBgdWRtYWJ1ZmAgaXMgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gc2VlIGFib3V0IGBpb21tdWZkYC4gQWgsIHllcywgaXQncyBkZWZpbml0ZWx5IGEgY29yZSBzdWJzeXN0ZW0gSSBuZWVkIHRvIGJlIGNvbnNpZGVyaW5nLiBFeHBhbmRpbmcgb3V0d2FyZHMsIEkgc2VlIGBtZW1mZF9hbGxvY19mb2xpb2AgaXMgYWxzbyBhIHJlYWNoYWJsZSBmdW5jdGlvbi4gR29vZCwgZ29vZC4gQnV0IHdoYXQgYWJvdXQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWA/IEFoLCBJIHJlbWVtYmVyLCB0aGF0J3MgY2FsbGVkIHdoZW4gYG1lbWZkX2FsbG9jX2ZvbGlvYCBhbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIOKAkyB0aGF0J3MgYSBrZXkgZGV0YWlsLiBIb2xkIG9uLCBgbWVtZmRfYWxsb2NfZm9saW9gICpvbmx5KiBhbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIGlmIHRoZSBtZW1mZCBpcyBhIGh1Z2V0bGJmcyBmaWxlLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIC0gdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGJlaGF2aW91ci4gUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9tZW1mZC5jYCBhbmQgY2hlY2sgYG1lbWZkX2FsbG9jX2ZvbGlvYCBkaXJlY3RseS4gSSBuZWVkIHRvIGJlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6NDQuMTA1MjYwMTA0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1mZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY4OlxcdHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gIDY5OlxcdHtcXG4gIDcwOlxcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICA3MTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgNzI6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2s7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGlmIChpc19maWxlX2h1Z2VwYWdlcyhtZW1mZCkpIHtcXG4gIDc1OlxcdFxcdFxcdC8qXFxuICA3NjpcXHRcXHRcXHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxcbiAgNzc6XFx0XFx0XFx0ICogdGhlcmVmb3JlLCB3ZSBoYXZlIHpvbmUgbWVtb3J5IGNvbnN0cmFpbnRzIHdoZXJlIHdlIGNhblxcbiAgNzg6XFx0XFx0XFx0ICogYWxsb2MgZnJvbS4gQWxzbywgdGhlIGZvbGlvIHdpbGwgYmUgcGlubmVkIGZvciBhbiBpbmRlZmluaXRlXFxuICA3OTpcXHRcXHRcXHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXFxuICA4MDpcXHRcXHRcXHQgKi9cXG4gIDgxOlxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKG1lbWZkKTtcXG4gIDgyOlxcdFxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XFxuICA4MzpcXHRcXHRcXHRpbnQgZXJyID0gLUVOT01FTTtcXG4gIDg0OlxcdFxcdFxcdGxvbmcgbnJfcmVzdjtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0XFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuICA4NzpcXHRcXHRcXHRnZnBfbWFzayBcXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcXG4gIDg4OlxcdFxcdFxcdGlkeCBcXHUwMDNlXFx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRcXHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XFxuICA5MTpcXHRcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApXFxuICA5MjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihucl9yZXN2KTtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLFxcbiAgOTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrKTtcXG4gIDk4OlxcdFxcdFxcdGlmIChmb2xpbykge1xcbiAgOTk6XFx0XFx0XFx0XFx0dTMyIGhhc2g7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdFxcdFxcdC8qXFxuIDEwMjpcXHRcXHRcXHRcXHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4gMTAzOlxcdFxcdFxcdFxcdCAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWNcXG4gMTA0OlxcdFxcdFxcdFxcdCAqIHBhZ2VzLiBQYXNzIDAgYXMgYWRkcl9oaW50IHNpbmNlIHRoaXMgaXMgbm90IGEgZmF1bHRpbmcgcGF0aFxcbiAxMDU6XFx0XFx0XFx0XFx0ICogIGFuZCB3ZSBkb24ndCBoYXZlIGEgdXNlciB2aXJ0dWFsIGFkZHJlc3MgeWV0LlxcbiAxMDY6XFx0XFx0XFx0XFx0ICovXFxuIDEwNzpcXHRcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0Mjo0NC4xMDU5OTQwNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMDg3OTI3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG1lbWZkX2FsbG9jX2ZvbGlvYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHlldCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIGlzc3VlLiBNeSBpbml0aWFsIHJlYWQgY29uZmlybXMgdGhhdCBgbWVtZmRfYWxsb2NfZm9saW9gICpkb2VzKiBpbmRlZWQgYWxsb2NhdGUgYSBodWdldGxiIGZvbGlvIHdoZW4gZGVhbGluZyB3aXRoIGEgbWVtZmQgZmxhZ2dlZCBmb3IgaHVnZXBhZ2VzIOKAkyBwcmVjaXNlbHkgYXMgaW50ZW5kZWQuIFRoaXMgb2NjdXJzIGZvbGxvd2luZyBhIGNhbGwgdG8gYG1lbWZkX3Bpbl9mb2xpb3NgIG9uIGEgaHVnZXRsYmZzIG1lbWZkLiBUaGUgY29yZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gYSBtaXNzaW5nIGNhbGwgdG8gYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbylgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYSBmb2xpbyBhbGxvY2F0ZWQgaW4gdGhpcyBtYW5uZXIgZ2V0cyBmcmVlZCwgdGhlIG5lY2Vzc2FyeSByZXNlcnZhdGlvbiBpc24ndCBiZWluZyBwcm9wZXJseSByZXN0b3JlZCwgd2hpY2ggY291bGQgbGVhZCB0byByZXNvdXJjZSBsZWFrYWdlIGFuZCBwb3NzaWJsZSBmcmFnbWVudGF0aW9uIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNyaXRpY2FsIG9uZSBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgbmVlZHMgdG8gYmUgYnVsbGV0cHJvb2YuXG5cbkFscmlnaHQsIGxldCdzIHRoaW5rIGFib3V0IGZ1enppbmcgdGhpcy4gWWVzLCBhYnNvbHV0ZWx5LCBpdCdzIHdhcnJhbnRlZCBnaXZlbiB0aGUgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzcG90IHdlIHNob3VsZCBwdXQgdW5kZXIgc2NydXRpbnkuIE5vdywgd2hhdCdzIHRoZSBtb3N0IHJlbGV2YW50IGZvY3VzIHN5bWJvbCBoZXJlPyBBaCwgKnRoYXQqIHdvdWxkIGJlIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLiBIYW5nIG9uLCBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrLiBMZXQncyBwdWxsIHVwIGBtbS9odWdldGxiLmNgIHRvIGNvbmZpcm0gaXRzIHNjb3BlIGFuZCB1c2FnZS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIHRhcmdldCBjYW4gYmUgZGlyZWN0bHkgdGFyZ2V0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODY3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6NTQuMzE0Nzg5Mzc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgyMCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjU0LjMxNDgxMDI2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTgwODkxNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKipcblxuUmlnaHQsIHNvIEkndmUgYWxyZWFkeSBzdGFydGVkIGJ5IGdyZXBwaW5nIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gR29vZCwgaXQncyBub3Qgc3RhdGljLCBhbmQgSSBmb3VuZCBpdCBpbiBgbW0vaHVnZXRsYi5jYC4gRXhjZWxsZW50LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3Mgc2VlLCB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGBtZW1mZF9hbGxvY19mb2xpb2AuIE9rYXksIHRoYXQncyBhIHVzZWZ1bCBjb25uZWN0aW9uLiBBcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRvIGNvbnNpZGVyPyBBaCwgeWVzLCBgbWVtZmRfYWxsb2NfZm9saW9gIGl0c2VsZiBpcyBhIHNvbGlkIHN5bWJvbCB0byBrZWVwIGluIGZvY3VzLCBhbmQgYG1lbWZkX3Bpbl9mb2xpb3NgIGxvb2tzIHByb21pc2luZyB0b28uXG5cbkFscmlnaHQsIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGluIGBtbS9odWdldGxiLmNgLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5vdCBzdGF0aWM6XG5cbmBgYGNcbnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbmBgYFxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCB3aGF0IGRvIEkgbmVlZD8gSSdsbCBuZWVkIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBmb3IgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYW5kIGFsc28gZm9yIGBpc19maWxlX2h1Z2VwYWdlc2AuIFRpbWUgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIG9yIG1heWJlIGV2ZW4gYGZzL0tjb25maWdgIHRvIHBpbiBkb3duIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDk0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjAyLjQ5NTcwMzk0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODg1OTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xMjk9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTM0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjEzOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTQyLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDM6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDUtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Njpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Ny1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTQ5LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNTA6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTUxLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz02OTQ9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuLS1cXG5tbS9LY29uZmlnLTY5Ni1cXG5tbS9LY29uZmlnOjY5Nzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTY5OC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjAzLjk2NDU2Nzk1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI4MDcwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBIdWdlVExCIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlc2UgZGVwZW5kZW5jaWVzLiBTbywgdGltZSB0byBkaXZlIGRlZXBlciBhbmQgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9mIGBIVUdFVExCRlNgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBIdWdlVExCIGZpbGVzeXN0ZW0gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIExldCdzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzowOC42OTI2NDA2NzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzMzNjM4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzoxMC4xMjYwMTEwNDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzMDQ2NzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBtZW1mZF9waW5fZm9saW9zYCBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBtZW1mZF9waW5fZm9saW9zYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBIVUdFVExCRlNgIG1pZ2h0IGJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGhlcmUuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgZGl2ZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9uLiBBaCwgeWVzLCBpdCdzIGRlZmluZWQgaW4gYG1tL2d1cC5jYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgaXQgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBleGVjdXRlZCBiYXNlZCBvbiAqYW55KiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zPyBJIG5lZWQgdG8ga25vdyBpZiBpdHMgYmVoYXZpb3IgaXMgY29udGluZ2VudCBvbiB0aGluZ3MgbGlrZSBodWdlIHBhZ2VzLCBvciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzZXR0aW5ncy4gVG8gY2xhcmlmeSB0aGlzLCBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgYG1tL2d1cC5jYCBpdHNlbGYuIEnigJltIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGF0IGNvZGUgbm93IGFuZCB2ZXJpZnkgaWYgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFmZmVjdHMgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgbWVtZmRfcGluX2ZvbGlvc2AuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0aGF0IHdvdWxkIGxpbmsgaXRzIHVzZSB0byBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzoxNy43NTY0ODExNjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkxMTE5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfcGluX2ZvbGlvc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE1LVxcdGVuZCA9IHN0YXJ0ICsgKHBnY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC0gMTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMxNjpcXHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcXHUwMDI2cGdvZmYpO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE3LVxcdGlmIChucl9mb2xpb3MgXFx1MDAzYz0gMClcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVxcdFxcdCAqIEluIGEgZ2l2ZW4gcmFuZ2UsIG9ubHkgdGhlIGZpcnN0IHN1YnBhZ2Ugb2YgdGhlIGZpcnN0IGZvbGlvXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XFx0XFx0ICogaGFzIGFuIG9mZnNldCwgdGhhdCBpcyByZXR1cm5lZCBieSBtZW1mZF9waW5fZm9saW9zKCkuXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXFx0XFx0ICogVGhlIGZpcnN0IHN1YnBhZ2VzIG9mIG90aGVyIGZvbGlvcyAoaW4gdGhlIHJhbmdlKSBoYXZlIGFuXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz04MjQ9c3RhdGljIGxvbmcgcGluX21lbWZkX3BhZ2VzKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXFx0LypcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MzU6XFx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzYtXFx0ICogd2UgY2FuIGNvbXB1dGUgbnBhZ2VzIHBpbm5lZCwgYW5kIGF2b2lkIGxvb3Bpbmcgb3ZlciBmb2xpb3MgaGVyZVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM4LVxcdCAqL1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcXHRuZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyh1c2VyLVxcdTAwM2VmaWxlLCBzdGFydCwgZW5kLCB1c2VyLVxcdTAwM2V1Zm9saW9zLFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTg0MC1cXHRcXHRcXHRcXHQgICBuZm9saW9zLCBcXHUwMDI2b2Zmc2V0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0zMzc4PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM3OS1cXHRcXHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjMzODA6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzgxLVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYz0xOTA9RVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3BhZ2UpO1xcbi0tXFxubW0vZ3VwLmMtMTk1LSAqXFxubW0vZ3VwLmM6MTk2OiAqIEZvbGlvcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBtZW1mZF9waW5fZm9saW9zKCkgb3Igb3RoZXIgc2ltaWxhciByb3V0aW5lc1xcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxcbi0tXFxubW0vZ3VwLmM9MzQxNT1FWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKTtcXG4tLVxcbm1tL2d1cC5jLTM0MTctLyoqXFxubW0vZ3VwLmM6MzQxODogKiBtZW1mZF9waW5fZm9saW9zKCkgLSBwaW4gZm9saW9zIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWZkXFxubW0vZ3VwLmMtMzQxOS0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXFxuLS1cXG5tbS9ndXAuYy0zNDQyLSAqL1xcbm1tL2d1cC5jOjM0NDM6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbm1tL2d1cC5jLTM0NDQtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jLTM1MzktfVxcbm1tL2d1cC5jOjM1NDA6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XFxubW0vZ3VwLmMtMzU0MS1cXG4tLVxcbm1tL2d1cC5jLTM1NTEtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cXG5tbS9ndXAuYzozNTUyOiAqIHVzaW5nIG1lbWZkX3Bpbl9mb2xpb3MoKSwgYnV0IHdhbnRpbmcgdG8gbG9naWNhbGx5IHVucGluIHBhcnRzXFxubW0vZ3VwLmMtMzU1My0gKiAoZS5nLiwgaW5kaXZpZHVhbCBwYWdlcykgb2YgdGhlIGZvbGlvIGxhdGVyLCBmb3IgZXhhbXBsZSwgdXNpbmdcXG4tLVxcbm1tL21lbWZkLmM9Mzg9c3RhdGljIHZvaWQgbWVtZmRfdGFnX3BpbnMoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxcbm1tL21lbWZkLmM6NjU6ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXFxubW0vbWVtZmQuYy02Ni0gKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cXG4tLVxcbm1tL21lbWZkX2x1by5jPTg3PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL21lbWZkX2x1by5jLTEyOS1cXHQgKiB0aGF0IGlzIHJlYWxseSBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGhhdmUgYVxcbm1tL21lbWZkX2x1by5jOjEzMDpcXHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxcbm1tL21lbWZkX2x1by5jLTEzMS1cXHQgKiBzbG90cy5cXG5tbS9tZW1mZF9sdW8uYy0xMzItXFx0ICovXFxubW0vbWVtZmRfbHVvLmM6MTMzOlxcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcXG5tbS9tZW1mZF9sdW8uYy0xMzQtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b2Zmc2V0KTtcXG4tLVxcbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0yOTEtXFx0LypcXG5tbS9tZW1mZF9sdW8uYzoyOTI6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIGNhcHMgYXQgVUlOVF9NQVggZm9saW9zOyByZWZ1c2UgbGFyZ2VyXFxubW0vbWVtZmRfbHVvLmMtMjkzLVxcdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MTkuMTg1NTk3NDc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDg0MjE0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtleSBTeW1ib2xzIGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgdGhhdCdzIGEga25vd24gcXVhbnRpdHkuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHNwcmluZ3MgdG8gbWluZCBpcyB3aGV0aGVyIGBtZW1mZF9hbGxvY19mb2xpb2AgaXMgYWxzbyBleHBvcnRlZC4gSG1tLCBubywgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgd2l0aGluIGBtbS9tZW1mZC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtZmQuaGAuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IEkgbmVlZCB0byBjb25zaWRlciB1c2FnZS4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHNlZWluZyBgbWVtZmRfYWxsb2NfZm9saW9gIGJlaW5nIGNhbGxlZCBmcm9tIGBtbS9ndXAuY2AuIFllcCwgdGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLlxuXG5MZXQncyBzZWXigKYgSSBhbHNvIGtub3cgdGhhdCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpcyByZWxldmFudCBoZXJlLiBPa2F5LCBsZXQncyBzZWUgaWYgdGhhdCdzIGV4cG9ydGVkLiBOb3BlLCBub3QgZXhwb3J0ZWQsIGJ1dCBpdCBpcyAqbm9uLXN0YXRpYyouIE9rYXksIHNvIGJvdGggYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYW5kIGBtZW1mZF9hbGxvY19mb2xpb2AgYXJlIHByaW1lIGNhbmRpZGF0ZXMuIEFoLCBhIHNtYWxsIGVwaXBoYW55ISBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpcyBjYWxsZWQgZnJvbSBgbWVtZmRfYWxsb2NfZm9saW9gLCBhbmQgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgbWVtZmRfcGluX2ZvbGlvc2AuIFRoZXJlZm9yZSwgaW5jbHVkaW5nIGBtZW1mZF9waW5fZm9saW9zYCB3aWxsIGdpdmUgbWUgZ29vZCBpbnNpZ2h0LiBTbyBpdCdzIGJlc3QgdG8gbG9vayBhdCBhbGwgdGhyZWUuXG5cbkFscmlnaHQsIGxldCdzIGhlYWQgb3ZlciB0byBgbW0vbWVtZmQuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbWVtZmRfYWxsb2NfZm9saW9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjczNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzoyNi4wOTQwMjA5MzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk0NjMwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1mZC5oPTEwPWV4dGVybiBsb25nIG1lbWZkX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yNy19XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yOS17XFxuLS1cXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbm1tL2d1cC5jLTM1MTgtXFx0XFx0XFx0aWYgKCFucl9mb3VuZCkge1xcbm1tL2d1cC5jOjM1MTk6XFx0XFx0XFx0XFx0Zm9saW8gPSBtZW1mZF9hbGxvY19mb2xpbyhtZW1mZCwgc3RhcnRfaWR4KTtcXG5tbS9ndXAuYy0zNTIwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02Ny0gKi9cXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG5tbS9tZW1mZC5jLTY5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MjcuNTczNDkwMjdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3MjM3MzEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIFVETUFCVUYqKlxuXG5SaWdodCwgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpc24ndCBzdGF0aWMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgSSBzdXNwZWN0ZWQuIE5vdywgbGV0J3MgcGl2b3QgYW5kIGVuc3VyZSB0aGF0IHRoZSBgVURNQUJVRmAgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZGV0YWlscyB3aXRoaW4gdGhlIGBVRE1BQlVGYCBjb25maWcsIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5LCBiZWNhdXNlIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyB3b3JrIHRvZ2V0aGVyIGlzIGNlbnRyYWwgdG8gdGhlIGRlc2lnbiBvZiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MzIuNzQ1ODY2Njk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM3ODk3NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVRE1BQlVGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjM0LjE4Mzc2ODUwOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA1MDE3MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBVRE1BQlVGIGFuZCBJT01NVUZEIGZvciBPcHRpbWl6ZWQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aGlua2luZyBhYm91dCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBpdCBzZWVtcyBsaWtlIGxldmVyYWdpbmcgYFVETUFCVUZgIGlzIGEgc29saWQgcGF0aCBmb3J3YXJkLiBTcGVjaWZpY2FsbHksIGVuYWJsaW5nIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgIGxvb2tzIHByb21pc2luZyB0byBnYWluIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG1lbW9yeSB2aWEgYFVETUFCVUZgLiBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhhdCBhcHByb2FjaCBhbGlnbnMgd2l0aCB0aGUgcGVyZm9ybWFuY2UgZ29hbHMuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gY29uc2lkZXJpbmcgZW5hYmxpbmcgYElPTU1VRkRgIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoaXMuIEl0IG1pZ2h0IG9mZmVyIHNvbWUgYWRkaXRpb25hbCBmbGV4aWJpbGl0eSBvciBjb250cm9sLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRhdGEgSSdtIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gd2VpZ2ggdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiBgSU9NTVVGRGAgYWdhaW5zdCBgVURNQUJVRmAgYW5kIGhvdyB0aGV5J2QgaW50ZWdyYXRlIHdpdGggbXkgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBiZW5jaG1hcmtzIHRvIG1ha2UgYSBmdWxseSBpbmZvcm1lZCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzozOC4zODg3ODc3NzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzE2ODI5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPTU1VRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9LY29uZmlnPTc9Y29uZmlnIElPTU1VX0FQSVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTktXFxuZHJpdmVycy9pb21tdS9LY29uZmlnOjEwOmNvbmZpZyBJT01NVUZEX0RSSVZFUlxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjI6Y29uZmlnIElPTU1VRkRfRFJJVkVSX0NPUkVcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTUtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Njpjb25maWcgSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIklPTU1VIFVzZXJzcGFjZSBBUElcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0xOD1pZiBJT01NVUZEXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MTk6Y29uZmlnIElPTU1VRkRfVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0yMC1cXHRib29sIFxcXCJJT01NVUZEIHByb3ZpZGVzIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1xcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTM4LVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjM5OmNvbmZpZyBJT01NVUZEX1RFU1RcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJT01NVSBVc2Vyc3BhY2UgQVBJIFRlc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MzkuODYwNDc3Mzk2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjI4NTQ3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25jZXJucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBJT01NVUZEYCBoZXJlLCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbnNpZGVyLiBCdXQgcmVhbGx5LCB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZSBgSFVHRVRMQkZTYCBhbmQgYFVETUFCVUZgLiBUaG9zZSBhcmUgdGhlIGJpZyBwbGF5ZXJzLCB0aGUgb25lcyB0aGF0IG9mdGVuIG1ha2Ugb3IgYnJlYWsgbXkgc2V0dXAuIEZpcnN0LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgYEhVR0VUTEJGU2AgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IHJlbGllcyBvbiBvdGhlciBvcHRpb25zIGJlaW5nIGVuYWJsZWQgYmVmb3JlIEkgY2FuIG1vdmUgZm9yd2FyZC4gR290dGEgbWFwIG91dCB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGF2b2lkIGFueSBzdXJwcmlzZXMgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjUxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6NDQuNDIzMzM0MjZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgyNTQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0Mzo0NS44NzE1OTMzOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzkyNzg4MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmb3IgSFVHRVRMQkZTKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLiBXaGVyZSBkb2VzIHRoZSBrZXJuZWwgZGVmaW5lIHRoYXQ/IFJpZ2h0LCBgZnMvS2NvbmZpZ2AgaXMgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbGVzeXN0ZW0tcmVsYXRlZCBvcHRpb25zLiBMZXQncyBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgaXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZyBIVUdFVExCRlNgIGRpcmVjdGl2ZSwgbGlrZWx5IHdpdGggc29tZSBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIGV2ZW4gc29tZSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZSBhbmQgdXNlLiBJJ20gYWxzbyBjdXJpb3VzIGlmIGFueSBvdGhlciByZWxhdGVkIGZlYXR1cmVzIG9yIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBuZWFyYnksIGp1c3QgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6NTQuMjY0Mzg1MDgyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbiAyNjU6XFx0XFx0ZGVmYXVsdCBuXFxuIDI2NjpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjU0LjI2NDQ1MDkyMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODUwOTQyMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBteSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgaHVnZSBwYWdlcy4gSXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSAqcHJpbWFyeSogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBvZiBpbnRlcmVzdCBiZWNhdXNlIGl0cyBwcmVzZW5jZSBpcyBnYXRlZCBvbiB0aGUgbW9yZSBmdW5kYW1lbnRhbCBoYXJkd2FyZSByZXF1aXJlbWVudCBkZWZpbmVkIGJ5IGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIFNpbmNlIHRoZSBhcmNoaXRlY3R1cmUgKm11c3QqIHN1cHBvcnQgaHVnZSBwYWdlcyB0byBlbmFibGUgYEhVR0VUTEJGU2AsIHRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbiBmaXJzdCBhbmQgZm9yZW1vc3QuXG5cbk5vdywgSSdtIHNoaWZ0aW5nIGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTGV0J3MgbG9vayBhdCBgVURNQUJVRmAuIEkga25vdyB0aGlzIGlzIHVzZWQgYnkgc2V2ZXJhbCBkbWEtYnVmIGRyaXZlcnMuIEknbSBnb2luZyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnRpY3VsYXIgcGFydCBvZiB0aGUgdHJlZS5cbkknbGwgZ28gY2hlY2sgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCB0byBzdGFydCwgYW5kIHNlZSBpZiBpdCBpbnRlcmFjdHMgd2l0aCBteSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0NDowMC4xMTUzOTcxMTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzM6XFx0Y29uZmlnIFVETUFCVUZcXG4gIDM0OlxcdFxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuICAzNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTUVNRkRfQ1JFQVRFIHx8IENPTVBJTEVfVEVTVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgQSBkcml2ZXIgdG8gbGV0IHVzZXJzcGFjZSB0dXJuIG1lbWZkIHJlZ2lvbnMgaW50byBkbWEtYnVmcy5cXG4gIDQxOlxcdFxcdCAgUWVtdSBjYW4gdXNlIHRoaXMgdG8gY3JlYXRlIGhvc3QgZG1hYnVmcyBmb3IgZ3Vlc3QgZnJhbWVidWZmZXJzLlxcbiAgNDI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQ0OjAwLjExNTQ1NDcwN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODQ5Mzg2NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgVURNQUJVRmAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBmb2N1cyBpcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYFVETUFCVUZgIHJlbGllcyBoZWF2aWx5IG9uIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBNRU1GRF9DUkVBVEVgLCB3aGljaCwgaW4gdHVybiwgcG9pbnRzIGRpcmVjdGx5IHRvIGBIVUdFVExCRlNgIGJlaW5nIGEga2V5IGNvbmZpZ3VyYXRpb24gZWxlbWVudCBhbG9uZ3NpZGUgYFVETUFCVUZgIGl0c2VsZi4gU28sIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBhbmQgYFVETUFCVUZgIGFyZSB0aGUgd2lubmVycyBoZXJlLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIFwiV29ydGhGdXp6aW5nXCIgYXNwZWN0LiBUaGUga2V5IHN5bWJvbHMgaWRlbnRpZmllZCDigJMgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAsIGBtZW1mZF9hbGxvY19mb2xpb2AsIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2Ag4oCTIGltbWVkaWF0ZWx5IGhpZ2hsaWdodCB0aGUgYXJlYSBvZiBjb25jZXJuLiBUaGUgY3J1eCBvZiB0aGUgZml4IGlzIHRoYXQgYSBjcnVjaWFsIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGNhbGwgd2FzIG1pc3Npbmcgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHNwZWNpZmljYWxseSB3aGVuIGEgZm9saW8gaXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaGVhcnQgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZXRsYiBzdWJzeXN0ZW0uIFdlJ3JlIHRhbGtpbmcgYWJvdXQgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBoZXJlIGlzIHRoZSB1c2Vyc3BhY2UgcmVhY2hhYmlsaXR5IHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AuIElmIGEgdXNlciBjYW4gdXNlIGB1ZG1hYnVmYCBvciBldmVuIGBpb21tdWZkYCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgaHVnZXRsYmZzIG1lbWZkLCB0aGV5IGNhbiBoaXQgdGhlIGNvZGUgaW4gcXVlc3Rpb24sIG1ha2luZyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggZWZmZWN0aXZlbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSByZXNlcnZhdGlvbiBsZWFrIG9yIGNvcnJ1cHRpb24gc2NlbmFyaW8gdHJpZ2dlcmVkIHRocm91Z2ggdGhpcyB1c2VyLXNwYWNlIGludGVyZmFjZS4gVGhpcyB0eXBlIG9mIHBhdGNoIGlzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGxpa2VseSBnbyB1bm5vdGljZWQgaW4gZGF5LXRvLWRheSB1c2UsIGJ1dCB3aGVuIHB1c2hlZCB0byBpdHMgbGltaXRzIGNvdWxkIGNhdXNlIGFuIGlzc3VlIHRoYXQgY291bGQgYmUgZXhwbG9pdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTE1LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQ0OjA4Ljk2NDg0MzkwNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTkxMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlVETUFCVUZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVcIixcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGNhbGwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgd2hlbiBhIGZvbGlvIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGh1Z2V0bGIpIHRoYXQgYWZmZWN0cyBob3cgcmVzZXJ2YXRpb25zIGFyZSByZXN0b3JlZCB3aGVuIGZvbGlvcyBhcmUgZnJlZWQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBtZW1mZF9waW5fZm9saW9zYCAoZS5nLiwgdXNpbmcgYHVkbWFidWZgIG9yIGBpb21tdWZkYCB3aXRoIGEgaHVnZXRsYmZzIG1lbWZkKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlVETUFCVUZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVcIixcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGNhbGwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgd2hlbiBhIGZvbGlvIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGh1Z2V0bGIpIHRoYXQgYWZmZWN0cyBob3cgcmVzZXJ2YXRpb25zIGFyZSByZXN0b3JlZCB3aGVuIGZvbGlvcyBhcmUgZnJlZWQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBtZW1mZF9waW5fZm9saW9zYCAoZS5nLiwgdXNpbmcgYHVkbWFidWZgIG9yIGBpb21tdWZkYCB3aXRoIGEgaHVnZXRsYmZzIG1lbWZkKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MDkuMDM0MDQxMjA5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwNjMxMzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQ0OjA5LjAzNDUxODUzOVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjYwNTgzMzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlYmM5NjYzYTllMjc3ZWU3MGJiOTU0OTBjYmQ1NDIxNWM3YmEyODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMjo0MToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMjE3OCw4ICsyMTc4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4gXHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4tXHRpZiAoZm9saW8pXG4rXHRpZiAoZm9saW8pIHtcbitcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbiBcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbitcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MDkuMDM0NTE5MjU5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDc0MzExNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgSHVnZXRsYiBGb2xpbyBSZXNlcnZlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQncyBhZGRpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7YCB3aGVuIHRoZSBgZm9saW9gIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGxvb2sgaW50byB3aGF0IGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGFjdHVhbGx5ICpkb2VzKi4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQncyBwcm9iYWJseSBhIGZsYWcgc2V0dGluZyBvcGVyYXRpb24gb24gdGhlIGZvbGlvIHN0cnVjdHVyZSBpdHNlbGYuXG5cbkhtbSwgdGhpcyBpbml0aWFsbHkgZG9lc24ndCBzY3JlYW0gXCJ1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5XCIgdG8gbWUuIEl0IHNvdW5kcyBsaWtlIGl0J3Mgc3F1YXJlbHkgaW4gdGhlIHJlYWxtIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGh1Z2V0bGIgcmVzZXJ2ZXMgYW5kIGZvbGlvIGZsYWdzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIExldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLlxuXG5Ib2xkIG9uLCBsZXQgbWUgcXVpY2tseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIFRoZSBwYXRjaCAqanVzdCogc2V0cyBhIGZsYWcgb24gYSBgZm9saW9gLiBTaW5jZSBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIHRoaXMgaXMganVzdCBhIGZsYWcgc2V0dGluZy4uLiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzLiBUaGlzIGlzbid0IEtBU0FOIHRlcnJpdG9yeSwgZWl0aGVyOyB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIE9PQiBhY2Nlc3MsIFVzZS1BZnRlci1GcmVlLCBvciBhbnkgb2YgdGhvc2Uga2luZHMgb2YgaXNzdWVzLlxuXG5Gcm9tIHRoaXMgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBidWcgZml4IHJlbGF0ZWQgdG8gaHVnZXRsYiByZXNlcnZlcyDigJMgcG9zc2libHkgYSBsZWFrIG9yIGFjY291bnRpbmcgZXJyb3IuIENydWNpYWxseSwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGdvb2QuIFRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBObyBtb2RpZmljYXRpb25zIG9mIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBlaXRoZXIuXG5cbkkgdGhpbmsgSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlICpjb21wbGV0ZWx5KiBzdXJlLiBJdCdzIHByb2JhYmx5IGp1c3QgYSBzdHJhaWdodGZvcndhcmQgYml0LXNldCBvcGVyYXRpb24uIEJ1dCBJJ20gZmVlbGluZyBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MTQuNzQxOTUzMzY1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY1MzA3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjE2OD1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMTgxLVxcdGlmIChmb2xpbykge1xcbm1tL2h1Z2V0bGIuYzoyMTgyOlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTIxODMtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9MjU1MD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTkyLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNTkzOlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI1OTQtXFx0XFx0fSBlbHNlIGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjEzLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNjE0OlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI2MTUtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI4NzQtXFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcXG5tbS9odWdldGxiLmM6Mjg3NTpcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yODc2LVxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzMjgtXFx0XFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6NTMyOTpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01MzMwLVxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MTQuOTU4NDkwOTc5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjgxODQxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZvbGlvIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIGVzc2VudGlhbGx5IGp1c3QgYSBzaW1wbGUgZmxhZyB0aGF0J3MgYmVpbmcgc2V0IG9uIGEgZm9saW8uIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGFsbCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nLiBUaGlzIGZsYWcncyByb2xlIGlzIGNsZWFybHkgZGVmaW5lZDogaXQncyB1c2VkIHRvIHJlc3RvcmUgdGhvc2UgaHVnZXRsYiByZXNlcnZlcyBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igb3IgZHVyaW5nIGFuIHVubWFwIG9wZXJhdGlvbi4gTXkgYW5hbHlzaXMgc3VnZ2VzdHMgdGhlcmUncyBubyByaXNrIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgY3JvcHBpbmcgdXAgaGVyZS4gVGhlcmVmb3JlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTUsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MjUuNjQwMzM0NzE3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGZvbGlvIGFsbG9jYXRpb24gbG9naWMgYnkgc2V0dGluZyB0aGUgYGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBmbGFnIG9uIGEgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkIGZvbGlvLiBUaGlzIGlzIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFjY291bnRpbmcgYW5kIGh1Z2V0bGIgcmVzZXJ2ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbWVtb3J5IGxlYWtzLCBpbmNvcnJlY3QgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 02:19:32 +0000 UTC FinishedAt: 2026-08-25 02:44:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d268963816d3c5ef1ae011821581e4d951c74542", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "UDMABUF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d268963816d3c5ef1ae011821581e4d951c74542", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "UDMABUF" ], "series_id": "51b9f2d6-80b7-44fe-a95f-ff4664651256" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_hugetlb_folio_reserve", "memfd_alloc_folio", "memfd_pin_folios" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDssCiAgICAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGZvbGlvIGFsbG9jYXRpb24gbG9naWMgYnkgc2V0dGluZyB0aGUgYGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBmbGFnIG9uIGEgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkIGZvbGlvLiBUaGlzIGlzIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFjY291bnRpbmcgYW5kIGh1Z2V0bGIgcmVzZXJ2ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbWVtb3J5IGxlYWtzLCBpbmNvcnJlY3QgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZWJjOTY2M2E5ZTI3N2VlNzBiYjk1NDkwY2JkNTQyMTVjN2JhMjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDI6NDE6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBkODg0OTE5NmFkOWIxLi5mYWRmZTFkYmMwNDdhIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0yMTc4LDggJiM0MzsyMTc4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4gXHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4tXHRpZiAoZm9saW8pXG4mIzQzO1x0aWYgKGZvbGlvKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xuIFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuJiM0MztcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0cmV0dXJuIGZvbGlvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDttZW1mZF9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZWJjOTY2M2E5ZTI3N2VlNzBiYjk1NDkwY2JkNTQyMTVjN2JhMjgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDI6NDE6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjE3OCw4ICYjNDM7MjE3OCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCWZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLCBwcmVmZXJyZWRfbmlkLAogCQkJCQkgICAgICAgbm1hc2spOwotCWlmIChmb2xpbykKJiM0MzsJaWYgKGZvbGlvKSB7CiYjNDM7CQlmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pOwogCQloLSZndDtyZXN2X2h1Z2VfcGFnZXMtLTsKJiM0MzsJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAlyZXR1cm4gZm9saW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtbS9odWdldGxiLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgY2hhbmdlIHRvIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBmdW5jdGlvbi4gVGhlIGtleSBhZGRpdGlvbiBoZXJlIGlzIGEgY2FsbCB0byBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKWAgYWZ0ZXIgYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgcGlxdWVzIG15IGludGVyZXN0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGZ1bmN0aW9uIGNhbGwuIFdoYXQgZXhhY3RseSBpcyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBkb2luZz8gV2hhdCBraW5kIG9mIHN0YXRlIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBpcyAmIzM0O3Jlc2VydmUmIzM0OyByZWZlcnJpbmcgdG8gaW4gdGhpcyBjb250ZXh0PwoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIG5lZWQgdG8gcmVhZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gVGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gV2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgZmxvdyBvZiBleGVjdXRpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgcHVycG9zZSBhbmQgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IHNjaGVtZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmb2xpbyByZXNlcnZlcywgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDU9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cdFx0XHRcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA5LVx0XHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTM0OmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXHRcdFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MjE0ND1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjE2Ny1cbm1tL2h1Z2V0bGIuYzoyMTY4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxNjktXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbi0tXG5tbS9tZW1mZC5jLTkzLVxubW0vbWVtZmQuYzo5NDpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbm1tL21lbWZkLmMtOTUtXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBSZXNlcnZhdGlvbioqCgpPa2F5LCBzbyBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGNhbGxpbmcgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcmVzZXJ2aW5nIHNwYWNlIGZvciB0aGVzZSBIdWdlVExCIGZvbGlvcy4gTXkgZm9jdXMgbm93IGlzIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuIFdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXN0b3JlIHJlc2VydmUgZnVuY3Rpb25hbGl0eT8gTGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIHJlc2VydmF0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIdWdlVExCIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTgxLVx0aWYgKGZvbGlvKSB7XG5tbS9odWdldGxiLmM6MjE4MjpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yMTgzLVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz0yNTUwPXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTkyLVx0XHRcdFx0ICovXG5tbS9odWdldGxiLmM6MjU5MzpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtMjU5NC1cdFx0fSBlbHNlIGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbm1tL2h1Z2V0bGIuYy0yNjEzLVx0XHRcdFx0ICovXG5tbS9odWdldGxiLmM6MjYxNDpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtMjYxNS1cdFx0fSBlbHNlIHtcbi0tXG5tbS9odWdldGxiLmM9MjgzMj1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjg3NC1cdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XG5tbS9odWdldGxiLmM6Mjg3NTpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yODc2LVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz01MjEwPXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTMyOC1cdFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG5tbS9odWdldGxiLmM6NTMyOTpcdFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTUzMzAtXHRcdFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBQcm9iYWJseSBkZWFsaW5nIHdpdGggaHVnZXBhZ2VzIGluIHRoZSBrZXJuZWwsIGxpa2VseSByZWxhdGVkIHRvIHJlc3RvcmluZyByZXNlcnZhdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgYnV0IGxldCYjMzk7cyBiZSBwcmVjaXNlLiBUaW1lIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgc3ltYm9sIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCBhbmQgd2hhdCBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyBpbi4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGl0cyBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSwgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBjZW50cmFsIHRvIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgaHVnZXBhZ2UgcmVzZXJ2YXRpb25zLiBJIGV4cGVjdCBpdCYjMzk7cyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyB0aG9zZSByZXNlcnZhdGlvbnMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2hlbiByZXN0b3JpbmcgdGhlbSwgbWF5YmUgYWZ0ZXIgYSBzeXN0ZW0gc3VzcGVuZCBvciBvdGhlciBldmVudCB0aGF0IGNvdWxkIGxlYWQgdG8gbWVtb3J5IHN0YXRlIGNoYW5nZXMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHNjaGVtZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqV2hlcmUmIzM5O3MgdGhlIERlZmluaXRpb24gQnVyaWVkPyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgaXNzdWUuLi4gYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBtaW5kIGdvZXMgaXMsICYjMzQ7V2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8mIzM0OyBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZSBkZWZpbml0aW9uIEkmIzM5O20gbG9va2luZyBmb3IgaXMgbGlrZWx5IGhpZGluZyB3aXRoaW4gdGhlIGRlcHRocyBvZiB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIE1vcmUgcHJlY2lzZWx5LCBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGl0IGVpdGhlciBkZWZpbmVkIHZpYSBhIHByZXByb2Nlc3NvciBtYWNyb+KAlHRoZSBnb29kIG9sZCBgI2RlZmluZWAgcm91dGXigJRvciBwZXJoYXBzIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIFRoYXQgaGVhZGVyIGZpbGUgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RvcCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBIdWdlVExCIGludGVybmFscywgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIHN0YXJ0IGRpZ2dpbmcuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIxNjg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxubW0vaHVnZXRsYi5jLTIxODEtXHRpZiAoZm9saW8pIHtcbm1tL2h1Z2V0bGIuYzoyMTgyOlx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTIxODMtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTI1NTA9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI1OTItXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNTkzOlx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNTk0LVx0XHR9IGVsc2UgaWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTI2MTMtXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNjE0Olx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNjE1LVx0XHR9IGVsc2Uge1xuLS1cbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODc0LVx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcbm1tL2h1Z2V0bGIuYzoyODc1Olx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI4NzYtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzI4LVx0XHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbm1tL2h1Z2V0bGIuYzo1MzI5Olx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTMzMC1cdFx0XHQvKiBSZXNlcnZhdGlvbiB0byBiZSBhZGp1c3RlZCBhZnRlciB0aGUgc3BpbiBsb2NrICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBSZXNlcnZlIFJlc3RvcmUgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gRnJvbSB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgc29tZSBIdWdlVExCIHJlc291cmNlIHJlc2VydmF0aW9uIG5lZWRzIHRvIGJlIGJyb3VnaHQgYmFjayBpbnRvIHBsYXkuIFRoZSBxdWVzdGlvbiBpcywgaG93JiMzOTtzIHRoaXMgcmVzdG9yYXRpb24gaGFuZGxlZCBpbiB0aGUga2VybmVsPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSwgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgZGVmaW5pdGlvbnMgZm9yIEh1Z2VUTEIgbWFuYWdlbWVudCBhcmUga2VwdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGEgZnVuY3Rpb24gb3IgbWFjcm8gZGVhbGluZyB3aXRoICYjMzQ7cmVzdG9yZV9yZXNlcnZlLiYjMzQ7IFRoYXQgc2hvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYmVoaW5kIHJlY292ZXJpbmcgdGhlIHJlc2VydmVkIHJlc291cmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzdG9yZV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NDk4PVRoaXMgaXMgYSBzcGVjaWFsIHdyYXBwZXIgcm91dGluZSB0byBoZWxwIGZhY2lsaXRhdGUgcmVzZXJ2YXRpb24gY2xlYW51cFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo0OTk6b24gZXJyb3IgcGF0aHMuICBJdCBpcyBvbmx5IGNhbGxlZCBmcm9tIHRoZSByb3V0aW5lIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01MDAtVGhpcyByb3V0aW5lIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gaW4gYW4gYXR0ZW1wdFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NTMyPWJlICBoaWdoZXIgdGhhbiBpdCBzaG91bGQgYW5kIHByZXZlbnQgYWxsb2NhdGlvbiBvZiBhIHByZS1hbGxvY2F0ZWQgcGFnZS5cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTMzLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1MzQ6VGhlIHJvdXRpbmUgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKCkgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uLiAgSXRcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTM1LWlzIGZhaXJseSB3ZWxsIGRvY3VtZW50ZWQuICBUaGUgaW50ZW50aW9uIG9mIHRoaXMgcm91dGluZSBpcyB0byByZXN0b3JlXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01Mzg9Y291bnQgYWZ0ZXIgdGhlIHBhZ2UgaXMgZnJlZWQuXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTUzOS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NTQwOlRoZSByb3V0aW5lIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvciBpdHNlbGYgbWF5IGVuY291bnRlciBlcnJvcnMgd2hpbGVcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTQxLWF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgcmVzZXJ2YXRpb24gbWFwIGVudHJ5LiAgSW4gdGhpcyBjYXNlLCBpdCB3aWxsXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01NDg9VGhlcmUgaXMgc29tZSBjb2RlIChtb3N0IG5vdGFibHkgdXNlcmZhdWx0ZmQpIHdoaWNoIGNhbiBub3QgY2FsbFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NDk6cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yLiAgSW4gdGhpcyBjYXNlLCBpdCBzaW1wbHkgbW9kaWZpZXMgdGhlIFBhZ2VQcml2YXRlXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTU1MC1zbyB0aGF0IGEgcmVzZXJ2YXRpb24gd2lsbCBub3QgYmUgbGVha2VkIHdoZW4gdGhlIGh1Z2UgcGFnZSBpcyBmcmVlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0zMzE9cmVnaW9uX2NvdW50KCnlnKjop6PpmaTnp4HmnInlt6jpobXmmKDlsITml7booqvosIPnlKjjgILlnKjnp4HmnInmmKDlsITkuK3vvIzpooTnlZnmmKDlsITkuK3msqHmnInmnaHnm67ooajmmI7lrZjlnKjkuIDkuKrpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0zOTMtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozOTQ65Ye95pWwIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpIOivleWbvuWkhOeQhui/meenjeaDheWGteOAguWug+acieebuOW9k+WujOWWhOeahOaWh+aho+OAgui/meS4quWHveaVsOeahOebrueahFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMzk1LeaYr+WwhumihOeVmeaYoOWwhOaBouWkjeWIsOmhtemdouWIhumFjeWJjeeahOeKtuaAgeOAgumAmui/h+i/meenjeaWueW8j++8jOmihOeVmeaYoOWwhOeahOeKtuaAgeWwhuS4jumhtemdoumHiuaUvuWQjueahOWFqOWxgOmihOeVmeiuoVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjM5ODrlh73mlbByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3LmnKzouqvlnKjor5Xlm77mgaLlpI3pooTnlZnmmKDlsITmnaHnm67ml7blj6/og73kvJrpgYfliLDplJnor6/jgILlnKjov5nnp43mg4XlhrXkuIvvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5OS3lroPlsIbnroDljZXlnLDmuIXpmaTor6XpobXnmoRQYWdlUHJpdmF0Zeagh+W/l+OAgui/meagt+S4gOadpe+8jOW9k+mhtemdouiiq+mHiuaUvuaXtu+8jOWFqOWxgOmihOeVmeiuoeaVsOWwhuS4jeS8muiiq+mAkuWinuOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQwMi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjQwMzrmnInkuIDkupvku6PnoIHvvIjmnIDmmI7mmL7nmoTmmK91c2VyZmF1bHRmZO+8ieS4jeiDveiwg+eUqHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcuOAguWcqOi/meenjeaDheWGteS4i++8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDA0LeWug+eugOWNleWcsOS/ruaUueS6hlBhZ2VQcml2YXRl77yM5Lul5L6/5Zyo6YeK5pS+5beo6aG15pe25LiN5Lya5rOE6Zyy6aKE55WZ44CCXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDk4PXN0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZV9zaW5nbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MjAtXHQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyMTpcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKSwgZm9saW8pO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTIyLVx0aHVnZXRsYl9kZWxldGVfZnJvbV9wYWdlX2NhY2hlKGZvbGlvKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODAyLVx0XHRpZiAodW5saWtlbHkoZXJyb3IpKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MDM6XHRcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZvbGlvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgwNC1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU0OT1odWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTU3LSAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1NTg6ICogSFBHX3Jlc3RvcmVfcmVzZXJ2ZSAtIFNldCB3aGVuIGEgaHVnZXRsYiBwYWdlIGNvbnN1bWVzIGEgcmVzZXJ2YXRpb24gYXRcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU1OS0gKlx0YWxsb2NhdGlvbiB0aW1lLiAgQ2xlYXJlZCB3aGVuIHBhZ2UgaXMgZnVsbHkgaW5zdGFudGlhdGVkLiAgRnJlZVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU4Mz1lbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1ODQ6XHRIUEdfcmVzdG9yZV9yZXNlcnZlID0gMCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU4NS1cdEhQR19taWdyYXRhYmxlLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYzMj1mb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjQzLSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjQ0OkhQQUdFRkxBRyhSZXN0b3JlUmVzZXJ2ZSwgcmVzdG9yZV9yZXNlcnZlKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjQ1LUhQQUdFRkxBRyhNaWdyYXRhYmxlLCBtaWdyYXRhYmxlKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcxMT1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcxMi1cdFx0XHRwZ29mZl90IGlkeCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MTM6dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjczPXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE2ODEtXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBodWdldGxiX2ZvbGlvX3N1YnBvb2woZm9saW8pO1xubW0vaHVnZXRsYi5jOjE2ODI6XHRib29sIHJlc3RvcmVfcmVzZXJ2ZTtcbm1tL2h1Z2V0bGIuYy0xNjgzLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5tbS9odWdldGxiLmMtMTY5MS1cdGZvbGlvLVx1MDAzZW1hcHBpbmcgPSBOVUxMO1xubW0vaHVnZXRsYi5jOjE2OTI6XHRyZXN0b3JlX3Jlc2VydmUgPSBmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYzoxNjkzOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2OTQtXG4tLVxubW0vaHVnZXRsYi5jLTE3MDItXHQgKi9cbm1tL2h1Z2V0bGIuYzoxNzAzOlx0aWYgKCFyZXN0b3JlX3Jlc2VydmUpIHtcbm1tL2h1Z2V0bGIuYy0xNzA0LVx0XHQvKlxuLS1cbm1tL2h1Z2V0bGIuYy0xNzA2LVx0XHQgKiB1bmRlciBpdHMgbWluaW11bSBzaXplIGlmIHRoZSByZXNlcnZhdGlvbiBpcyBub3QgcmVzdG9yZWRcbm1tL2h1Z2V0bGIuYzoxNzA3Olx0XHQgKiBhZnRlciBwYWdlIGlzIGZyZWUuICBUaGVyZWZvcmUsIGZvcmNlIHJlc3RvcmVfcmVzZXJ2ZVxubW0vaHVnZXRsYi5jLTE3MDgtXHRcdCAqIG9wZXJhdGlvbi5cbi0tXG5tbS9odWdldGxiLmMtMTcxMC1cdFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxubW0vaHVnZXRsYi5jOjE3MTE6XHRcdFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcbm1tL2h1Z2V0bGIuYy0xNzEyLVx0fVxuLS1cbm1tL2h1Z2V0bGIuYy0xNzIxLVx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XG5tbS9odWdldGxiLmM6MTcyMjpcdGlmIChyZXN0b3JlX3Jlc2VydmUpXG5tbS9odWdldGxiLmMtMTcyMy1cdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTgxLVx0aWYgKGZvbGlvKSB7XG5tbS9odWdldGxiLmM6MjE4MjpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yMTgzLVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz0yNTI0PXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjUzNi0gKiAxKSBBIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBhbmQgdGhlIGZvbGlvIGNvbnN1bWVkIHRoZSByZXNlcnZhdGlvbi5cbm1tL2h1Z2V0bGIuYzoyNTM3OiAqICAgIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzIHNldCBpbiB0aGUgZm9saW8uXG5tbS9odWdldGxiLmM6MjUzODogKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xubW0vaHVnZXRsYi5jLTI1MzktICogICAgbm90IHNldC4gIEhvd2V2ZXIsIGFsbG9jX2h1Z2V0bGJfZm9saW8gYWx3YXlzIHVwZGF0ZXMgdGhlIHJlc2VydmUgbWFwLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQ5LSAqL1xubW0vaHVnZXRsYi5jOjI1NTA6dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtMjU1MS1cdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTI1NTQtXG5tbS9odWdldGxiLmM6MjU1NTpcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jLTI1NTYtXHRcdGlmICh1bmxpa2VseShyYyBcdTAwM2MgMCkpXG4tLVxubW0vaHVnZXRsYi5jLTI1NTgtXHRcdFx0ICogUmFyZSBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbiBpbiByZXNlcnZlIG1hcFxubW0vaHVnZXRsYi5jOjI1NTk6XHRcdFx0ICogbWFuaXB1bGF0aW9uLiAgQ2xlYXIgaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgc29cbm1tL2h1Z2V0bGIuYy0yNTYwLVx0XHRcdCAqIHRoYXQgZ2xvYmFsIHJlc2VydmUgY291bnQgd2lsbCBub3QgYmUgaW5jcmVtZW50ZWRcbi0tXG5tbS9odWdldGxiLmMtMjU2Ny1cdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNTY4Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNTY5LVx0XHRlbHNlIGlmIChyYylcbi0tXG5tbS9odWdldGxiLmMtMjU3OC1cdFx0XHQgKiBiZWZvcmUgdGhlIGFsbG9jX2h1Z2V0bGJfZm9saW8gY2FsbCwgb3RoZXJ3aXNlXG5tbS9odWdldGxiLmM6MjU3OTpcdFx0XHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxubW0vaHVnZXRsYi5jLTI1ODAtXHRcdFx0ICogUmVtb3ZlIHRoZSBlbnRyeSBzbyB0aGF0IGEgc3Vic2VxdWVudCBhbGxvY2F0aW9uXG4tLVxubW0vaHVnZXRsYi5jLTI1ODctXHRcdFx0XHQgKiB3ZSBjYW4gbm90IGRlbGV0ZSB0aGUgZW50cnksIHNldFxubW0vaHVnZXRsYi5jOjI1ODg6XHRcdFx0XHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBzbyB0aGF0IHRoZSByZXNlcnZlXG5tbS9odWdldGxiLmMtMjU4OS1cdFx0XHRcdCAqIGNvdW50IHdpbGwgYmUgaW5jcmVtZW50ZWQgd2hlbiB0aGUgZm9saW9cbi0tXG5tbS9odWdldGxiLmMtMjU5Mi1cdFx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjI1OTM6XHRcdFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI1OTQtXHRcdH0gZWxzZSBpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5tbS9odWdldGxiLmMtMjYwOC1cdFx0XHRcdCAqIGEgcmVzZXJ2YXRpb24gaXMgcHJlc2VudC4gIFNpbmNlIHdlIGNhblxubW0vaHVnZXRsYi5jOjI2MDk6XHRcdFx0XHQgKiBub3QgYWRkIGFuIGVudHJ5LCBzZXQgaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVcbm1tL2h1Z2V0bGIuYy0yNjEwLVx0XHRcdFx0ICogb24gdGhlIGZvbGlvIHNvIHJlc2VydmUgY291bnQgd2lsbCBiZVxuLS1cbm1tL2h1Z2V0bGIuYy0yNjEzLVx0XHRcdFx0ICovXG5tbS9odWdldGxiLmM6MjYxNDpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtMjYxNS1cdFx0fSBlbHNlIHtcbi0tXG5tbS9odWdldGxiLmM9MjgzMj1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjg3NC1cdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XG5tbS9odWdldGxiLmM6Mjg3NTpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yODc2LVx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYz00ODk4PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNTAyOS1cdFx0XHRcdGlmIChyZXQpIHtcbm1tL2h1Z2V0bGIuYzo1MDMwOlx0XHRcdFx0XHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgZHN0X3ZtYSwgYWRkciwgbmV3X2ZvbGlvKTtcbm1tL2h1Z2V0bGIuYy01MDMxLVx0XHRcdFx0XHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmMtNTA0MC1cdFx0XHRcdGlmICghcHRlX3NhbWUoc3JjX3B0ZV9vbGQsIGVudHJ5KSkge1xubW0vaHVnZXRsYi5jOjUwNDE6XHRcdFx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBhZGRyLFxubW0vaHVnZXRsYi5jLTUwNDItXHRcdFx0XHRcdFx0XHRcdG5ld19mb2xpbyk7XG4tLVxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzI4LVx0XHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbm1tL2h1Z2V0bGIuYzo1MzI5Olx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTMzMC1cdFx0XHQvKiBSZXNlcnZhdGlvbiB0byBiZSBhZGp1c3RlZCBhZnRlciB0aGUgc3BpbiBsb2NrICovXG4tLVxubW0vaHVnZXRsYi5jLTUzNDctXHRcdFx0XHQgKiB0byBhbGxvY2F0ZSBhIGZpbGVfcmVnaW9uIHN0cnVjdC4gQ2xlYXJcbm1tL2h1Z2V0bGIuYzo1MzQ4Olx0XHRcdFx0ICogaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgc28gdGhhdCBnbG9iYWwgcmVzZXJ2ZVxubW0vaHVnZXRsYi5jLTUzNDktXHRcdFx0XHQgKiBjb3VudCB3aWxsIG5vdCBiZSBpbmNyZW1lbnRlZCBieSBmcmVlX2h1Z2VfZm9saW8uXG4tLVxubW0vaHVnZXRsYi5jLTUzNTEtXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo1MzUyOlx0XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTUzNTMtXHRcdFx0ZWxzZSBpZiAocmMpXG4tLVxubW0vaHVnZXRsYi5jPTU0OTE9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTY3MS1cdGlmIChuZXdfZm9saW8gIT0gb2xkX2ZvbGlvKVxubW0vaHVnZXRsYi5jOjU2NzI6XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCB2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBuZXdfZm9saW8pO1xubW0vaHVnZXRsYi5jLTU2NzMtXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmM9NTcwMD1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTcxNC1cdH1cbm1tL2h1Z2V0bGIuYzo1NzE1Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTU3MTYtXG4tLVxubW0vaHVnZXRsYi5jPTU3NjM9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01ODY1LVx0XHRcdFx0ICogdG8gdGhlIHBhZ2UgY2FjaGUuIFNvIGl0JiMzOTtzIHNhZmUgdG8gY2FsbFxubW0vaHVnZXRsYi5jOjU4NjY6XHRcdFx0XHQgKiByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoKSBoZXJlLlxubW0vaHVnZXRsYi5jLTU4NjctXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo1ODY4Olx0XHRcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsXG5tbS9odWdldGxiLmMtNTg2OS1cdFx0XHRcdFx0XHRcdGZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmMtNTk4MS1cdGlmIChuZXdfYW5vbl9mb2xpbylcbm1tL2h1Z2V0bGIuYzo1OTgyOlx0XHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgdm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZm9saW8pO1xubW0vaHVnZXRsYi5jLTU5ODMtXG4tLVxubW0vaHVnZXRsYi5jPTYyNzY9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjM1Mi1cdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo2MzUzOlx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBkc3RfYWRkciwgZm9saW8pO1xubW0vaHVnZXRsYi5jLTYzNTQtXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmMtNjM5MC1cdFx0aWYgKHJldCkge1xubW0vaHVnZXRsYi5jOjYzOTE6XHRcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGRzdF9hZGRyLCBmb2xpbyk7XG5tbS9odWdldGxiLmMtNjM5Mi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2h1Z2V0bGIuYy02NDkwLVx0aWYgKCFmb2xpb19pbl9wYWdlY2FjaGUpXG5tbS9odWdldGxiLmM6NjQ5MTpcdFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGRzdF9hZGRyLCBmb2xpbyk7XG5tbS9odWdldGxiLmMtNjQ5Mi1cdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vcm1hcC5jPTMxOTQ9dm9pZCBodWdldGxiX2FkZF9uZXdfYW5vbl9ybWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTMyMDItXHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9sYXJnZV9tYXBjb3VudCwgMCk7XG5tbS9ybWFwLmM6MzIwMzpcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL3JtYXAuYy0zMjA0LVx0X19mb2xpb19zZXRfYW5vbihmb2xpbywgdm1hLCBhZGRyZXNzLCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZSwgYnJva2VuIGRvd24gaW4gYSB3YXkgdGhhdCwgYXMgYW4gZXhwZXJ0LCBJJiMzOTtkIHByb2Nlc3MgaXQ6CgoqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKWAgYW5kIGRlY3JlbWVudHMgYGgtJmd0O3Jlc3ZfaHVnZV9wYWdlc2Agd2l0aGluIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBmdW5jdGlvbi4gVGhpcyAqaW1tZWRpYXRlbHkqIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBIdWdlVExCIGZvbGlvcy4gQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIEkmIzM5O20gcmVtZW1iZXJpbmcgY29ycmVjdGx5IOKAkyBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGFtIOKAkyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCAqc2ltcGx5KiByZXR1cm5lZCB0aGUgZm9saW8uIFRoZSByZXNlcnZhdGlvbiB3YXMgbGlrZWx5IGJlaW5nIGhhbmRsZWQgZWxzZXdoZXJlLCBvciBwZXJoYXBzICpub3QqIGV4cGxpY2l0bHksIGFuZCB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogY2hhbmdlcyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgdXNlZCB0byBsb29rIGluIGBtbS9odWdldGxiLmNgIHRvIGNvbXBhcmUgdG8gdGhlIHVwZGF0ZWQgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcmVzZXJ2ZSBtdXN0IGhhdmUgYmVlbiBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE2ODpcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuMjE2OTpcdFx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4yMTcwOlx0e1xuMjE3MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjIxNzI6XHRcbjIxNzM6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjIxNzQ6XHRcdGlmICghaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMpIHtcbjIxNzU6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yMTc2Olx0XHRcdHJldHVybiBOVUxMO1xuMjE3NzpcdFx0fVxuMjE3ODpcdFxuMjE3OTpcdFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4yMTgwOlx0XHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4yMTgxOlx0XHRpZiAoZm9saW8pIHtcbjIxODI6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbjIxODM6XHRcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbjIxODQ6XHRcdH1cbjIxODU6XHRcbjIxODY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjE4NzpcdFx0cmV0dXJuIGZvbGlvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZGlmZiBpbiBgbW0vaHVnZXRsYi5jYC4gIEJlZm9yZSwgdGhlIGNvZGUgY2hlY2tlZCBpZiBhIGZvbGlvIHdhcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQgYW5kLCBpZiBzbywgZGVjcmVtZW50ZWQgdGhlIHJlc2VydmVkIGh1Z2UgcGFnZSBjb3VudCAoYGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcy0tYCkuIFRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtgICp3aXRoaW4qIHRoYXQgYGlmYCBibG9jay4gIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHNldHMgYSBmbGFnIG9uIHRoZSBmb2xpbywgYGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCwgaWYgdGhlIGZvbGlvIGlzIGFsbG9jYXRlZCBmcm9tIHRoZSByZXNlcnZlLiBUaGlzIG1lYW5zIGlmIHRoZSBmb2xpbyBnZXRzIGZyZWVkLCB3ZSBjYW4gcmVzdG9yZSB0aGUgcmVzZXJ2YXRpb24uCgpUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBsb2dpYy4gSXQmIzM5O3Mgbm90IGp1c3QgYSByZWZhY3RvciBvciBjb3NtZXRpYyBjaGFuZ2U7IGl0IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIGh1Z2UgcGFnZSByZXNlcnZlIHN5c3RlbSBpbiB0aGUga2VybmVsLiBUaGlzIGNoYW5nZSBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIG5vdyBuZWVkIHRvIGNoZWNrIHdoZXJlIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzIGNhbGxlZCBmcm9tIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0byBidWlsZCBhIGZ1enogdGVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwNT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVx0XHRcdFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cdFx0XHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTY3LVxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE2OS1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtOTMtXG5tbS9tZW1mZC5jOjk0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxubW0vbWVtZmQuYy05NS1cdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDUxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtZW1mZF9hbGxvY19mb2xpb2AqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGNhbGwuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY29taW5nIGZyb20gYG1lbWZkX2FsbG9jX2ZvbGlvYCB3aXRoaW4gYG1tL21lbWZkLmNgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMsIGxpa2VseSB0aWVkIHRvIGFub255bW91cyBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgYG1lbWZkX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgb2YgYWxsb2NhdGlvbiwgdGhlIGNvcmUgb2YgaG93IHRoaXMgYWxsIGdldHMgaW5zdGFudGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBjYWxsIGltcGxpZXMgaXQmIzM5O3MgYSBmb2xpby1iYXNlZCBhbGxvY2F0aW9uLiBXaGljaCBhbHNvIHRlbGxzIG1lIHRoYXQgdGhleSBhcmVuJiMzOTt0IHdvcmtpbmcgd2l0aCB0cmFkaXRpb25hbCBwYWdlcy4gQSBmb2xpbyBpcyBhIG11Y2ggbW9yZSBtb2Rlcm4gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtZmQuaD0xMD1leHRlcm4gbG9uZyBtZW1mZF9mY250bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IGFyZyk7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0xMi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjctfVxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTI5LXtcbi0tXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5tbS9ndXAuYy0zNTE4LVx0XHRcdGlmICghbnJfZm91bmQpIHtcbm1tL2d1cC5jOjM1MTk6XHRcdFx0XHRmb2xpbyA9IG1lbWZkX2FsbG9jX2ZvbGlvKG1lbWZkLCBzdGFydF9pZHgpO1xubW0vZ3VwLmMtMzUyMC1cdFx0XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY3LSAqL1xubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG5tbS9tZW1mZC5jLTY5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRm9saW8gQWxsb2NhdGlvbiB3aXRoaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGZvbGlvIGFsbG9jYXRpb24gcHJvY2VzcywgYW5kIGl0IGxvb2tzIGxpa2UgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgbWVtZmRfcGluX2ZvbGlvc2Agd2l0aGluIGBtbS9ndXAuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkga25vdyBgZ3VwLmNgIGlzIHRoZSAmIzM0O2dldCB1c2VyIHBhZ2VzJiMzNDsgY29kZSwgd2hpY2ggaXMgYWxsIGFib3V0IHNlY3VyZWx5IGFjY2Vzc2luZyB1c2VyLXNwYWNlIG1lbW9yeSwgYW5kIHBpbm5pbmcgdGhvc2UgcGFnZXMgaW4gdGhlIHBhZ2UgdGFibGVzLiBTbywgdGhpcyBgbWVtZmRfcGluX2ZvbGlvc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwaW5uaW5nIGZvbGlvcyByZWxhdGVkIHRvIG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIChtZW1mZHMpLiBJdCBtYWtlcyBzZW5zZSB0aGF0IHdlIG5lZWQgYSB3YXkgdG8gYWxsb2NhdGUgdGhlIGZvbGlvIGFuZCBnZXQgaXQgcmVhZHkgZm9yIHBpbm5pbmcsIGhlbmNlIHRoZSBjYWxsIHRvIGBtZW1mZF9hbGxvY19mb2xpb2AuIEkgd29uZGVyIHdoYXQgdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gZmxhZ3MgYW5kIGNvbnN0cmFpbnRzIGFyZSwgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aG9zZSBmdW5jdGlvbiBjYWxscyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgYnV0IHRoaXMgYXQgbGVhc3QgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtZmQgZm9saW9zIGFyZSBiZWluZyBoYW5kbGVkIGR1cmluZyBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBzZWUgd2hhdCBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCBhbmQgaG93IHRoZSBmb2xpbyBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE1LVx0ZW5kID0gc3RhcnQgJiM0MzsgKHBnY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIDE7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMxNjpcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFx1MDAyNnBnb2ZmKTtcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE3LVx0aWYgKG5yX2ZvbGlvcyBcdTAwM2M9IDApXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXHRcdCAqIEluIGEgZ2l2ZW4gcmFuZ2UsIG9ubHkgdGhlIGZpcnN0IHN1YnBhZ2Ugb2YgdGhlIGZpcnN0IGZvbGlvXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcdFx0ICogaGFzIGFuIG9mZnNldCwgdGhhdCBpcyByZXR1cm5lZCBieSBtZW1mZF9waW5fZm9saW9zKCkuXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cdFx0ICogVGhlIGZpcnN0IHN1YnBhZ2VzIG9mIG90aGVyIGZvbGlvcyAoaW4gdGhlIHJhbmdlKSBoYXZlIGFuXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cdC8qXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MzU6XHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVx0ICogd2UgY2FuIGNvbXB1dGUgbnBhZ2VzIHBpbm5lZCwgYW5kIGF2b2lkIGxvb3Bpbmcgb3ZlciBmb2xpb3MgaGVyZVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cdCAqL1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5Olx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cdTAwM2VmaWxlLCBzdGFydCwgZW5kLCB1c2VyLVx1MDAzZXVmb2xpb3MsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXHRcdFx0XHQgICBuZm9saW9zLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0zMzc4PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzc5LVx0XHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzM4MDpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM4MS1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYz0xOTA9RVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3BhZ2UpO1xuLS1cbm1tL2d1cC5jLTE5NS0gKlxubW0vZ3VwLmM6MTk2OiAqIEZvbGlvcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBtZW1mZF9waW5fZm9saW9zKCkgb3Igb3RoZXIgc2ltaWxhciByb3V0aW5lc1xubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXG4tLVxubW0vZ3VwLmM9MzQxNT1FWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKTtcbi0tXG5tbS9ndXAuYy0zNDE3LS8qKlxubW0vZ3VwLmM6MzQxODogKiBtZW1mZF9waW5fZm9saW9zKCkgLSBwaW4gZm9saW9zIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWZkXG5tbS9ndXAuYy0zNDE5LSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcbi0tXG5tbS9ndXAuYy0zNDQyLSAqL1xubW0vZ3VwLmM6MzQ0Mzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5tbS9ndXAuYy0zNDQ0LVx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxuLS1cbm1tL2d1cC5jLTM1MzktfVxubW0vZ3VwLmM6MzU0MDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcbm1tL2d1cC5jLTM1NDEtXG4tLVxubW0vZ3VwLmMtMzU1MS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xubW0vZ3VwLmM6MzU1MjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xubW0vZ3VwLmMtMzU1My0gKiAoZS5nLiwgaW5kaXZpZHVhbCBwYWdlcykgb2YgdGhlIGZvbGlvIGxhdGVyLCBmb3IgZXhhbXBsZSwgdXNpbmdcbi0tXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxubW0vbWVtZmQuYy02Ni0gKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cbi0tXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vbWVtZmRfbHVvLmMtMTI5LVx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcbm1tL21lbWZkX2x1by5jOjEzMDpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XG5tbS9tZW1mZF9sdW8uYy0xMzEtXHQgKiBzbG90cy5cbm1tL21lbWZkX2x1by5jLTEzMi1cdCAqL1xubW0vbWVtZmRfbHVvLmM6MTMzOlx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxubW0vbWVtZmRfbHVvLmMtMTM0LVx0XHRcdFx0ICAgICBcdTAwMjZvZmZzZXQpO1xuLS1cbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtMjkxLVx0Lypcbm1tL21lbWZkX2x1by5jOjI5MjpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxubW0vbWVtZmRfbHVvLmMtMjkzLVx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgRm9saW8gQWxsb2NhdGlvbiBGbG93KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUsIGNhbGxlZCBkaXJlY3RseSBieSBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2Agd2l0aGluIHRoZSBpb21tdWZkIGNvbXBvbmVudC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UmIzM5O3JlIHBpbm5pbmcgbWVtb3J5LCBzbyB3ZSBuZWVkIHRvIHRyYWNrIGl0LgoKTm93LCBpZiBgbWVtZmRfcGluX2ZvbGlvc2AgZG9lc24mIzM5O3QgZmluZCBhIHN1aXRhYmxlIGZvbGlvIOKAkyB3aGljaCBpcyBwcm9iYWJseSB0aGUgaW50ZXJlc3RpbmcgYml0IOKAkyBpdCYjMzk7cyByZWFjaGluZyBvdXQgdG8gYG1lbWZkX2FsbG9jX2ZvbGlvYC4gQW5kIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBwb3RlbnRpYWxseSBjb21wbGV4LiBJJiMzOTttIG5vdGluZyB0aGF0IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCBiZW5lYXRoIGBtZW1mZF9waW5fZm9saW9zYC4gSG1tLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBhbGxvY2F0aW9uIHBhdGguIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBmcmFnbWVudGF0aW9uLgoKVGhlIGtleSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBiZXlvbmQgdGhpcyBzcGVjaWZpYyBjYWxsIGNoYWluLCAqd2hlcmUgZWxzZSogaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYmVpbmcgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoYXQgd291bGQgaW5mb3JtIG15IGFuYWx5c2lzIG9mIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwNT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVx0XHRcdFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cdFx0XHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTY3LVxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE2OS1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtOTMtXG5tbS9tZW1mZC5jOjk0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxubW0vbWVtZmQuYy05NS1cdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIE1lbWZkX0FsbG9jX0ZvbGlvIFJhYmJpdCBIb2xlKioKCk9rYXksIHNvIHRoZSB0cmFpbCBzdGFydHMgd2l0aCBgbWVtZmRfYWxsb2NfZm9saW9gLCB0aGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uIFdoZXJlJiMzOTtzIGl0IGdldHRpbmcgY2FsbGVkIGZyb20/IFJpZ2h0LCBgbWVtZmRfcGluX2ZvbGlvc2AuIE5vdyB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB1c2VyIHNwYWNlIHJlYWNoIGBtZW1mZF9waW5fZm9saW9zYCBkaXJlY3RseT8gVGhlIGFuc3dlciBpcyB5ZXMsIHdlJiMzOTt2ZSBnb3QgYHVkbWFidWZgIGFuZCBgaW9tbXVmZGAgaW4gdGhlIG1peCwgc28gdGhhdCYjMzk7cyBhIHZlY3RvciBmb3IgcG90ZW50aWFsIGludGVyYWN0aW9uLgoKTGV0IG1lIGp1c3QgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlc2UgYXJlIGxvY2F0ZWQuIGBtZW1mZF9hbGxvY19mb2xpb2AgaXMgZGVmaW5lZCBpbiBgbW0vbWVtZmQuY2AsIGdvdCBpdC4gTm93IGxldCYjMzk7cyBkb3VibGUgY2hlY2sgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJIHNlZW0gdG8gcmVjYWxsIGl0IHJlc2lkaW5nIGluIGBtbS9ndXAuY2AsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGwgY2hhaW5zIHRvIGNvbnNpZGVyLiBPa2F5LCB0aGF0JiMzOTtzIHRoZSBpbW1lZGlhdGUgcGF0aCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cdGVuZCA9IHN0YXJ0ICYjNDM7IChwZ2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcdTAwMjZwZ29mZik7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cdGlmIChucl9mb2xpb3MgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVx0XHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XHRcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXHRcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXHQvKlxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1Olx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXHQgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cdTAwM2V1Zm9saW9zLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVx0XHRcdFx0ICAgbmZvbGlvcywgXHUwMDI2b2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM3OD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM3OS1cdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMzODA6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzODEtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcbi0tXG5tbS9ndXAuYy0xOTUtICpcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxuLS1cbm1tL2d1cC5jPTM0MTU9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XG4tLVxubW0vZ3VwLmMtMzQxNy0vKipcbm1tL2d1cC5jOjM0MTg6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxubW0vZ3VwLmMtMzQxOS0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXG4tLVxubW0vZ3VwLmMtMzQ0Mi0gKi9cbm1tL2d1cC5jOjM0NDM6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxubW0vZ3VwLmMtMzQ0NC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0zNTM5LX1cbm1tL2d1cC5jOjM1NDA6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XG5tbS9ndXAuYy0zNTQxLVxuLS1cbm1tL2d1cC5jLTM1NTEtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cbm1tL2d1cC5jOjM1NTI6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcbm1tL2d1cC5jLTM1NTMtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4tLVxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTEyOS1cdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXG5tbS9tZW1mZF9sdW8uYzoxMzA6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxubW0vbWVtZmRfbHVvLmMtMTMxLVx0ICogc2xvdHMuXG5tbS9tZW1mZF9sdW8uYy0xMzItXHQgKi9cbm1tL21lbWZkX2x1by5jOjEzMzpcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcbm1tL21lbWZkX2x1by5jLTEzNC1cdFx0XHRcdCAgICAgXHUwMDI2b2Zmc2V0KTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTI5MS1cdC8qXG5tbS9tZW1mZF9sdW8uYzoyOTI6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcbm1tL21lbWZkX2x1by5jLTI5My1cdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHVkbWFidWZgIGFuZCBgaW9tbXVmZGAgc2l0dWF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBib3RoIGxldmVyYWdpbmcgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJbnRlcmVzdGluZy4gVGhlIG5leHQgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kIGlzLCAmIzM0O0hvdyBhY2Nlc3NpYmxlIGlzIGB1ZG1hYnVmYD8gSXMgaXQganVzdCB0aHJvdWdoIGtlcm5lbCBmdW5jdGlvbnMgb3IgZG9lcyBpdCBleHBvc2UgaXRzZWxmIHRocm91Z2ggYSBzeXN0ZW0gY2FsbD8mIzM0Oy4gTG9va3MgbGlrZSBpdCBkb2VzLCB1c2luZyBgaW9jdGwoVURNQUJVRl9DUkVBVEUpYCBvciBzb21ldGhpbmcgc2ltaWxhci4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O2xsIG5lZWQgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jYC4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VURNQUJVRl9DUkVBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00ODk9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDk0LVx0c3dpdGNoIChpb2N0bCkge1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0OTU6XHRjYXNlIFVETUFCVUZfQ1JFQVRFOlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00OTYtXHRcdHJldCA9IHVkbWFidWZfaW9jdGxfY3JlYXRlKGZpbHAsIGFyZyk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5Ny1cdFx0YnJlYWs7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ5ODpcdGNhc2UgVURNQUJVRl9DUkVBVEVfTElTVDpcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDk5LVx0XHRyZXQgPSB1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0KGZpbHAsIGFyZyk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaD0yND1zdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfbGlzdCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaC0yOS1cbmluY2x1ZGUvdWFwaS9saW51eC91ZG1hYnVmLmg6MzA6I2RlZmluZSBVRE1BQlVGX0NSRUFURSAgICAgICBfSU9XKCYjMzk7dSYjMzk7LCAweDQyLCBzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUpXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oOjMxOiNkZWZpbmUgVURNQUJVRl9DUkVBVEVfTElTVCAgX0lPVygmIzM5O3UmIzM5OywgMHg0Mywgc3RydWN0IHVkbWFidWZfY3JlYXRlX2xpc3QpXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oLTMyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmM9Mjk9c3RhdGljIGludCBjcmVhdGVfdWRtYWJ1Zih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmMtNTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9kbWFidWZfaXRlci5jOjU5Olx0bG9jYWxfdWRtYWJ1ZiA9IGlvY3RsKGRldl91ZG1hYnVmLCBVRE1BQlVGX0NSRUFURSwgXHUwMDI2Y3JlYXRlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmMtNjAtXHRjbG9zZShkZXZfdWRtYWJ1Zik7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz01Nz1zdGF0aWMgaW50IGNyZWF0ZV91ZG1hYnVmX2xpc3QoaW50IGRldmZkLCBpbnQgbWVtZmQsIG9mZjY0X3QgbWVtZmRfc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTc2LVx0bGlzdC1cdTAwM2VmbGFncyA9IFVETUFCVUZfRkxBR1NfQ0xPRVhFQztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6Nzc6XHR1YnVmX2ZkID0gaW9jdGwoZGV2ZmQsIFVETUFCVUZfQ1JFQVRFX0xJU1QsIGxpc3QpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy03OC1cdGZyZWUobGlzdCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0xMzM9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE3NS1cdGNyZWF0ZS5zaXplICAgPSBnZXRwYWdlc2l6ZSgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoxNzY6XHRidWYgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFx1MDAyNmNyZWF0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE3Ny1cdGlmIChidWYgXHUwMDNlPSAwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTg1LVx0Y3JlYXRlLnNpemUgICA9IGdldHBhZ2VzaXplKCkvMjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTg2Olx0YnVmID0gaW9jdGwoZGV2ZmQsIFVETUFCVUZfQ1JFQVRFLCBcdTAwMjZjcmVhdGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xODctXHRpZiAoYnVmIFx1MDAzZT0gMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5NS1cdGNyZWF0ZS5zaXplICAgPSBzaXplO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoxOTY6XHRidWYgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFx1MDAyNmNyZWF0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTE5Ny1cdGlmIChidWYgXHUwMDNlPSAwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMjA4LVx0Y3JlYXRlLnNpemUgICA9IHNpemU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjIwOTpcdGJ1ZiA9IGlvY3RsKGRldmZkLCBVRE1BQlVGX0NSRUFURSwgXHUwMDI2Y3JlYXRlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMjEwLVx0aWYgKGJ1ZiBcdTAwM2MgMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTE0MT1zdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xODEtXHRjcmVhdGUuc2l6ZSA9IHNpemU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjE4MjpcdGN0eC1cdTAwM2VmZCA9IGlvY3RsKGN0eC1cdTAwM2VkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFx1MDAyNmNyZWF0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTE4My1cdGlmIChjdHgtXHUwMDNlZmQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBDb21wb25lbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCBgdWRtYWJ1ZmAgaXMgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gc2VlIGFib3V0IGBpb21tdWZkYC4gQWgsIHllcywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGNvcmUgc3Vic3lzdGVtIEkgbmVlZCB0byBiZSBjb25zaWRlcmluZy4gRXhwYW5kaW5nIG91dHdhcmRzLCBJIHNlZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGFsc28gYSByZWFjaGFibGUgZnVuY3Rpb24uIEdvb2QsIGdvb2QuIEJ1dCB3aGF0IGFib3V0IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgPyBBaCwgSSByZW1lbWJlciwgdGhhdCYjMzk7cyBjYWxsZWQgd2hlbiBgbWVtZmRfYWxsb2NfZm9saW9gIGFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8g4oCTIHRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBIb2xkIG9uLCBgbWVtZmRfYWxsb2NfZm9saW9gICpvbmx5KiBhbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIGlmIHRoZSBtZW1mZCBpcyBhIGh1Z2V0bGJmcyBmaWxlLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIC0gdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGJlaGF2aW91ci4gUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9tZW1mZC5jYCBhbmQgY2hlY2sgYG1lbWZkX2FsbG9jX2ZvbGlvYCBkaXJlY3RseS4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjg6XHRzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4gIDY5Olx0e1xuICA3MDpcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gIDcxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICA3MjpcdFx0Z2ZwX3QgZ2ZwX21hc2s7XG4gIDczOlx0XG4gIDc0Olx0XHRpZiAoaXNfZmlsZV9odWdlcGFnZXMobWVtZmQpKSB7XG4gIDc1Olx0XHRcdC8qXG4gIDc2Olx0XHRcdCAqIFRoZSBmb2xpbyB3b3VsZCBtb3N0IGxpa2VseSBiZSBhY2Nlc3NlZCBieSBhIERNQSBkcml2ZXIsXG4gIDc3Olx0XHRcdCAqIHRoZXJlZm9yZSwgd2UgaGF2ZSB6b25lIG1lbW9yeSBjb25zdHJhaW50cyB3aGVyZSB3ZSBjYW5cbiAgNzg6XHRcdFx0ICogYWxsb2MgZnJvbS4gQWxzbywgdGhlIGZvbGlvIHdpbGwgYmUgcGlubmVkIGZvciBhbiBpbmRlZmluaXRlXG4gIDc5Olx0XHRcdCAqIGFtb3VudCBvZiB0aW1lLCBzbyBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbWlncmF0ZWQgYXdheS5cbiAgODA6XHRcdFx0ICovXG4gIDgxOlx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKG1lbWZkKTtcbiAgODI6XHRcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcbiAgODM6XHRcdFx0aW50IGVyciA9IC1FTk9NRU07XG4gIDg0Olx0XHRcdGxvbmcgbnJfcmVzdjtcbiAgODU6XHRcbiAgODY6XHRcdFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4gIDg3Olx0XHRcdGdmcF9tYXNrIFx1MDAyNj0gfihfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSk7XG4gIDg4Olx0XHRcdGlkeCBcdTAwM2VcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcbiAgODk6XHRcbiAgOTA6XHRcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcbiAgOTE6XHRcdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApXG4gIDkyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIobnJfcmVzdik7XG4gIDkzOlx0XG4gIDk0Olx0XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG4gIDk1Olx0XHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuICA5NjpcdFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuICA5NzpcdFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4gIDk4Olx0XHRcdGlmIChmb2xpbykge1xuICA5OTpcdFx0XHRcdHUzMiBoYXNoO1xuIDEwMDpcdFxuIDEwMTpcdFx0XHRcdC8qXG4gMTAyOlx0XHRcdFx0ICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuXG4gMTAzOlx0XHRcdFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xuIDEwNDpcdFx0XHRcdCAqIHBhZ2VzLiBQYXNzIDAgYXMgYWRkcl9oaW50IHNpbmNlIHRoaXMgaXMgbm90IGEgZmF1bHRpbmcgcGF0aFxuIDEwNTpcdFx0XHRcdCAqICBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgYSB1c2VyIHZpcnR1YWwgYWRkcmVzcyB5ZXQuXG4gMTA2Olx0XHRcdFx0ICovXG4gMTA3Olx0XHRcdFx0Zm9saW9femVyb191c2VyKGZvbGlvLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NjcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG1lbWZkX2FsbG9jX2ZvbGlvYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB5ZXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBpc3N1ZS4gTXkgaW5pdGlhbCByZWFkIGNvbmZpcm1zIHRoYXQgYG1lbWZkX2FsbG9jX2ZvbGlvYCAqZG9lcyogaW5kZWVkIGFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpbyB3aGVuIGRlYWxpbmcgd2l0aCBhIG1lbWZkIGZsYWdnZWQgZm9yIGh1Z2VwYWdlcyDigJMgcHJlY2lzZWx5IGFzIGludGVuZGVkLiBUaGlzIG9jY3VycyBmb2xsb3dpbmcgYSBjYWxsIHRvIGBtZW1mZF9waW5fZm9saW9zYCBvbiBhIGh1Z2V0bGJmcyBtZW1mZC4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIGluIGEgbWlzc2luZyBjYWxsIHRvIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pYC4gVGhpcyBtZWFucyB0aGF0IGlmIGEgZm9saW8gYWxsb2NhdGVkIGluIHRoaXMgbWFubmVyIGdldHMgZnJlZWQsIHRoZSBuZWNlc3NhcnkgcmVzZXJ2YXRpb24gaXNuJiMzOTt0IGJlaW5nIHByb3Blcmx5IHJlc3RvcmVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGxlYWthZ2UgYW5kIHBvc3NpYmxlIGZyYWdtZW50YXRpb24gaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNyaXRpY2FsIG9uZSBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgbmVlZHMgdG8gYmUgYnVsbGV0cHJvb2YuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgZnV6emluZyB0aGlzLiBZZXMsIGFic29sdXRlbHksIGl0JiMzOTtzIHdhcnJhbnRlZCBnaXZlbiB0aGUgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzcG90IHdlIHNob3VsZCBwdXQgdW5kZXIgc2NydXRpbnkuIE5vdywgd2hhdCYjMzk7cyB0aGUgbW9zdCByZWxldmFudCBmb2N1cyBzeW1ib2wgaGVyZT8gQWgsICp0aGF0KiB3b3VsZCBiZSBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gSGFuZyBvbiwgaXMgdGhpcyBmdW5jdGlvbiBleHBvcnRlZCBvciBub24tc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjay4gTGV0JiMzOTtzIHB1bGwgdXAgYG1tL2h1Z2V0bGIuY2AgdG8gY29uZmlybSBpdHMgc2NvcGUgYW5kIHVzYWdlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgdGFyZ2V0IGNhbiBiZSBkaXJlY3RseSB0YXJnZXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLgpZb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS4KRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsCnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDk0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IHN0YXJ0ZWQgYnkgZ3JlcHBpbmcgZm9yIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLiBHb29kLCBpdCYjMzk7cyBub3Qgc3RhdGljLCBhbmQgSSBmb3VuZCBpdCBpbiBgbW0vaHVnZXRsYi5jYC4gRXhjZWxsZW50LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIHNlZSwgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBgbWVtZmRfYWxsb2NfZm9saW9gLiBPa2F5LCB0aGF0JiMzOTtzIGEgdXNlZnVsIGNvbm5lY3Rpb24uIEFyZSB0aGVyZSBvdGhlciBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXI/IEFoLCB5ZXMsIGBtZW1mZF9hbGxvY19mb2xpb2AgaXRzZWxmIGlzIGEgc29saWQgc3ltYm9sIHRvIGtlZXAgaW4gZm9jdXMsIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AgbG9va3MgcHJvbWlzaW5nIHRvby4KCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGFnYWluIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IHN0YXRpYzoKCmBgYGMKc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsCgkJbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKQpgYGAKCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIHdoYXQgZG8gSSBuZWVkPyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBmb3IgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYW5kIGFsc28gZm9yIGBpc19maWxlX2h1Z2VwYWdlc2AuIFRpbWUgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIG9yIG1heWJlIGV2ZW4gYGZzL0tjb25maWdgIHRvIHBpbiBkb3duIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTEyOT1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTM0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjEzNTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTEzOC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Mi1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDM6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTQ1LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Njpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTQ3LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTQ5LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE1MDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE1MS1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbi0tXG5tbS9LY29uZmlnLTY5Ni1cbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy02OTgtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjY2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGV4cGxpY2l0IGFib3V0IHRoZXNlIGRlcGVuZGVuY2llcy4gU28sIHRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvZiBgSFVHRVRMQkZTYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgSHVnZVRMQiBmaWxlc3lzdGVtIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZvciB0aGUgdGFzayBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MzIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBtZW1mZF9waW5fZm9saW9zYCBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEhVR0VUTEJGU2AgbWlnaHQgYmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gaGVyZS4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3YXJyYW50cyBhIGRlZXBlciBkaXZlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9uLiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9ndXAuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIGl0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZXhlY3V0ZWQgYmFzZWQgb24gKmFueSoga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSSBuZWVkIHRvIGtub3cgaWYgaXRzIGJlaGF2aW9yIGlzIGNvbnRpbmdlbnQgb24gdGhpbmdzIGxpa2UgaHVnZSBwYWdlcywgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dGluZ3MuIFRvIGNsYXJpZnkgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgbW0vZ3VwLmNgIGl0c2VsZi4gSeKAmW0gZ29pbmcgdG8gcG9yZSBvdmVyIHRoYXQgY29kZSBub3cgYW5kIHZlcmlmeSBpZiBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgYWZmZWN0cyB0aGUgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yIG9mIGBtZW1mZF9waW5fZm9saW9zYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0aGF0IHdvdWxkIGxpbmsgaXRzIHVzZSB0byBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cdGVuZCA9IHN0YXJ0ICYjNDM7IChwZ2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcdTAwMjZwZ29mZik7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cdGlmIChucl9mb2xpb3MgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVx0XHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XHRcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXHRcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXHQvKlxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1Olx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXHQgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cdTAwM2V1Zm9saW9zLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVx0XHRcdFx0ICAgbmZvbGlvcywgXHUwMDI2b2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM3OD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM3OS1cdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMzODA6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzODEtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcbi0tXG5tbS9ndXAuYy0xOTUtICpcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxuLS1cbm1tL2d1cC5jPTM0MTU9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XG4tLVxubW0vZ3VwLmMtMzQxNy0vKipcbm1tL2d1cC5jOjM0MTg6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxubW0vZ3VwLmMtMzQxOS0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXG4tLVxubW0vZ3VwLmMtMzQ0Mi0gKi9cbm1tL2d1cC5jOjM0NDM6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxubW0vZ3VwLmMtMzQ0NC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0zNTM5LX1cbm1tL2d1cC5jOjM1NDA6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XG5tbS9ndXAuYy0zNTQxLVxuLS1cbm1tL2d1cC5jLTM1NTEtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cbm1tL2d1cC5jOjM1NTI6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcbm1tL2d1cC5jLTM1NTMtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4tLVxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTEyOS1cdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXG5tbS9tZW1mZF9sdW8uYzoxMzA6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxubW0vbWVtZmRfbHVvLmMtMTMxLVx0ICogc2xvdHMuXG5tbS9tZW1mZF9sdW8uYy0xMzItXHQgKi9cbm1tL21lbWZkX2x1by5jOjEzMzpcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcbm1tL21lbWZkX2x1by5jLTEzNC1cdFx0XHRcdCAgICAgXHUwMDI2b2Zmc2V0KTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTI5MS1cdC8qXG5tbS9tZW1mZF9sdW8uYzoyOTI6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcbm1tL21lbWZkX2x1by5jLTI5My1cdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtleSBTeW1ib2xzIGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKgoKT2theSwgc28gYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgYSBrbm93biBxdWFudGl0eS4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGlzIHdoZXRoZXIgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBhbHNvIGV4cG9ydGVkLiBIbW0sIG5vLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBtbS9tZW1mZC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtZmQuaGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgdXNhZ2UuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzZWVpbmcgYG1lbWZkX2FsbG9jX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbSBgbW0vZ3VwLmNgLiBZZXAsIHRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoYXQgZmVlbHMgbGlrZSBhIHNvbGlkIGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBzZWXigKYgSSBhbHNvIGtub3cgdGhhdCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpcyByZWxldmFudCBoZXJlLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoYXQmIzM5O3MgZXhwb3J0ZWQuIE5vcGUsIG5vdCBleHBvcnRlZCwgYnV0IGl0IGlzICpub24tc3RhdGljKi4gT2theSwgc28gYm90aCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBhbmQgYG1lbWZkX2FsbG9jX2ZvbGlvYCBhcmUgcHJpbWUgY2FuZGlkYXRlcy4gQWgsIGEgc21hbGwgZXBpcGhhbnkhIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzIGNhbGxlZCBmcm9tIGBtZW1mZF9hbGxvY19mb2xpb2AsIGFuZCBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGBtZW1mZF9waW5fZm9saW9zYC4gVGhlcmVmb3JlLCBpbmNsdWRpbmcgYG1lbWZkX3Bpbl9mb2xpb3NgIHdpbGwgZ2l2ZSBtZSBnb29kIGluc2lnaHQuIFNvIGl0JiMzOTtzIGJlc3QgdG8gbG9vayBhdCBhbGwgdGhyZWUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS9tZW1mZC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1mZF9hbGxvY19mb2xpb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtZmQuaD0xMD1leHRlcm4gbG9uZyBtZW1mZF9mY250bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IGFyZyk7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0xMi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjctfVxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTI5LXtcbi0tXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5tbS9ndXAuYy0zNTE4LVx0XHRcdGlmICghbnJfZm91bmQpIHtcbm1tL2d1cC5jOjM1MTk6XHRcdFx0XHRmb2xpbyA9IG1lbWZkX2FsbG9jX2ZvbGlvKG1lbWZkLCBzdGFydF9pZHgpO1xubW0vZ3VwLmMtMzUyMC1cdFx0XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY3LSAqL1xubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG5tbS9tZW1mZC5jLTY5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG1lbWZkX2FsbG9jX2ZvbGlvYCBhbmQgVURNQUJVRioqCgpSaWdodCwgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBJIHN1c3BlY3RlZC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGVuc3VyZSB0aGF0IHRoZSBgVURNQUJVRmAgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZGV0YWlscyB3aXRoaW4gdGhlIGBVRE1BQlVGYCBjb25maWcsIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5LCBiZWNhdXNlIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyB3b3JrIHRvZ2V0aGVyIGlzIGNlbnRyYWwgdG8gdGhlIGRlc2lnbiBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVURNQUJVRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTMyLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDt1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgVURNQUJVRiBhbmQgSU9NTVVGRCBmb3IgT3B0aW1pemVkIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIGl0IHNlZW1zIGxpa2UgbGV2ZXJhZ2luZyBgVURNQUJVRmAgaXMgYSBzb2xpZCBwYXRoIGZvcndhcmQuIFNwZWNpZmljYWxseSwgZW5hYmxpbmcgYHVkbWFidWZfcGluX2ZvbGlvc2AgbG9va3MgcHJvbWlzaW5nIHRvIGdhaW4gZGlyZWN0IGFjY2VzcyB0byB0aGUgbWVtb3J5IHZpYSBgVURNQUJVRmAuIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGF0IGFwcHJvYWNoIGFsaWducyB3aXRoIHRoZSBwZXJmb3JtYW5jZSBnb2Fscy4KCkZ1cnRoZXJtb3JlLCBJJiMzOTttIGNvbnNpZGVyaW5nIGVuYWJsaW5nIGBJT01NVUZEYCBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGlzLiBJdCBtaWdodCBvZmZlciBzb21lIGFkZGl0aW9uYWwgZmxleGliaWxpdHkgb3IgY29udHJvbCwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhIEkmIzM5O20gaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gd2VpZ2ggdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiBgSU9NTVVGRGAgYWdhaW5zdCBgVURNQUJVRmAgYW5kIGhvdyB0aGV5JiMzOTtkIGludGVncmF0ZSB3aXRoIG15IGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgYmVuY2htYXJrcyB0byBtYWtlIGEgZnVsbHkgaW5mb3JtZWQgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT01NVUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZz03PWNvbmZpZyBJT01NVV9BUElcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWctOS1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoxMDpjb25maWcgSU9NTVVGRF9EUklWRVJcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMS1cdGJvb2xcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mjpjb25maWcgSU9NTVVGRF9EUklWRVJfQ09SRVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMy1cdGJvb2xcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy01LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Njpjb25maWcgSU9NTVVGRFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0lPTU1VIFVzZXJzcGFjZSBBUElcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0xOD1pZiBJT01NVUZEXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoxOTpjb25maWcgSU9NTVVGRF9WRklPX0NPTlRBSU5FUlxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjAtXHRib29sIFwmIzM0O0lPTU1VRkQgcHJvdmlkZXMgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMzgtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzozOTpjb25maWcgSU9NTVVGRF9URVNUXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SU9NTVUgVXNlcnNwYWNlIEFQSSBUZXN0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgSU9NTVVGRGAgaGVyZSwgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjb25zaWRlci4gQnV0IHJlYWxseSwgdGhlIG9uZXMgSSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYEhVR0VUTEJGU2AgYW5kIGBVRE1BQlVGYC4gVGhvc2UgYXJlIHRoZSBiaWcgcGxheWVycywgdGhlIG9uZXMgdGhhdCBvZnRlbiBtYWtlIG9yIGJyZWFrIG15IHNldHVwLiBGaXJzdCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgSFVHRVRMQkZTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgcmVsaWVzIG9uIG90aGVyIG9wdGlvbnMgYmVpbmcgZW5hYmxlZCBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkLiBHb3R0YSBtYXAgb3V0IHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYXZvaWQgYW55IHN1cnByaXNlcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEtjb25maWcgZm9yIEhVR0VUTEJGUyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24uIFdoZXJlIGRvZXMgdGhlIGtlcm5lbCBkZWZpbmUgdGhhdD8gUmlnaHQsIGBmcy9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgZmlsZXN5c3RlbS1yZWxhdGVkIG9wdGlvbnMuIExldCYjMzk7cyBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBjb25maWcgSFVHRVRMQkZTYCBkaXJlY3RpdmUsIGxpa2VseSB3aXRoIHNvbWUgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBldmVuIHNvbWUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgaXRzIHB1cnBvc2UgYW5kIHVzZS4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgaWYgYW55IG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMgb3IgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIG5lYXJieSwganVzdCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiAyNjU6XHRcdGRlZmF1bHQgblxuIDI2NjpcdFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgbXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBob3cgdGhleSByZWxhdGUgdG8gdGhlIGh1Z2UgcGFnZXMuIEl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYEhVR0VUTEJGU2AgaXMgdGhlICpwcmltYXJ5KiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG9mIGludGVyZXN0IGJlY2F1c2UgaXRzIHByZXNlbmNlIGlzIGdhdGVkIG9uIHRoZSBtb3JlIGZ1bmRhbWVudGFsIGhhcmR3YXJlIHJlcXVpcmVtZW50IGRlZmluZWQgYnkgYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYC4gU2luY2UgdGhlIGFyY2hpdGVjdHVyZSAqbXVzdCogc3VwcG9ydCBodWdlIHBhZ2VzIHRvIGVuYWJsZSBgSFVHRVRMQkZTYCwgdGhhdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbiBmaXJzdCBhbmQgZm9yZW1vc3QuCgpOb3csIEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMgYSBiaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBMZXQmIzM5O3MgbG9vayBhdCBgVURNQUJVRmAuIEkga25vdyB0aGlzIGlzIHVzZWQgYnkgc2V2ZXJhbCBkbWEtYnVmIGRyaXZlcnMuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHRyZWUuCkkmIzM5O2xsIGdvIGNoZWNrIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgdG8gc3RhcnQsIGFuZCBzZWUgaWYgaXQgaW50ZXJhY3RzIHdpdGggbXkgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMzpcdGNvbmZpZyBVRE1BQlVGXG4gIDM0Olx0XHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiAgMzU6XHRcdGRlZmF1bHQgblxuICAzNjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICAzNzpcdFx0ZGVwZW5kcyBvbiBNRU1GRF9DUkVBVEUgfHwgQ09NUElMRV9URVNUXG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1NVVxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBBIGRyaXZlciB0byBsZXQgdXNlcnNwYWNlIHR1cm4gbWVtZmQgcmVnaW9ucyBpbnRvIGRtYS1idWZzLlxuICA0MTpcdFx0ICBRZW11IGNhbiB1c2UgdGhpcyB0byBjcmVhdGUgaG9zdCBkbWFidWZzIGZvciBndWVzdCBmcmFtZWJ1ZmZlcnMuXG4gIDQyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTE1CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYFVETUFCVUZgIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBmb2N1cyBpcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYFVETUFCVUZgIHJlbGllcyBoZWF2aWx5IG9uIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBNRU1GRF9DUkVBVEVgLCB3aGljaCwgaW4gdHVybiwgcG9pbnRzIGRpcmVjdGx5IHRvIGBIVUdFVExCRlNgIGJlaW5nIGEga2V5IGNvbmZpZ3VyYXRpb24gZWxlbWVudCBhbG9uZ3NpZGUgYFVETUFCVUZgIGl0c2VsZi4gU28sIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBhbmQgYFVETUFCVUZgIGFyZSB0aGUgd2lubmVycyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhc3BlY3QuIFRoZSBrZXkgc3ltYm9scyBpZGVudGlmaWVkIOKAkyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCwgYG1lbWZkX2FsbG9jX2ZvbGlvYCwgYW5kIGBtZW1mZF9waW5fZm9saW9zYCDigJMgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0IHRoZSBhcmVhIG9mIGNvbmNlcm4uIFRoZSBjcnV4IG9mIHRoZSBmaXggaXMgdGhhdCBhIGNydWNpYWwgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgY2FsbCB3YXMgbWlzc2luZyB3aXRoaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgc3BlY2lmaWNhbGx5IHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBoZWFydCBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIdWdldGxiIHN1YnN5c3RlbS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSBpcyB0aGUgdXNlcnNwYWNlIHJlYWNoYWJpbGl0eSB2aWEgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJZiBhIHVzZXIgY2FuIHVzZSBgdWRtYWJ1ZmAgb3IgZXZlbiBgaW9tbXVmZGAgaW4gY29uanVuY3Rpb24gd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCwgdGhleSBjYW4gaGl0IHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBtYWtpbmcgdGhpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGVmZmVjdGl2ZWx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgcmVzZXJ2YXRpb24gbGVhayBvciBjb3JydXB0aW9uIHNjZW5hcmlvIHRyaWdnZXJlZCB0aHJvdWdoIHRoaXMgdXNlci1zcGFjZSBpbnRlcmZhY2UuIFRoaXMgdHlwZSBvZiBwYXRjaCBpcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBsaWtlbHkgZ28gdW5ub3RpY2VkIGluIGRheS10by1kYXkgdXNlLCBidXQgd2hlbiBwdXNoZWQgdG8gaXRzIGxpbWl0cyBjb3VsZCBjYXVzZSBhbiBpc3N1ZSB0aGF0IGNvdWxkIGJlIGV4cGxvaXRhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1VETUFCVUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7bWVtZmRfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgY2FsbCBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCB3aGVuIGEgZm9saW8gaXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoaHVnZXRsYikgdGhhdCBhZmZlY3RzIGhvdyByZXNlcnZhdGlvbnMgYXJlIHJlc3RvcmVkIHdoZW4gZm9saW9zIGFyZSBmcmVlZC4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYG1lbWZkX3Bpbl9mb2xpb3NgIChlLmcuLCB1c2luZyBgdWRtYWJ1ZmAgb3IgYGlvbW11ZmRgIHdpdGggYSBodWdldGxiZnMgbWVtZmQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDttZW1mZF9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZWJjOTY2M2E5ZTI3N2VlNzBiYjk1NDkwY2JkNTQyMTVjN2JhMjgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDI6NDE6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjE3OCw4ICYjNDM7MjE3OCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCWZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLCBwcmVmZXJyZWRfbmlkLAogCQkJCQkgICAgICAgbm1hc2spOwotCWlmIChmb2xpbykKJiM0MzsJaWYgKGZvbGlvKSB7CiYjNDM7CQlmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pOwogCQloLSZndDtyZXN2X2h1Z2VfcGFnZXMtLTsKJiM0MzsJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAlyZXR1cm4gZm9saW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2V0bGIgRm9saW8gUmVzZXJ2ZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGluIGBtbS9odWdldGxiLmNgLiBJdCYjMzk7cyBhZGRpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7YCB3aGVuIHRoZSBgZm9saW9gIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBsb29rIGludG8gd2hhdCBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBhY3R1YWxseSAqZG9lcyouIE15IGd1dCBmZWVsaW5nIGlzIGl0JiMzOTtzIHByb2JhYmx5IGEgZmxhZyBzZXR0aW5nIG9wZXJhdGlvbiBvbiB0aGUgZm9saW8gc3RydWN0dXJlIGl0c2VsZi4KCkhtbSwgdGhpcyBpbml0aWFsbHkgZG9lc24mIzM5O3Qgc2NyZWFtICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSYjMzQ7IHRvIG1lLiBJdCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBzcXVhcmVseSBpbiB0aGUgcmVhbG0gb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaHVnZXRsYiByZXNlcnZlcyBhbmQgZm9saW8gZmxhZ3MuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaC4gTGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLgoKSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBoZXJlLiBUaGUgcGF0Y2ggKmp1c3QqIHNldHMgYSBmbGFnIG9uIGEgYGZvbGlvYC4gU2luY2UgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCB0aGlzIGlzIGp1c3QgYSBmbGFnIHNldHRpbmcuLi4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoaXMgaXNuJiMzOTt0IEtBU0FOIHRlcnJpdG9yeSwgZWl0aGVyOyB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCBPT0IgYWNjZXNzLCBVc2UtQWZ0ZXItRnJlZSwgb3IgYW55IG9mIHRob3NlIGtpbmRzIG9mIGlzc3Vlcy4KCkZyb20gdGhpcyBxdWljayBnbGFuY2UsIHRoaXMgbG9va3MgbGlrZSBhIGJ1ZyBmaXggcmVsYXRlZCB0byBodWdldGxiIHJlc2VydmVzIOKAkyBwb3NzaWJseSBhIGxlYWsgb3IgYWNjb3VudGluZyBlcnJvci4gQ3J1Y2lhbGx5LCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gTm8gbW9kaWZpY2F0aW9ucyBvZiBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgZWl0aGVyLgoKSSB0aGluayBJJiMzOTtsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlICpjb21wbGV0ZWx5KiBzdXJlLiBJdCYjMzk7cyBwcm9iYWJseSBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGJpdC1zZXQgb3BlcmF0aW9uLiBCdXQgSSYjMzk7bSBmZWVsaW5nIGZhaXJseSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIxNjg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxubW0vaHVnZXRsYi5jLTIxODEtXHRpZiAoZm9saW8pIHtcbm1tL2h1Z2V0bGIuYzoyMTgyOlx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTIxODMtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTI1NTA9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI1OTItXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNTkzOlx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNTk0LVx0XHR9IGVsc2UgaWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTI2MTMtXHRcdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNjE0Olx0XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yNjE1LVx0XHR9IGVsc2Uge1xuLS1cbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODc0LVx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcbm1tL2h1Z2V0bGIuYzoyODc1Olx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI4NzYtXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MzI4LVx0XHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbm1tL2h1Z2V0bGIuYzo1MzI5Olx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTMzMC1cdFx0XHQvKiBSZXNlcnZhdGlvbiB0byBiZSBhZGp1c3RlZCBhZnRlciB0aGUgc3BpbiBsb2NrICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTUKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRm9saW8gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgZXNzZW50aWFsbHkganVzdCBhIHNpbXBsZSBmbGFnIHRoYXQmIzM5O3MgYmVpbmcgc2V0IG9uIGEgZm9saW8uIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYWNjb3VudGluZy4gVGhpcyBmbGFnJiMzOTtzIHJvbGUgaXMgY2xlYXJseSBkZWZpbmVkOiBpdCYjMzk7cyB1c2VkIHRvIHJlc3RvcmUgdGhvc2UgaHVnZXRsYiByZXNlcnZlcyBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igb3IgZHVyaW5nIGFuIHVubWFwIG9wZXJhdGlvbi4gTXkgYW5hbHlzaXMgc3VnZ2VzdHMgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGNyb3BwaW5nIHVwIGhlcmUuIFRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToxOC4wODkxMTczMTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1NTEyNDU2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJVRE1BQlVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlXCIsXG4gICAgXCJtZW1mZF9hbGxvY19mb2xpb1wiLFxuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjE4LjA4OTEyMTgyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDE5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2ViYzk2NjNhOWUyNzdlZTcwYmI5NTQ5MGNiZDU0MjE1YzdiYTI4M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMjo0MToxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCBkODg0OTE5NmFkOWIxLi5mYWRmZTFkYmMwNDdhIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yMTc4LDggKzIxNzgsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcbiBcXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzaywgcHJlZmVycmVkX25pZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5tYXNrKTtcXG4tXFx0aWYgKGZvbGlvKVxcbitcXHRpZiAoZm9saW8pIHtcXG4rXFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4gXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuK1xcdH1cXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToxOC41Mzc3Nzg4MDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzA0OTYyNTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJVRE1BQlVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlXCIsXG4gICAgXCJtZW1mZF9hbGxvY19mb2xpb1wiLFxuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBjYWxsIGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHdoZW4gYSBmb2xpbyBpcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChodWdldGxiKSB0aGF0IGFmZmVjdHMgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AgKGUuZy4sIHVzaW5nIGB1ZG1hYnVmYCBvciBgaW9tbXVmZGAgd2l0aCBhIGh1Z2V0bGJmcyBtZW1mZCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlYmM5NjYzYTllMjc3ZWU3MGJiOTU0OTBjYmQ1NDIxNWM3YmEyODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMjo0MToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMjE3OCw4ICsyMTc4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4gXHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4tXHRpZiAoZm9saW8pXG4rXHRpZiAoZm9saW8pIHtcbitcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbiBcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbitcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MTguNTM3Nzc5OTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MDYxODE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbS9odWdldGxiLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIGNoYW5nZSB0byB0aGUgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgZnVuY3Rpb24uIFRoZSBrZXkgYWRkaXRpb24gaGVyZSBpcyBhIGNhbGwgdG8gYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbylgIGFmdGVyIGEgZm9saW8gaXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkLiBUaGlzIHBpcXVlcyBteSBpbnRlcmVzdCBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBmdW5jdGlvbiBjYWxsLiBXaGF0IGV4YWN0bHkgaXMgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZG9pbmc/IFdoYXQga2luZCBvZiBzdGF0ZSBpcyBpdCBtYW5pcHVsYXRpbmc/IFdoYXQgaXMgXCJyZXNlcnZlXCIgcmVmZXJyaW5nIHRvIGluIHRoaXMgY29udGV4dD9cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIG5lZWQgdG8gcmVhZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gVGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gV2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFdoYXQncyB0aGUgb3ZlcmFsbCBmbG93IG9mIGV4ZWN1dGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIGFuZCBpbXBhY3Qgb2YgdGhpcyBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgaHVnZSBwYWdlIG1hbmFnZW1lbnQgc2NoZW1lLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZvbGlvIHJlc2VydmVzLCBhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjIyLjMwODQwMDQ5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0MTIyMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDU9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVxcdFxcdFxcdFxcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEzNDphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cXHRcXHRcXHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTIxNDQ9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjE2Ny1cXG5tbS9odWdldGxiLmM6MjE2ODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9odWdldGxiLmMtMjE2OS1cXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4tLVxcbm1tL21lbWZkLmMtOTMtXFxubW0vbWVtZmQuYzo5NDpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxcbm1tL21lbWZkLmMtOTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG51bWFfbm9kZV9pZCgpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToyMy45MzI1MjYxNzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc5NzU4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBIdWdlVExCIEZvbGlvIFJlc2VydmF0aW9uKipcblxuT2theSwgc28gYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBjYWxsaW5nIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcmVzZXJ2aW5nIHNwYWNlIGZvciB0aGVzZSBIdWdlVExCIGZvbGlvcy4gTXkgZm9jdXMgbm93IGlzIG9uIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGVyZS4gV2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc3RvcmUgcmVzZXJ2ZSBmdW5jdGlvbmFsaXR5PyBMZXQncyBnZXQgZG93biB0byB0aGUgZGV0YWlscyBvZiBob3cgdGhpcyByZXNlcnZhdGlvbiBpcyBlc3RhYmxpc2hlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZVRMQiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MjcuNDEyMjg3MTc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc3Nzk2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODEtXFx0aWYgKGZvbGlvKSB7XFxubW0vaHVnZXRsYi5jOjIxODI6XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjE4My1cXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTUwPXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1OTItXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI1OTM6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjU5NC1cXHRcXHR9IGVsc2UgaWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTI2MTMtXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI2MTQ6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjYxNS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4MzI9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjg3NC1cXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xcbm1tL2h1Z2V0bGIuYzoyODc1OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI4NzYtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9NTIxMD12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTMyOC1cXHRcXHQgICAgIWZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbm1tL2h1Z2V0bGIuYzo1MzI5OlxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUzMzAtXFx0XFx0XFx0LyogUmVzZXJ2YXRpb24gdG8gYmUgYWRqdXN0ZWQgYWZ0ZXIgdGhlIHNwaW4gbG9jayAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MToyOC45OTAwNzEzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjk5NTA4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYC4gUHJvYmFibHkgZGVhbGluZyB3aXRoIGh1Z2VwYWdlcyBpbiB0aGUga2VybmVsLCBsaWtlbHkgcmVsYXRlZCB0byByZXN0b3JpbmcgcmVzZXJ2YXRpb25zLiBJJ20gZ3Vlc3NpbmcgaXQncyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBidXQgbGV0J3MgYmUgcHJlY2lzZS4gVGltZSB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHN5bWJvbCBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBkZWNsYXJlZCBhbmQgd2hhdCBjb250ZXh0IGl0J3Mgb3BlcmF0aW5nIGluLiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biBpdHMgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UsIGdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjZW50cmFsIHRvIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgaHVnZXBhZ2UgcmVzZXJ2YXRpb25zLiBJIGV4cGVjdCBpdCdzIGdvaW5nIHRvIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRob3NlIHJlc2VydmF0aW9ucyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIHJlc3RvcmluZyB0aGVtLCBtYXliZSBhZnRlciBhIHN5c3RlbSBzdXNwZW5kIG9yIG90aGVyIGV2ZW50IHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgc3RhdGUgY2hhbmdlcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc2NoZW1lLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYyOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjMzLjMyMDAyNDgyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5MjcxMzAwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MTozNC43ODkzMDI3ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjczNjMzODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXaGVyZSdzIHRoZSBEZWZpbml0aW9uIEJ1cmllZD8qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpc3N1ZS4uLiBhbmQgdGhlIGZpcnN0IHBsYWNlIG15IG1pbmQgZ29lcyBpcywgXCJXaGVyZSAqZXhhY3RseSogaXMgdGhpcyB0aGluZyBkZWZpbmVkP1wiIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhlIGRlZmluaXRpb24gSSdtIGxvb2tpbmcgZm9yIGlzIGxpa2VseSBoaWRpbmcgd2l0aGluIHRoZSBkZXB0aHMgb2YgdGhlIGtlcm5lbCdzIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIE1vcmUgcHJlY2lzZWx5LCBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgZWl0aGVyIGRlZmluZWQgdmlhIGEgcHJlcHJvY2Vzc29yIG1hY3Jv4oCUdGhlIGdvb2Qgb2xkIGAjZGVmaW5lYCByb3V0ZeKAlG9yIHBlcmhhcHMgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdG9wIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEh1Z2VUTEIgaW50ZXJuYWxzLCBzbyB0aGF0J3Mgd2hlcmUgSSdkIHN0YXJ0IGRpZ2dpbmcuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MzguNDYyOTM5ODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNzMzNTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjE2OD1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMTgxLVxcdGlmIChmb2xpbykge1xcbm1tL2h1Z2V0bGIuYzoyMTgyOlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTIxODMtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9MjU1MD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTkyLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNTkzOlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI1OTQtXFx0XFx0fSBlbHNlIGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjEzLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNjE0OlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI2MTUtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI4NzQtXFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcXG5tbS9odWdldGxiLmM6Mjg3NTpcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yODc2LVxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzMjgtXFx0XFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6NTMyOTpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01MzMwLVxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6MzkuOTE0NjgwMzM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDk4ODM0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFJlc2VydmUgUmVzdG9yZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gRnJvbSB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBzb21lIEh1Z2VUTEIgcmVzb3VyY2UgcmVzZXJ2YXRpb24gbmVlZHMgdG8gYmUgYnJvdWdodCBiYWNrIGludG8gcGxheS4gVGhlIHF1ZXN0aW9uIGlzLCBob3cncyB0aGlzIHJlc3RvcmF0aW9uIGhhbmRsZWQgaW4gdGhlIGtlcm5lbD8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGUsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBkZWZpbml0aW9ucyBmb3IgSHVnZVRMQiBtYW5hZ2VtZW50IGFyZSBrZXB0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYSBmdW5jdGlvbiBvciBtYWNybyBkZWFsaW5nIHdpdGggXCJyZXN0b3JlX3Jlc2VydmUuXCIgVGhhdCBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBiZWhpbmQgcmVjb3ZlcmluZyB0aGUgcmVzZXJ2ZWQgcmVzb3VyY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njc5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6NDMuODY0NTY1ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDA5ODQ5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVzdG9yZV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NDk4PVRoaXMgaXMgYSBzcGVjaWFsIHdyYXBwZXIgcm91dGluZSB0byBoZWxwIGZhY2lsaXRhdGUgcmVzZXJ2YXRpb24gY2xlYW51cFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NDk5Om9uIGVycm9yIHBhdGhzLiAgSXQgaXMgb25seSBjYWxsZWQgZnJvbSB0aGUgcm91dGluZSByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoKS5cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTUwMC1UaGlzIHJvdXRpbmUgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHZtYV9uZWVkc19yZXNlcnZhdGlvbiBpbiBhbiBhdHRlbXB0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTUzMj1iZSAgaGlnaGVyIHRoYW4gaXQgc2hvdWxkIGFuZCBwcmV2ZW50IGFsbG9jYXRpb24gb2YgYSBwcmUtYWxsb2NhdGVkIHBhZ2UuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01MzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1MzQ6VGhlIHJvdXRpbmUgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKCkgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uLiAgSXRcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTUzNS1pcyBmYWlybHkgd2VsbCBkb2N1bWVudGVkLiAgVGhlIGludGVudGlvbiBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gcmVzdG9yZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01Mzg9Y291bnQgYWZ0ZXIgdGhlIHBhZ2UgaXMgZnJlZWQuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01MzktXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NDA6VGhlIHJvdXRpbmUgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yIGl0c2VsZiBtYXkgZW5jb3VudGVyIGVycm9ycyB3aGlsZVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTQxLWF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgcmVzZXJ2YXRpb24gbWFwIGVudHJ5LiAgSW4gdGhpcyBjYXNlLCBpdCB3aWxsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTU0OD1UaGVyZSBpcyBzb21lIGNvZGUgKG1vc3Qgbm90YWJseSB1c2VyZmF1bHRmZCkgd2hpY2ggY2FuIG5vdCBjYWxsXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NDk6cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yLiAgSW4gdGhpcyBjYXNlLCBpdCBzaW1wbHkgbW9kaWZpZXMgdGhlIFBhZ2VQcml2YXRlXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01NTAtc28gdGhhdCBhIHJlc2VydmF0aW9uIHdpbGwgbm90IGJlIGxlYWtlZCB3aGVuIHRoZSBodWdlIHBhZ2UgaXMgZnJlZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0zMzE9cmVnaW9uX2NvdW50KCnlnKjop6PpmaTnp4HmnInlt6jpobXmmKDlsITml7booqvosIPnlKjjgILlnKjnp4HmnInmmKDlsITkuK3vvIzpooTnlZnmmKDlsITkuK3msqHmnInmnaHnm67ooajmmI7lrZjlnKjkuIDkuKrpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5My1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozOTQ65Ye95pWwIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpIOivleWbvuWkhOeQhui/meenjeaDheWGteOAguWug+acieebuOW9k+WujOWWhOeahOaWh+aho+OAgui/meS4quWHveaVsOeahOebrueahFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5NS3mmK/lsIbpooTnlZnmmKDlsITmgaLlpI3liLDpobXpnaLliIbphY3liY3nmoTnirbmgIHjgILpgJrov4fov5nnp43mlrnlvI/vvIzpooTnlZnmmKDlsITnmoTnirbmgIHlsIbkuI7pobXpnaLph4rmlL7lkI7nmoTlhajlsYDpooTnlZnorqFcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTM5Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozOTg65Ye95pWwcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9y5pys6Lqr5Zyo6K+V5Zu+5oGi5aSN6aKE55WZ5pig5bCE5p2h55uu5pe25Y+v6IO95Lya6YGH5Yiw6ZSZ6K+v44CC5Zyo6L+Z56eN5oOF5Ya15LiL77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMzk5LeWug+WwhueugOWNleWcsOa4hemZpOivpemhteeahFBhZ2VQcml2YXRl5qCH5b+X44CC6L+Z5qC35LiA5p2l77yM5b2T6aG16Z2i6KKr6YeK5pS+5pe277yM5YWo5bGA6aKE55WZ6K6h5pWw5bCG5LiN5Lya6KKr6YCS5aKe44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC00MDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NDAzOuacieS4gOS6m+S7o+egge+8iOacgOaYjuaYvueahOaYr3VzZXJmYXVsdGZk77yJ5LiN6IO96LCD55SocmVzdG9yZV9yZXNlcnZlX29uX2Vycm9y44CC5Zyo6L+Z56eN5oOF5Ya15LiL77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDA0LeWug+eugOWNleWcsOS/ruaUueS6hlBhZ2VQcml2YXRl77yM5Lul5L6/5Zyo6YeK5pS+5beo6aG15pe25LiN5Lya5rOE6Zyy6aKE55WZ44CCXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTg9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTIwLVxcdCAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyMTpcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyksIGZvbGlvKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MjItXFx0aHVnZXRsYl9kZWxldGVfZnJvbV9wYWdlX2NhY2hlKGZvbGlvKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTcwMD1zdGF0aWMgbG9uZyBodWdldGxiZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgwMi1cXHRcXHRpZiAodW5saWtlbHkoZXJyb3IpKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODAzOlxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZm9saW8pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgwNC1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTQ5PWh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU1Ny0gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjU1ODogKiBIUEdfcmVzdG9yZV9yZXNlcnZlIC0gU2V0IHdoZW4gYSBodWdldGxiIHBhZ2UgY29uc3VtZXMgYSByZXNlcnZhdGlvbiBhdFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU1OS0gKlxcdGFsbG9jYXRpb24gdGltZS4gIENsZWFyZWQgd2hlbiBwYWdlIGlzIGZ1bGx5IGluc3RhbnRpYXRlZC4gIEZyZWVcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU4Mz1lbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTg0OlxcdEhQR19yZXN0b3JlX3Jlc2VydmUgPSAwLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU4NS1cXHRIUEdfbWlncmF0YWJsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYzMj1mb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjQzLSAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY0NDpIUEFHRUZMQUcoUmVzdG9yZVJlc2VydmUsIHJlc3RvcmVfcmVzZXJ2ZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02NDUtSFBBR0VGTEFHKE1pZ3JhdGFibGUsIG1pZ3JhdGFibGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MTE9aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzEyLVxcdFxcdFxcdHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MTM6dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzE0LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY3Mz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE2ODEtXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gaHVnZXRsYl9mb2xpb19zdWJwb29sKGZvbGlvKTtcXG5tbS9odWdldGxiLmM6MTY4MjpcXHRib29sIHJlc3RvcmVfcmVzZXJ2ZTtcXG5tbS9odWdldGxiLmMtMTY4My1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2OTEtXFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbm1tL2h1Z2V0bGIuYzoxNjkyOlxcdHJlc3RvcmVfcmVzZXJ2ZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzoxNjkzOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTY5NC1cXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzAyLVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoxNzAzOlxcdGlmICghcmVzdG9yZV9yZXNlcnZlKSB7XFxubW0vaHVnZXRsYi5jLTE3MDQtXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzA2LVxcdFxcdCAqIHVuZGVyIGl0cyBtaW5pbXVtIHNpemUgaWYgdGhlIHJlc2VydmF0aW9uIGlzIG5vdCByZXN0b3JlZFxcbm1tL2h1Z2V0bGIuYzoxNzA3OlxcdFxcdCAqIGFmdGVyIHBhZ2UgaXMgZnJlZS4gIFRoZXJlZm9yZSwgZm9yY2UgcmVzdG9yZV9yZXNlcnZlXFxubW0vaHVnZXRsYi5jLTE3MDgtXFx0XFx0ICogb3BlcmF0aW9uLlxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MTAtXFx0XFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxcbm1tL2h1Z2V0bGIuYzoxNzExOlxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZSA9IHRydWU7XFxubW0vaHVnZXRsYi5jLTE3MTItXFx0fVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MjEtXFx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jOjE3MjI6XFx0aWYgKHJlc3RvcmVfcmVzZXJ2ZSlcXG5tbS9odWdldGxiLmMtMTcyMy1cXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMrKztcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTY4PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODEtXFx0aWYgKGZvbGlvKSB7XFxubW0vaHVnZXRsYi5jOjIxODI6XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjE4My1cXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTI0PXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTM2LSAqIDEpIEEgcmVzZXJ2YXRpb24gd2FzIGluIHBsYWNlIGFuZCB0aGUgZm9saW8gY29uc3VtZWQgdGhlIHJlc2VydmF0aW9uLlxcbm1tL2h1Z2V0bGIuYzoyNTM3OiAqICAgIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzIHNldCBpbiB0aGUgZm9saW8uXFxubW0vaHVnZXRsYi5jOjI1Mzg6ICogMikgTm8gcmVzZXJ2YXRpb24gd2FzIGluIHBsYWNlIGZvciB0aGUgcGFnZSwgc28gaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgaXNcXG5tbS9odWdldGxiLmMtMjUzOS0gKiAgICBub3Qgc2V0LiAgSG93ZXZlciwgYWxsb2NfaHVnZXRsYl9mb2xpbyBhbHdheXMgdXBkYXRlcyB0aGUgcmVzZXJ2ZSBtYXAuXFxuLS1cXG5tbS9odWdldGxiLmMtMjU0OS0gKi9cXG5tbS9odWdldGxiLmM6MjU1MDp2b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjU1MS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMjU1NC1cXG5tbS9odWdldGxiLmM6MjU1NTpcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbykpIHtcXG5tbS9odWdldGxiLmMtMjU1Ni1cXHRcXHRpZiAodW5saWtlbHkocmMgXFx1MDAzYyAwKSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTU4LVxcdFxcdFxcdCAqIFJhcmUgb3V0IG9mIG1lbW9yeSBjb25kaXRpb24gaW4gcmVzZXJ2ZSBtYXBcXG5tbS9odWdldGxiLmM6MjU1OTpcXHRcXHRcXHQgKiBtYW5pcHVsYXRpb24uICBDbGVhciBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBzb1xcbm1tL2h1Z2V0bGIuYy0yNTYwLVxcdFxcdFxcdCAqIHRoYXQgZ2xvYmFsIHJlc2VydmUgY291bnQgd2lsbCBub3QgYmUgaW5jcmVtZW50ZWRcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTY3LVxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNTY4OlxcdFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjU2OS1cXHRcXHRlbHNlIGlmIChyYylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTc4LVxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmM6MjU3OTpcXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTgwLVxcdFxcdFxcdCAqIFJlbW92ZSB0aGUgZW50cnkgc28gdGhhdCBhIHN1YnNlcXVlbnQgYWxsb2NhdGlvblxcbi0tXFxubW0vaHVnZXRsYi5jLTI1ODctXFx0XFx0XFx0XFx0ICogd2UgY2FuIG5vdCBkZWxldGUgdGhlIGVudHJ5LCBzZXRcXG5tbS9odWdldGxiLmM6MjU4ODpcXHRcXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBzbyB0aGF0IHRoZSByZXNlcnZlXFxubW0vaHVnZXRsYi5jLTI1ODktXFx0XFx0XFx0XFx0ICogY291bnQgd2lsbCBiZSBpbmNyZW1lbnRlZCB3aGVuIHRoZSBmb2xpb1xcbi0tXFxubW0vaHVnZXRsYi5jLTI1OTItXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI1OTM6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjU5NC1cXHRcXHR9IGVsc2UgaWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTI2MDgtXFx0XFx0XFx0XFx0ICogYSByZXNlcnZhdGlvbiBpcyBwcmVzZW50LiAgU2luY2Ugd2UgY2FuXFxubW0vaHVnZXRsYi5jOjI2MDk6XFx0XFx0XFx0XFx0ICogbm90IGFkZCBhbiBlbnRyeSwgc2V0IGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXFxubW0vaHVnZXRsYi5jLTI2MTAtXFx0XFx0XFx0XFx0ICogb24gdGhlIGZvbGlvIHNvIHJlc2VydmUgY291bnQgd2lsbCBiZVxcbi0tXFxubW0vaHVnZXRsYi5jLTI2MTMtXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI2MTQ6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMjYxNS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4MzI9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjg3NC1cXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xcbm1tL2h1Z2V0bGIuYzoyODc1OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI4NzYtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9NDg5OD1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9odWdldGxiLmMtNTAyOS1cXHRcXHRcXHRcXHRpZiAocmV0KSB7XFxubW0vaHVnZXRsYi5jOjUwMzA6XFx0XFx0XFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGFkZHIsIG5ld19mb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUwMzEtXFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KG5ld19mb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmMtNTA0MC1cXHRcXHRcXHRcXHRpZiAoIXB0ZV9zYW1lKHNyY19wdGVfb2xkLCBlbnRyeSkpIHtcXG5tbS9odWdldGxiLmM6NTA0MTpcXHRcXHRcXHRcXHRcXHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgZHN0X3ZtYSwgYWRkcixcXG5tbS9odWdldGxiLmMtNTA0Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZXdfZm9saW8pO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzMjgtXFx0XFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6NTMyOTpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01MzMwLVxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYy01MzQ3LVxcdFxcdFxcdFxcdCAqIHRvIGFsbG9jYXRlIGEgZmlsZV9yZWdpb24gc3RydWN0LiBDbGVhclxcbm1tL2h1Z2V0bGIuYzo1MzQ4OlxcdFxcdFxcdFxcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHNvIHRoYXQgZ2xvYmFsIHJlc2VydmVcXG5tbS9odWdldGxiLmMtNTM0OS1cXHRcXHRcXHRcXHQgKiBjb3VudCB3aWxsIG5vdCBiZSBpbmNyZW1lbnRlZCBieSBmcmVlX2h1Z2VfZm9saW8uXFxuLS1cXG5tbS9odWdldGxiLmMtNTM1MS1cXHRcXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTM1MjpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUzNTMtXFx0XFx0XFx0ZWxzZSBpZiAocmMpXFxuLS1cXG5tbS9odWdldGxiLmM9NTQ5MT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZXRsYi5jLTU2NzEtXFx0aWYgKG5ld19mb2xpbyAhPSBvbGRfZm9saW8pXFxubW0vaHVnZXRsYi5jOjU2NzI6XFx0XFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBuZXdfZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01NjczLVxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbi0tXFxubW0vaHVnZXRsYi5jPTU3MDA9aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTcxNC1cXHR9XFxubW0vaHVnZXRsYi5jOjU3MTU6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01NzE2LVxcbi0tXFxubW0vaHVnZXRsYi5jPTU3NjM9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU4NjUtXFx0XFx0XFx0XFx0ICogdG8gdGhlIHBhZ2UgY2FjaGUuIFNvIGl0J3Mgc2FmZSB0byBjYWxsXFxubW0vaHVnZXRsYi5jOjU4NjY6XFx0XFx0XFx0XFx0ICogcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKCkgaGVyZS5cXG5tbS9odWdldGxiLmMtNTg2Ny1cXHRcXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTg2ODpcXHRcXHRcXHRcXHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgdm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsXFxubW0vaHVnZXRsYi5jLTU4NjktXFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW8pO1xcbi0tXFxubW0vaHVnZXRsYi5jLTU5ODEtXFx0aWYgKG5ld19hbm9uX2ZvbGlvKVxcbm1tL2h1Z2V0bGIuYzo1OTgyOlxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCB2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcywgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01OTgzLVxcbi0tXFxubW0vaHVnZXRsYi5jPTYyNzY9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzUyLVxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MzUzOlxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBkc3RfYWRkciwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy02MzU0LVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM5MC1cXHRcXHRpZiAocmV0KSB7XFxubW0vaHVnZXRsYi5jOjYzOTE6XFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKGgsIGRzdF92bWEsIGRzdF9hZGRyLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTYzOTItXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NDkwLVxcdGlmICghZm9saW9faW5fcGFnZWNhY2hlKVxcbm1tL2h1Z2V0bGIuYzo2NDkxOlxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBkc3Rfdm1hLCBkc3RfYWRkciwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy02NDkyLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9ybWFwLmM9MzE5ND12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0zMjAyLVxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbGFyZ2VfbWFwY291bnQsIDApO1xcbm1tL3JtYXAuYzozMjAzOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9ybWFwLmMtMzIwNC1cXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MTo0NS4zNjU1NTQ2NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNjA4ODc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZSwgYnJva2VuIGRvd24gaW4gYSB3YXkgdGhhdCwgYXMgYW4gZXhwZXJ0LCBJJ2QgcHJvY2VzcyBpdDpcblxuKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKWAgYW5kIGRlY3JlbWVudHMgYGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzYCB3aXRoaW4gdGhlIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGZ1bmN0aW9uLiBUaGlzICppbW1lZGlhdGVseSogcGlxdWVzIG15IGludGVyZXN0LiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHRoZSByZXNlcnZhdGlvbiBsb2dpYyBmb3IgSHVnZVRMQiBmb2xpb3MuIEJlZm9yZSB0aGlzIHBhdGNoLCBpZiBJJ20gcmVtZW1iZXJpbmcgY29ycmVjdGx5IOKAkyBhbmQgSSdtIHByZXR0eSBzdXJlIEkgYW0g4oCTIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgICpzaW1wbHkqIHJldHVybmVkIHRoZSBmb2xpby4gVGhlIHJlc2VydmF0aW9uIHdhcyBsaWtlbHkgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgKm5vdCogZXhwbGljaXRseSwgYW5kIHRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBjaGFuZ2VzIGFyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHVzZWQgdG8gbG9vayBpbiBgbW0vaHVnZXRsYi5jYCB0byBjb21wYXJlIHRvIHRoZSB1cGRhdGVkIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHJlc2VydmUgbXVzdCBoYXZlIGJlZW4gZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjUwLjMwMTY0NTY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2ODpcXHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4yMTY5OlxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4yMTcwOlxcdHtcXG4yMTcxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMjE3MjpcXHRcXG4yMTczOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjE3NDpcXHRcXHRpZiAoIWgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcykge1xcbjIxNzU6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjIxNzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjE3NzpcXHRcXHR9XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLCBwcmVmZXJyZWRfbmlkLFxcbjIxODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5tYXNrKTtcXG4yMTgxOlxcdFxcdGlmIChmb2xpbykge1xcbjIxODI6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4yMTgzOlxcdFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbjIxODQ6XFx0XFx0fVxcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjE4NzpcXHRcXHRyZXR1cm4gZm9saW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjUwLjMwMTk5NTM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NDg1ODgxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIEZvbGlvIEFsbG9jYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkaWZmIGluIGBtbS9odWdldGxiLmNgLiAgQmVmb3JlLCB0aGUgY29kZSBjaGVja2VkIGlmIGEgZm9saW8gd2FzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBhbmQsIGlmIHNvLCBkZWNyZW1lbnRlZCB0aGUgcmVzZXJ2ZWQgaHVnZSBwYWdlIGNvdW50IChgaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLWApLiBUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7YCAqd2l0aGluKiB0aGF0IGBpZmAgYmxvY2suICBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCBzZXRzIGEgZmxhZyBvbiB0aGUgZm9saW8sIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAsIGlmIHRoZSBmb2xpbyBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgcmVzZXJ2ZS4gVGhpcyBtZWFucyBpZiB0aGUgZm9saW8gZ2V0cyBmcmVlZCwgd2UgY2FuIHJlc3RvcmUgdGhlIHJlc2VydmF0aW9uLlxuXG5UaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBsb2dpYy4gSXQncyBub3QganVzdCBhIHJlZmFjdG9yIG9yIGNvc21ldGljIGNoYW5nZTsgaXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGUgaHVnZSBwYWdlIHJlc2VydmUgc3lzdGVtIGluIHRoZSBrZXJuZWwuIFRoaXMgY2hhbmdlIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gV2Ugbm93IG5lZWQgdG8gY2hlY2sgd2hlcmUgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgaXMgY2FsbGVkIGZyb20gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRvIGJ1aWxkIGEgZnV6eiB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAyNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQxOjU3Ljg1MDU4NTQ5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDEzOTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NzA1PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cXHRcXHRcXHRcXHRib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA5LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXFx0XFx0XFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjctXFxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjktXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuLS1cXG5tbS9tZW1mZC5jLTkzLVxcbm1tL21lbWZkLmM6OTQ6XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG5tbS9tZW1mZC5jLTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDE6NTkuMjk0NzMwNjc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjAwOTk2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1mZF9hbGxvY19mb2xpb2AqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsLiBTcGVjaWZpY2FsbHksIGl0J3MgY29taW5nIGZyb20gYG1lbWZkX2FsbG9jX2ZvbGlvYCB3aXRoaW4gYG1tL21lbWZkLmNgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycywgbGlrZWx5IHRpZWQgdG8gYW5vbnltb3VzIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBgbWVtZmRfYWxsb2NfZm9saW9gIGZ1bmN0aW9uIGlzIHRoZSBwb2ludCBvZiBhbGxvY2F0aW9uLCB0aGUgY29yZSBvZiBob3cgdGhpcyBhbGwgZ2V0cyBpbnN0YW50aWF0ZWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgY2FsbCBpbXBsaWVzIGl0J3MgYSBmb2xpby1iYXNlZCBhbGxvY2F0aW9uLiBXaGljaCBhbHNvIHRlbGxzIG1lIHRoYXQgdGhleSBhcmVuJ3Qgd29ya2luZyB3aXRoIHRyYWRpdGlvbmFsIHBhZ2VzLiBBIGZvbGlvIGlzIGEgbXVjaCBtb3JlIG1vZGVybiBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjowNi4wMTQ4MzI3NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDkzMzUwMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1mZC5oPTEwPWV4dGVybiBsb25nIG1lbWZkX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yNy19XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yOS17XFxuLS1cXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbm1tL2d1cC5jLTM1MTgtXFx0XFx0XFx0aWYgKCFucl9mb3VuZCkge1xcbm1tL2d1cC5jOjM1MTk6XFx0XFx0XFx0XFx0Zm9saW8gPSBtZW1mZF9hbGxvY19mb2xpbyhtZW1mZCwgc3RhcnRfaWR4KTtcXG5tbS9ndXAuYy0zNTIwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02Ny0gKi9cXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG5tbS9tZW1mZC5jLTY5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6MDcuNDY0MTcyNDI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTY3MzgwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEZvbGlvIEFsbG9jYXRpb24gd2l0aGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZm9saW8gYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgaXQgbG9va3MgbGlrZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBtZW1mZF9waW5fZm9saW9zYCB3aXRoaW4gYG1tL2d1cC5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgYGd1cC5jYCBpcyB0aGUgXCJnZXQgdXNlciBwYWdlc1wiIGNvZGUsIHdoaWNoIGlzIGFsbCBhYm91dCBzZWN1cmVseSBhY2Nlc3NpbmcgdXNlci1zcGFjZSBtZW1vcnksIGFuZCBwaW5uaW5nIHRob3NlIHBhZ2VzIGluIHRoZSBwYWdlIHRhYmxlcy4gU28sIHRoaXMgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcGlubmluZyBmb2xpb3MgcmVsYXRlZCB0byBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycyAobWVtZmRzKS4gSXQgbWFrZXMgc2Vuc2UgdGhhdCB3ZSBuZWVkIGEgd2F5IHRvIGFsbG9jYXRlIHRoZSBmb2xpbyBhbmQgZ2V0IGl0IHJlYWR5IGZvciBwaW5uaW5nLCBoZW5jZSB0aGUgY2FsbCB0byBgbWVtZmRfYWxsb2NfZm9saW9gLiBJIHdvbmRlciB3aGF0IHRoZSBzcGVjaWZpYyBhbGxvY2F0aW9uIGZsYWdzIGFuZCBjb25zdHJhaW50cyBhcmUsIGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aG9zZSBmdW5jdGlvbiBjYWxscyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgYnV0IHRoaXMgYXQgbGVhc3QgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtZmQgZm9saW9zIGFyZSBiZWluZyBoYW5kbGVkIGR1cmluZyBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBzZWUgd2hhdCBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCBhbmQgaG93IHRoZSBmb2xpbyBpcyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjE0LjcyMDkxMjk3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Mzk1ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9waW5fZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTUtXFx0ZW5kID0gc3RhcnQgKyAocGdjbnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzE2OlxcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFxcdTAwMjZwZ29mZik7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTctXFx0aWYgKG5yX2ZvbGlvcyBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXFx0XFx0ICogSW4gYSBnaXZlbiByYW5nZSwgb25seSB0aGUgZmlyc3Qgc3VicGFnZSBvZiB0aGUgZmlyc3QgZm9saW9cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcXHRcXHQgKiBoYXMgYW4gb2Zmc2V0LCB0aGF0IGlzIHJldHVybmVkIGJ5IG1lbWZkX3Bpbl9mb2xpb3MoKS5cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cXHRcXHQgKiBUaGUgZmlyc3Qgc3VicGFnZXMgb2Ygb3RoZXIgZm9saW9zIChpbiB0aGUgcmFuZ2UpIGhhdmUgYW5cXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cXHQvKlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzNTpcXHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cXHQgKiB3ZSBjYW4gY29tcHV0ZSBucGFnZXMgcGlubmVkLCBhbmQgYXZvaWQgbG9vcGluZyBvdmVyIGZvbGlvcyBoZXJlXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXFx0ICovXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5OlxcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXFx1MDAzZWZpbGUsIHN0YXJ0LCBlbmQsIHVzZXItXFx1MDAzZXVmb2xpb3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVxcdFxcdFxcdFxcdCAgIG5mb2xpb3MsIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMzNzg9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzc5LVxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzM4MDpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzODEtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jPTE5MD1FWFBPUlRfU1lNQk9MKHVucGluX3VzZXJfcGFnZSk7XFxuLS1cXG5tbS9ndXAuYy0xOTUtICpcXG5tbS9ndXAuYzoxOTY6ICogRm9saW9zIHRoYXQgd2VyZSBwaW5uZWQgdmlhIG1lbWZkX3Bpbl9mb2xpb3MoKSBvciBvdGhlciBzaW1pbGFyIHJvdXRpbmVzXFxubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXFxuLS1cXG5tbS9ndXAuYz0zNDE1PUVYUE9SVF9TWU1CT0wocGluX3VzZXJfcGFnZXNfdW5sb2NrZWQpO1xcbi0tXFxubW0vZ3VwLmMtMzQxNy0vKipcXG5tbS9ndXAuYzozNDE4OiAqIG1lbWZkX3Bpbl9mb2xpb3MoKSAtIHBpbiBmb2xpb3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtZmRcXG5tbS9ndXAuYy0zNDE5LSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcXG4tLVxcbm1tL2d1cC5jLTM0NDItICovXFxubW0vZ3VwLmM6MzQ0Mzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxubW0vZ3VwLmMtMzQ0NC1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmMtMzUzOS19XFxubW0vZ3VwLmM6MzU0MDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcXG5tbS9ndXAuYy0zNTQxLVxcbi0tXFxubW0vZ3VwLmMtMzU1MS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xcbm1tL2d1cC5jOjM1NTI6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcXG5tbS9ndXAuYy0zNTUzLSAqIChlLmcuLCBpbmRpdmlkdWFsIHBhZ2VzKSBvZiB0aGUgZm9saW8gbGF0ZXIsIGZvciBleGFtcGxlLCB1c2luZ1xcbi0tXFxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXFxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cXG5tbS9tZW1mZC5jLTY2LSAqIGluZGV4IGluIHRoZSBtYXBwaW5nLlxcbi0tXFxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMTI5LVxcdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXFxubW0vbWVtZmRfbHVvLmM6MTMwOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XFxubW0vbWVtZmRfbHVvLmMtMTMxLVxcdCAqIHNsb3RzLlxcbm1tL21lbWZkX2x1by5jLTEzMi1cXHQgKi9cXG5tbS9tZW1mZF9sdW8uYzoxMzM6XFx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxcbm1tL21lbWZkX2x1by5jLTEzNC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTI5MS1cXHQvKlxcbm1tL21lbWZkX2x1by5jOjI5MjpcXHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcXG5tbS9tZW1mZF9sdW8uYy0yOTMtXFx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjoxNi4xNjQ4Nzc5NjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyMDQ1NDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgRm9saW8gQWxsb2NhdGlvbiBGbG93KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUsIGNhbGxlZCBkaXJlY3RseSBieSBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2Agd2l0aGluIHRoZSBpb21tdWZkIGNvbXBvbmVudC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UncmUgcGlubmluZyBtZW1vcnksIHNvIHdlIG5lZWQgdG8gdHJhY2sgaXQuXG5cbk5vdywgaWYgYG1lbWZkX3Bpbl9mb2xpb3NgIGRvZXNuJ3QgZmluZCBhIHN1aXRhYmxlIGZvbGlvIOKAkyB3aGljaCBpcyBwcm9iYWJseSB0aGUgaW50ZXJlc3RpbmcgYml0IOKAkyBpdCdzIHJlYWNoaW5nIG91dCB0byBgbWVtZmRfYWxsb2NfZm9saW9gLiBBbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgcG90ZW50aWFsbHkgY29tcGxleC4gSSdtIG5vdGluZyB0aGF0IGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCBiZW5lYXRoIGBtZW1mZF9waW5fZm9saW9zYC4gSG1tLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBhbGxvY2F0aW9uIHBhdGguIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBmcmFnbWVudGF0aW9uLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIGJleW9uZCB0aGlzIHNwZWNpZmljIGNhbGwgY2hhaW4sICp3aGVyZSBlbHNlKiBpcyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBiZWluZyBpbnZva2VkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhhdCB3b3VsZCBpbmZvcm0gbXkgYW5hbHlzaXMgb2YgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjoyMi43ODUzMzQ4ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTUzMTU3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwNT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDctXFx0XFx0XFx0XFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOS1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTM0OmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTM1LVxcdFxcdFxcdCAgICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MjE0ND1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMTY3LVxcbm1tL2h1Z2V0bGIuYzoyMTY4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTY5LVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjI0LjI4MDY1NDY0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzYwMDE3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIE1lbWZkX0FsbG9jX0ZvbGlvIFJhYmJpdCBIb2xlKipcblxuT2theSwgc28gdGhlIHRyYWlsIHN0YXJ0cyB3aXRoIGBtZW1mZF9hbGxvY19mb2xpb2AsIHRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uIFdoZXJlJ3MgaXQgZ2V0dGluZyBjYWxsZWQgZnJvbT8gUmlnaHQsIGBtZW1mZF9waW5fZm9saW9zYC4gTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHVzZXIgc3BhY2UgcmVhY2ggYG1lbWZkX3Bpbl9mb2xpb3NgIGRpcmVjdGx5PyBUaGUgYW5zd2VyIGlzIHllcywgd2UndmUgZ290IGB1ZG1hYnVmYCBhbmQgYGlvbW11ZmRgIGluIHRoZSBtaXgsIHNvIHRoYXQncyBhIHZlY3RvciBmb3IgcG90ZW50aWFsIGludGVyYWN0aW9uLlxuXG5MZXQgbWUganVzdCByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGVzZSBhcmUgbG9jYXRlZC4gYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBkZWZpbmVkIGluIGBtbS9tZW1mZC5jYCwgZ290IGl0LiBOb3cgbGV0J3MgZG91YmxlIGNoZWNrIGBtZW1mZF9waW5fZm9saW9zYC4gSSBzZWVtIHRvIHJlY2FsbCBpdCByZXNpZGluZyBpbiBgbW0vZ3VwLmNgLCBJIHNob3VsZCBjb25maXJtIHRoYXQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjYWxsIGNoYWlucyB0byBjb25zaWRlci4gT2theSwgdGhhdCdzIHRoZSBpbW1lZGlhdGUgcGF0aCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6MzEuMDQwNjc1ODg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxOTE2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX3Bpbl9mb2xpb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cXHRlbmQgPSBzdGFydCArIChwZ2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAtIDE7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XFx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXFx1MDAyNnBnb2ZmKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cXHRpZiAobnJfZm9saW9zIFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cXHRcXHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4OlxcdFxcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVxcdFxcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVxcdC8qXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1OlxcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVxcdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XFx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cXHUwMDNldWZvbGlvcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXFx0XFx0XFx0XFx0ICAgbmZvbGlvcywgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM3OD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzNzktXFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMzgwOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM4MS1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcXG4tLVxcbm1tL2d1cC5jLTE5NS0gKlxcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cXG4tLVxcbm1tL2d1cC5jPTM0MTU9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XFxuLS1cXG5tbS9ndXAuYy0zNDE3LS8qKlxcbm1tL2d1cC5jOjM0MTg6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxcbm1tL2d1cC5jLTM0MTktICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxcbi0tXFxubW0vZ3VwLmMtMzQ0Mi0gKi9cXG5tbS9ndXAuYzozNDQzOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5tbS9ndXAuYy0zNDQ0LVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0zNTM5LX1cXG5tbS9ndXAuYzozNTQwOkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xcbm1tL2d1cC5jLTM1NDEtXFxuLS1cXG5tbS9ndXAuYy0zNTUxLSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXFxubW0vZ3VwLmM6MzU1MjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xcbm1tL2d1cC5jLTM1NTMtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuLS1cXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0xMjktXFx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcXG5tbS9tZW1mZF9sdW8uYzoxMzA6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcXG5tbS9tZW1mZF9sdW8uYy0xMzEtXFx0ICogc2xvdHMuXFxubW0vbWVtZmRfbHVvLmMtMTMyLVxcdCAqL1xcbm1tL21lbWZkX2x1by5jOjEzMzpcXHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMTM0LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMjkxLVxcdC8qXFxubW0vbWVtZmRfbHVvLmM6MjkyOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxcbm1tL21lbWZkX2x1by5jLTI5My1cXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjMyLjQ5MjU5NzgwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDUxMDAxOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHVkbWFidWZgIGFuZCBgaW9tbXVmZGAgc2l0dWF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGJvdGggbGV2ZXJhZ2luZyBgbWVtZmRfcGluX2ZvbGlvc2AuIEludGVyZXN0aW5nLiBUaGUgbmV4dCBxdWVzdGlvbiBidXJuaW5nIGluIG15IG1pbmQgaXMsIFwiSG93IGFjY2Vzc2libGUgaXMgYHVkbWFidWZgPyBJcyBpdCBqdXN0IHRocm91Z2gga2VybmVsIGZ1bmN0aW9ucyBvciBkb2VzIGl0IGV4cG9zZSBpdHNlbGYgdGhyb3VnaCBhIHN5c3RlbSBjYWxsP1wiLiBMb29rcyBsaWtlIGl0IGRvZXMsIHVzaW5nIGBpb2N0bChVRE1BQlVGX0NSRUFURSlgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSdsbCBuZWVkIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jYC4gSXQncyB0aW1lIHRvIHNlZSB3aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjM3Ljk0MzYwMTg3M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTI4OTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVRE1BQlVGX0NSRUFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTQ4OT1zdGF0aWMgbG9uZyB1ZG1hYnVmX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5NC1cXHRzd2l0Y2ggKGlvY3RsKSB7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0OTU6XFx0Y2FzZSBVRE1BQlVGX0NSRUFURTpcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5Ni1cXHRcXHRyZXQgPSB1ZG1hYnVmX2lvY3RsX2NyZWF0ZShmaWxwLCBhcmcpO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDk3LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDk4OlxcdGNhc2UgVURNQUJVRl9DUkVBVEVfTElTVDpcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ5OS1cXHRcXHRyZXQgPSB1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0KGZpbHAsIGFyZyk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oPTI0PXN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC91ZG1hYnVmLmgtMjktXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaDozMDojZGVmaW5lIFVETUFCVUZfQ1JFQVRFICAgICAgIF9JT1coJ3UnLCAweDQyLCBzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUpXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaDozMTojZGVmaW5lIFVETUFCVUZfQ1JFQVRFX0xJU1QgIF9JT1coJ3UnLCAweDQzLCBzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfbGlzdClcXG5pbmNsdWRlL3VhcGkvbGludXgvdWRtYWJ1Zi5oLTMyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZG1hYnVmX2l0ZXIuYz0yOT1zdGF0aWMgaW50IGNyZWF0ZV91ZG1hYnVmKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9kbWFidWZfaXRlci5jLTU4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2RtYWJ1Zl9pdGVyLmM6NTk6XFx0bG9jYWxfdWRtYWJ1ZiA9IGlvY3RsKGRldl91ZG1hYnVmLCBVRE1BQlVGX0NSRUFURSwgXFx1MDAyNmNyZWF0ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZG1hYnVmX2l0ZXIuYy02MC1cXHRjbG9zZShkZXZfdWRtYWJ1Zik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTU3PXN0YXRpYyBpbnQgY3JlYXRlX3VkbWFidWZfbGlzdChpbnQgZGV2ZmQsIGludCBtZW1mZCwgb2ZmNjRfdCBtZW1mZF9zaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy03Ni1cXHRsaXN0LVxcdTAwM2VmbGFncyA9IFVETUFCVUZfRkxBR1NfQ0xPRVhFQztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjc3OlxcdHVidWZfZmQgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEVfTElTVCwgbGlzdCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy03OC1cXHRmcmVlKGxpc3QpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0xMzM9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTc1LVxcdGNyZWF0ZS5zaXplICAgPSBnZXRwYWdlc2l6ZSgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTc2OlxcdGJ1ZiA9IGlvY3RsKGRldmZkLCBVRE1BQlVGX0NSRUFURSwgXFx1MDAyNmNyZWF0ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xNzctXFx0aWYgKGJ1ZiBcXHUwMDNlPSAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xODUtXFx0Y3JlYXRlLnNpemUgICA9IGdldHBhZ2VzaXplKCkvMjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjE4NjpcXHRidWYgPSBpb2N0bChkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFxcdTAwMjZjcmVhdGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTg3LVxcdGlmIChidWYgXFx1MDAzZT0gMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMTk1LVxcdGNyZWF0ZS5zaXplICAgPSBzaXplO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MTk2OlxcdGJ1ZiA9IGlvY3RsKGRldmZkLCBVRE1BQlVGX0NSRUFURSwgXFx1MDAyNmNyZWF0ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0xOTctXFx0aWYgKGJ1ZiBcXHUwMDNlPSAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0yMDgtXFx0Y3JlYXRlLnNpemUgICA9IHNpemU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoyMDk6XFx0YnVmID0gaW9jdGwoZGV2ZmQsIFVETUFCVUZfQ1JFQVRFLCBcXHUwMDI2Y3JlYXRlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTIxMC1cXHRpZiAoYnVmIFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9MTQxPXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTgxLVxcdGNyZWF0ZS5zaXplID0gc2l6ZTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjE4MjpcXHRjdHgtXFx1MDAzZWZkID0gaW9jdGwoY3R4LVxcdTAwM2VkZXZmZCwgVURNQUJVRl9DUkVBVEUsIFxcdTAwMjZjcmVhdGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTgzLVxcdGlmIChjdHgtXFx1MDAzZWZkIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MjozOS4zODI4OTU1ODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyMjM2MjQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IENvbXBvbmVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBgdWRtYWJ1ZmAgaXMgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gc2VlIGFib3V0IGBpb21tdWZkYC4gQWgsIHllcywgaXQncyBkZWZpbml0ZWx5IGEgY29yZSBzdWJzeXN0ZW0gSSBuZWVkIHRvIGJlIGNvbnNpZGVyaW5nLiBFeHBhbmRpbmcgb3V0d2FyZHMsIEkgc2VlIGBtZW1mZF9hbGxvY19mb2xpb2AgaXMgYWxzbyBhIHJlYWNoYWJsZSBmdW5jdGlvbi4gR29vZCwgZ29vZC4gQnV0IHdoYXQgYWJvdXQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWA/IEFoLCBJIHJlbWVtYmVyLCB0aGF0J3MgY2FsbGVkIHdoZW4gYG1lbWZkX2FsbG9jX2ZvbGlvYCBhbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIOKAkyB0aGF0J3MgYSBrZXkgZGV0YWlsLiBIb2xkIG9uLCBgbWVtZmRfYWxsb2NfZm9saW9gICpvbmx5KiBhbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIGlmIHRoZSBtZW1mZCBpcyBhIGh1Z2V0bGJmcyBmaWxlLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIC0gdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGJlaGF2aW91ci4gUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9tZW1mZC5jYCBhbmQgY2hlY2sgYG1lbWZkX2FsbG9jX2ZvbGlvYCBkaXJlY3RseS4gSSBuZWVkIHRvIGJlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6NDQuMTA1MjYwMTA0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1mZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY4OlxcdHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gIDY5OlxcdHtcXG4gIDcwOlxcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICA3MTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgNzI6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2s7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGlmIChpc19maWxlX2h1Z2VwYWdlcyhtZW1mZCkpIHtcXG4gIDc1OlxcdFxcdFxcdC8qXFxuICA3NjpcXHRcXHRcXHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxcbiAgNzc6XFx0XFx0XFx0ICogdGhlcmVmb3JlLCB3ZSBoYXZlIHpvbmUgbWVtb3J5IGNvbnN0cmFpbnRzIHdoZXJlIHdlIGNhblxcbiAgNzg6XFx0XFx0XFx0ICogYWxsb2MgZnJvbS4gQWxzbywgdGhlIGZvbGlvIHdpbGwgYmUgcGlubmVkIGZvciBhbiBpbmRlZmluaXRlXFxuICA3OTpcXHRcXHRcXHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXFxuICA4MDpcXHRcXHRcXHQgKi9cXG4gIDgxOlxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKG1lbWZkKTtcXG4gIDgyOlxcdFxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XFxuICA4MzpcXHRcXHRcXHRpbnQgZXJyID0gLUVOT01FTTtcXG4gIDg0OlxcdFxcdFxcdGxvbmcgbnJfcmVzdjtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0XFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuICA4NzpcXHRcXHRcXHRnZnBfbWFzayBcXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcXG4gIDg4OlxcdFxcdFxcdGlkeCBcXHUwMDNlXFx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRcXHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XFxuICA5MTpcXHRcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApXFxuICA5MjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihucl9yZXN2KTtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLFxcbiAgOTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrKTtcXG4gIDk4OlxcdFxcdFxcdGlmIChmb2xpbykge1xcbiAgOTk6XFx0XFx0XFx0XFx0dTMyIGhhc2g7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdFxcdFxcdC8qXFxuIDEwMjpcXHRcXHRcXHRcXHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4gMTAzOlxcdFxcdFxcdFxcdCAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWNcXG4gMTA0OlxcdFxcdFxcdFxcdCAqIHBhZ2VzLiBQYXNzIDAgYXMgYWRkcl9oaW50IHNpbmNlIHRoaXMgaXMgbm90IGEgZmF1bHRpbmcgcGF0aFxcbiAxMDU6XFx0XFx0XFx0XFx0ICogIGFuZCB3ZSBkb24ndCBoYXZlIGEgdXNlciB2aXJ0dWFsIGFkZHJlc3MgeWV0LlxcbiAxMDY6XFx0XFx0XFx0XFx0ICovXFxuIDEwNzpcXHRcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0Mjo0NC4xMDU5OTQwNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMDg3OTI3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG1lbWZkX2FsbG9jX2ZvbGlvYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHlldCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIGlzc3VlLiBNeSBpbml0aWFsIHJlYWQgY29uZmlybXMgdGhhdCBgbWVtZmRfYWxsb2NfZm9saW9gICpkb2VzKiBpbmRlZWQgYWxsb2NhdGUgYSBodWdldGxiIGZvbGlvIHdoZW4gZGVhbGluZyB3aXRoIGEgbWVtZmQgZmxhZ2dlZCBmb3IgaHVnZXBhZ2VzIOKAkyBwcmVjaXNlbHkgYXMgaW50ZW5kZWQuIFRoaXMgb2NjdXJzIGZvbGxvd2luZyBhIGNhbGwgdG8gYG1lbWZkX3Bpbl9mb2xpb3NgIG9uIGEgaHVnZXRsYmZzIG1lbWZkLiBUaGUgY29yZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gYSBtaXNzaW5nIGNhbGwgdG8gYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbylgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYSBmb2xpbyBhbGxvY2F0ZWQgaW4gdGhpcyBtYW5uZXIgZ2V0cyBmcmVlZCwgdGhlIG5lY2Vzc2FyeSByZXNlcnZhdGlvbiBpc24ndCBiZWluZyBwcm9wZXJseSByZXN0b3JlZCwgd2hpY2ggY291bGQgbGVhZCB0byByZXNvdXJjZSBsZWFrYWdlIGFuZCBwb3NzaWJsZSBmcmFnbWVudGF0aW9uIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNyaXRpY2FsIG9uZSBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgbmVlZHMgdG8gYmUgYnVsbGV0cHJvb2YuXG5cbkFscmlnaHQsIGxldCdzIHRoaW5rIGFib3V0IGZ1enppbmcgdGhpcy4gWWVzLCBhYnNvbHV0ZWx5LCBpdCdzIHdhcnJhbnRlZCBnaXZlbiB0aGUgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzcG90IHdlIHNob3VsZCBwdXQgdW5kZXIgc2NydXRpbnkuIE5vdywgd2hhdCdzIHRoZSBtb3N0IHJlbGV2YW50IGZvY3VzIHN5bWJvbCBoZXJlPyBBaCwgKnRoYXQqIHdvdWxkIGJlIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLiBIYW5nIG9uLCBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrLiBMZXQncyBwdWxsIHVwIGBtbS9odWdldGxiLmNgIHRvIGNvbmZpcm0gaXRzIHNjb3BlIGFuZCB1c2FnZS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIHRhcmdldCBjYW4gYmUgZGlyZWN0bHkgdGFyZ2V0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODY3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDI6NTQuMzE0Nzg5Mzc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgyMCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQyOjU0LjMxNDgxMDI2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTgwODkxNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKipcblxuUmlnaHQsIHNvIEkndmUgYWxyZWFkeSBzdGFydGVkIGJ5IGdyZXBwaW5nIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYC4gR29vZCwgaXQncyBub3Qgc3RhdGljLCBhbmQgSSBmb3VuZCBpdCBpbiBgbW0vaHVnZXRsYi5jYC4gRXhjZWxsZW50LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3Mgc2VlLCB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGBtZW1mZF9hbGxvY19mb2xpb2AuIE9rYXksIHRoYXQncyBhIHVzZWZ1bCBjb25uZWN0aW9uLiBBcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRvIGNvbnNpZGVyPyBBaCwgeWVzLCBgbWVtZmRfYWxsb2NfZm9saW9gIGl0c2VsZiBpcyBhIHNvbGlkIHN5bWJvbCB0byBrZWVwIGluIGZvY3VzLCBhbmQgYG1lbWZkX3Bpbl9mb2xpb3NgIGxvb2tzIHByb21pc2luZyB0b28uXG5cbkFscmlnaHQsIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGluIGBtbS9odWdldGxiLmNgLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5vdCBzdGF0aWM6XG5cbmBgYGNcbnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbmBgYFxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCB3aGF0IGRvIEkgbmVlZD8gSSdsbCBuZWVkIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBmb3IgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYW5kIGFsc28gZm9yIGBpc19maWxlX2h1Z2VwYWdlc2AuIFRpbWUgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIG9yIG1heWJlIGV2ZW4gYGZzL0tjb25maWdgIHRvIHBpbiBkb3duIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDk0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjAyLjQ5NTcwMzk0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODg1OTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xMjk9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTM0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjEzOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTQyLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDM6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDUtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Njpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Ny1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTQ5LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNTA6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTUxLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz02OTQ9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuLS1cXG5tbS9LY29uZmlnLTY5Ni1cXG5tbS9LY29uZmlnOjY5Nzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTY5OC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjAzLjk2NDU2Nzk1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI4MDcwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBIdWdlVExCIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlc2UgZGVwZW5kZW5jaWVzLiBTbywgdGltZSB0byBkaXZlIGRlZXBlciBhbmQgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9mIGBIVUdFVExCRlNgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBIdWdlVExCIGZpbGVzeXN0ZW0gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIExldCdzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzowOC42OTI2NDA2NzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzMzNjM4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzoxMC4xMjYwMTEwNDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzMDQ2NzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBtZW1mZF9waW5fZm9saW9zYCBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBtZW1mZF9waW5fZm9saW9zYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBIVUdFVExCRlNgIG1pZ2h0IGJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGhlcmUuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgZGl2ZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgYG1lbWZkX3Bpbl9mb2xpb3NgIGZ1bmN0aW9uLiBBaCwgeWVzLCBpdCdzIGRlZmluZWQgaW4gYG1tL2d1cC5jYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgaXQgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBleGVjdXRlZCBiYXNlZCBvbiAqYW55KiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zPyBJIG5lZWQgdG8ga25vdyBpZiBpdHMgYmVoYXZpb3IgaXMgY29udGluZ2VudCBvbiB0aGluZ3MgbGlrZSBodWdlIHBhZ2VzLCBvciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzZXR0aW5ncy4gVG8gY2xhcmlmeSB0aGlzLCBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgYG1tL2d1cC5jYCBpdHNlbGYuIEnigJltIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGF0IGNvZGUgbm93IGFuZCB2ZXJpZnkgaWYgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFmZmVjdHMgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgbWVtZmRfcGluX2ZvbGlvc2AuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0aGF0IHdvdWxkIGxpbmsgaXRzIHVzZSB0byBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzoxNy43NTY0ODExNjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkxMTE5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfcGluX2ZvbGlvc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE1LVxcdGVuZCA9IHN0YXJ0ICsgKHBnY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC0gMTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMxNjpcXHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcXHUwMDI2cGdvZmYpO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE3LVxcdGlmIChucl9mb2xpb3MgXFx1MDAzYz0gMClcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVxcdFxcdCAqIEluIGEgZ2l2ZW4gcmFuZ2UsIG9ubHkgdGhlIGZpcnN0IHN1YnBhZ2Ugb2YgdGhlIGZpcnN0IGZvbGlvXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XFx0XFx0ICogaGFzIGFuIG9mZnNldCwgdGhhdCBpcyByZXR1cm5lZCBieSBtZW1mZF9waW5fZm9saW9zKCkuXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXFx0XFx0ICogVGhlIGZpcnN0IHN1YnBhZ2VzIG9mIG90aGVyIGZvbGlvcyAoaW4gdGhlIHJhbmdlKSBoYXZlIGFuXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz04MjQ9c3RhdGljIGxvbmcgcGluX21lbWZkX3BhZ2VzKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXFx0LypcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MzU6XFx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzYtXFx0ICogd2UgY2FuIGNvbXB1dGUgbnBhZ2VzIHBpbm5lZCwgYW5kIGF2b2lkIGxvb3Bpbmcgb3ZlciBmb2xpb3MgaGVyZVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM4LVxcdCAqL1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcXHRuZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyh1c2VyLVxcdTAwM2VmaWxlLCBzdGFydCwgZW5kLCB1c2VyLVxcdTAwM2V1Zm9saW9zLFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTg0MC1cXHRcXHRcXHRcXHQgICBuZm9saW9zLCBcXHUwMDI2b2Zmc2V0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0zMzc4PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM3OS1cXHRcXHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjMzODA6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzgxLVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYz0xOTA9RVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3BhZ2UpO1xcbi0tXFxubW0vZ3VwLmMtMTk1LSAqXFxubW0vZ3VwLmM6MTk2OiAqIEZvbGlvcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBtZW1mZF9waW5fZm9saW9zKCkgb3Igb3RoZXIgc2ltaWxhciByb3V0aW5lc1xcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxcbi0tXFxubW0vZ3VwLmM9MzQxNT1FWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKTtcXG4tLVxcbm1tL2d1cC5jLTM0MTctLyoqXFxubW0vZ3VwLmM6MzQxODogKiBtZW1mZF9waW5fZm9saW9zKCkgLSBwaW4gZm9saW9zIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWZkXFxubW0vZ3VwLmMtMzQxOS0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXFxuLS1cXG5tbS9ndXAuYy0zNDQyLSAqL1xcbm1tL2d1cC5jOjM0NDM6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbm1tL2d1cC5jLTM0NDQtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jLTM1MzktfVxcbm1tL2d1cC5jOjM1NDA6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XFxubW0vZ3VwLmMtMzU0MS1cXG4tLVxcbm1tL2d1cC5jLTM1NTEtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cXG5tbS9ndXAuYzozNTUyOiAqIHVzaW5nIG1lbWZkX3Bpbl9mb2xpb3MoKSwgYnV0IHdhbnRpbmcgdG8gbG9naWNhbGx5IHVucGluIHBhcnRzXFxubW0vZ3VwLmMtMzU1My0gKiAoZS5nLiwgaW5kaXZpZHVhbCBwYWdlcykgb2YgdGhlIGZvbGlvIGxhdGVyLCBmb3IgZXhhbXBsZSwgdXNpbmdcXG4tLVxcbm1tL21lbWZkLmM9Mzg9c3RhdGljIHZvaWQgbWVtZmRfdGFnX3BpbnMoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxcbm1tL21lbWZkLmM6NjU6ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXFxubW0vbWVtZmQuYy02Ni0gKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cXG4tLVxcbm1tL21lbWZkX2x1by5jPTg3PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL21lbWZkX2x1by5jLTEyOS1cXHQgKiB0aGF0IGlzIHJlYWxseSBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGhhdmUgYVxcbm1tL21lbWZkX2x1by5jOjEzMDpcXHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxcbm1tL21lbWZkX2x1by5jLTEzMS1cXHQgKiBzbG90cy5cXG5tbS9tZW1mZF9sdW8uYy0xMzItXFx0ICovXFxubW0vbWVtZmRfbHVvLmM6MTMzOlxcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcXG5tbS9tZW1mZF9sdW8uYy0xMzQtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b2Zmc2V0KTtcXG4tLVxcbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0yOTEtXFx0LypcXG5tbS9tZW1mZF9sdW8uYzoyOTI6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIGNhcHMgYXQgVUlOVF9NQVggZm9saW9zOyByZWZ1c2UgbGFyZ2VyXFxubW0vbWVtZmRfbHVvLmMtMjkzLVxcdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MTkuMTg1NTk3NDc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDg0MjE0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtleSBTeW1ib2xzIGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgdGhhdCdzIGEga25vd24gcXVhbnRpdHkuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHNwcmluZ3MgdG8gbWluZCBpcyB3aGV0aGVyIGBtZW1mZF9hbGxvY19mb2xpb2AgaXMgYWxzbyBleHBvcnRlZC4gSG1tLCBubywgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgd2l0aGluIGBtbS9tZW1mZC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtZmQuaGAuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IEkgbmVlZCB0byBjb25zaWRlciB1c2FnZS4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHNlZWluZyBgbWVtZmRfYWxsb2NfZm9saW9gIGJlaW5nIGNhbGxlZCBmcm9tIGBtbS9ndXAuY2AuIFllcCwgdGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLlxuXG5MZXQncyBzZWXigKYgSSBhbHNvIGtub3cgdGhhdCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpcyByZWxldmFudCBoZXJlLiBPa2F5LCBsZXQncyBzZWUgaWYgdGhhdCdzIGV4cG9ydGVkLiBOb3BlLCBub3QgZXhwb3J0ZWQsIGJ1dCBpdCBpcyAqbm9uLXN0YXRpYyouIE9rYXksIHNvIGJvdGggYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgYW5kIGBtZW1mZF9hbGxvY19mb2xpb2AgYXJlIHByaW1lIGNhbmRpZGF0ZXMuIEFoLCBhIHNtYWxsIGVwaXBoYW55ISBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpcyBjYWxsZWQgZnJvbSBgbWVtZmRfYWxsb2NfZm9saW9gLCBhbmQgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgbWVtZmRfcGluX2ZvbGlvc2AuIFRoZXJlZm9yZSwgaW5jbHVkaW5nIGBtZW1mZF9waW5fZm9saW9zYCB3aWxsIGdpdmUgbWUgZ29vZCBpbnNpZ2h0LiBTbyBpdCdzIGJlc3QgdG8gbG9vayBhdCBhbGwgdGhyZWUuXG5cbkFscmlnaHQsIGxldCdzIGhlYWQgb3ZlciB0byBgbW0vbWVtZmQuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbWVtZmRfYWxsb2NfZm9saW9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjczNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzoyNi4wOTQwMjA5MzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk0NjMwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1mZC5oPTEwPWV4dGVybiBsb25nIG1lbWZkX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yNy19XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yOS17XFxuLS1cXG5tbS9ndXAuYz0zNDQzPWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbm1tL2d1cC5jLTM1MTgtXFx0XFx0XFx0aWYgKCFucl9mb3VuZCkge1xcbm1tL2d1cC5jOjM1MTk6XFx0XFx0XFx0XFx0Zm9saW8gPSBtZW1mZF9hbGxvY19mb2xpbyhtZW1mZCwgc3RhcnRfaWR4KTtcXG5tbS9ndXAuYy0zNTIwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02Ny0gKi9cXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG5tbS9tZW1mZC5jLTY5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MjcuNTczNDkwMjdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3MjM3MzEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIFVETUFCVUYqKlxuXG5SaWdodCwgYG1lbWZkX2FsbG9jX2ZvbGlvYCBpc24ndCBzdGF0aWMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgSSBzdXNwZWN0ZWQuIE5vdywgbGV0J3MgcGl2b3QgYW5kIGVuc3VyZSB0aGF0IHRoZSBgVURNQUJVRmAgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZGV0YWlscyB3aXRoaW4gdGhlIGBVRE1BQlVGYCBjb25maWcsIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5LCBiZWNhdXNlIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyB3b3JrIHRvZ2V0aGVyIGlzIGNlbnRyYWwgdG8gdGhlIGRlc2lnbiBvZiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MzIuNzQ1ODY2Njk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM3ODk3NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVRE1BQlVGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjM0LjE4Mzc2ODUwOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA1MDE3MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBVRE1BQlVGIGFuZCBJT01NVUZEIGZvciBPcHRpbWl6ZWQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aGlua2luZyBhYm91dCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBpdCBzZWVtcyBsaWtlIGxldmVyYWdpbmcgYFVETUFCVUZgIGlzIGEgc29saWQgcGF0aCBmb3J3YXJkLiBTcGVjaWZpY2FsbHksIGVuYWJsaW5nIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgIGxvb2tzIHByb21pc2luZyB0byBnYWluIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG1lbW9yeSB2aWEgYFVETUFCVUZgLiBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhhdCBhcHByb2FjaCBhbGlnbnMgd2l0aCB0aGUgcGVyZm9ybWFuY2UgZ29hbHMuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gY29uc2lkZXJpbmcgZW5hYmxpbmcgYElPTU1VRkRgIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoaXMuIEl0IG1pZ2h0IG9mZmVyIHNvbWUgYWRkaXRpb25hbCBmbGV4aWJpbGl0eSBvciBjb250cm9sLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRhdGEgSSdtIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gd2VpZ2ggdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiBgSU9NTVVGRGAgYWdhaW5zdCBgVURNQUJVRmAgYW5kIGhvdyB0aGV5J2QgaW50ZWdyYXRlIHdpdGggbXkgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBiZW5jaG1hcmtzIHRvIG1ha2UgYSBmdWxseSBpbmZvcm1lZCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0MzozOC4zODg3ODc3NzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzE2ODI5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPTU1VRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9LY29uZmlnPTc9Y29uZmlnIElPTU1VX0FQSVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTktXFxuZHJpdmVycy9pb21tdS9LY29uZmlnOjEwOmNvbmZpZyBJT01NVUZEX0RSSVZFUlxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjI6Y29uZmlnIElPTU1VRkRfRFJJVkVSX0NPUkVcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTUtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Njpjb25maWcgSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIklPTU1VIFVzZXJzcGFjZSBBUElcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0xOD1pZiBJT01NVUZEXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MTk6Y29uZmlnIElPTU1VRkRfVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0yMC1cXHRib29sIFxcXCJJT01NVUZEIHByb3ZpZGVzIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1xcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTM4LVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjM5OmNvbmZpZyBJT01NVUZEX1RFU1RcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJT01NVSBVc2Vyc3BhY2UgQVBJIFRlc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6MzkuODYwNDc3Mzk2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjI4NTQ3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25jZXJucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBJT01NVUZEYCBoZXJlLCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbnNpZGVyLiBCdXQgcmVhbGx5LCB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZSBgSFVHRVRMQkZTYCBhbmQgYFVETUFCVUZgLiBUaG9zZSBhcmUgdGhlIGJpZyBwbGF5ZXJzLCB0aGUgb25lcyB0aGF0IG9mdGVuIG1ha2Ugb3IgYnJlYWsgbXkgc2V0dXAuIEZpcnN0LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgYEhVR0VUTEJGU2AgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IHJlbGllcyBvbiBvdGhlciBvcHRpb25zIGJlaW5nIGVuYWJsZWQgYmVmb3JlIEkgY2FuIG1vdmUgZm9yd2FyZC4gR290dGEgbWFwIG91dCB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGF2b2lkIGFueSBzdXJwcmlzZXMgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjUxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6NDQuNDIzMzM0MjZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgyNTQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0Mzo0NS44NzE1OTMzOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzkyNzg4MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmb3IgSFVHRVRMQkZTKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLiBXaGVyZSBkb2VzIHRoZSBrZXJuZWwgZGVmaW5lIHRoYXQ/IFJpZ2h0LCBgZnMvS2NvbmZpZ2AgaXMgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbGVzeXN0ZW0tcmVsYXRlZCBvcHRpb25zLiBMZXQncyBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgaXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZyBIVUdFVExCRlNgIGRpcmVjdGl2ZSwgbGlrZWx5IHdpdGggc29tZSBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIGV2ZW4gc29tZSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZSBhbmQgdXNlLiBJJ20gYWxzbyBjdXJpb3VzIGlmIGFueSBvdGhlciByZWxhdGVkIGZlYXR1cmVzIG9yIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBuZWFyYnksIGp1c3QgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDM6NTQuMjY0Mzg1MDgyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbiAyNjU6XFx0XFx0ZGVmYXVsdCBuXFxuIDI2NjpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQzOjU0LjI2NDQ1MDkyMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODUwOTQyMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBteSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgaHVnZSBwYWdlcy4gSXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSAqcHJpbWFyeSogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBvZiBpbnRlcmVzdCBiZWNhdXNlIGl0cyBwcmVzZW5jZSBpcyBnYXRlZCBvbiB0aGUgbW9yZSBmdW5kYW1lbnRhbCBoYXJkd2FyZSByZXF1aXJlbWVudCBkZWZpbmVkIGJ5IGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIFNpbmNlIHRoZSBhcmNoaXRlY3R1cmUgKm11c3QqIHN1cHBvcnQgaHVnZSBwYWdlcyB0byBlbmFibGUgYEhVR0VUTEJGU2AsIHRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbiBmaXJzdCBhbmQgZm9yZW1vc3QuXG5cbk5vdywgSSdtIHNoaWZ0aW5nIGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTGV0J3MgbG9vayBhdCBgVURNQUJVRmAuIEkga25vdyB0aGlzIGlzIHVzZWQgYnkgc2V2ZXJhbCBkbWEtYnVmIGRyaXZlcnMuIEknbSBnb2luZyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnRpY3VsYXIgcGFydCBvZiB0aGUgdHJlZS5cbkknbGwgZ28gY2hlY2sgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCB0byBzdGFydCwgYW5kIHNlZSBpZiBpdCBpbnRlcmFjdHMgd2l0aCBteSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMjo0NDowMC4xMTUzOTcxMTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzM6XFx0Y29uZmlnIFVETUFCVUZcXG4gIDM0OlxcdFxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuICAzNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTUVNRkRfQ1JFQVRFIHx8IENPTVBJTEVfVEVTVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgQSBkcml2ZXIgdG8gbGV0IHVzZXJzcGFjZSB0dXJuIG1lbWZkIHJlZ2lvbnMgaW50byBkbWEtYnVmcy5cXG4gIDQxOlxcdFxcdCAgUWVtdSBjYW4gdXNlIHRoaXMgdG8gY3JlYXRlIGhvc3QgZG1hYnVmcyBmb3IgZ3Vlc3QgZnJhbWVidWZmZXJzLlxcbiAgNDI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQ0OjAwLjExNTQ1NDcwN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODQ5Mzg2NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgVURNQUJVRmAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBmb2N1cyBpcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYFVETUFCVUZgIHJlbGllcyBoZWF2aWx5IG9uIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBNRU1GRF9DUkVBVEVgLCB3aGljaCwgaW4gdHVybiwgcG9pbnRzIGRpcmVjdGx5IHRvIGBIVUdFVExCRlNgIGJlaW5nIGEga2V5IGNvbmZpZ3VyYXRpb24gZWxlbWVudCBhbG9uZ3NpZGUgYFVETUFCVUZgIGl0c2VsZi4gU28sIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBhbmQgYFVETUFCVUZgIGFyZSB0aGUgd2lubmVycyBoZXJlLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIFwiV29ydGhGdXp6aW5nXCIgYXNwZWN0LiBUaGUga2V5IHN5bWJvbHMgaWRlbnRpZmllZCDigJMgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAsIGBtZW1mZF9hbGxvY19mb2xpb2AsIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2Ag4oCTIGltbWVkaWF0ZWx5IGhpZ2hsaWdodCB0aGUgYXJlYSBvZiBjb25jZXJuLiBUaGUgY3J1eCBvZiB0aGUgZml4IGlzIHRoYXQgYSBjcnVjaWFsIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGNhbGwgd2FzIG1pc3Npbmcgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIHNwZWNpZmljYWxseSB3aGVuIGEgZm9saW8gaXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaGVhcnQgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZXRsYiBzdWJzeXN0ZW0uIFdlJ3JlIHRhbGtpbmcgYWJvdXQgaG93IHJlc2VydmF0aW9ucyBhcmUgcmVzdG9yZWQgd2hlbiBmb2xpb3MgYXJlIGZyZWVkLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBoZXJlIGlzIHRoZSB1c2Vyc3BhY2UgcmVhY2hhYmlsaXR5IHZpYSBgbWVtZmRfcGluX2ZvbGlvc2AuIElmIGEgdXNlciBjYW4gdXNlIGB1ZG1hYnVmYCBvciBldmVuIGBpb21tdWZkYCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgaHVnZXRsYmZzIG1lbWZkLCB0aGV5IGNhbiBoaXQgdGhlIGNvZGUgaW4gcXVlc3Rpb24sIG1ha2luZyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggZWZmZWN0aXZlbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSByZXNlcnZhdGlvbiBsZWFrIG9yIGNvcnJ1cHRpb24gc2NlbmFyaW8gdHJpZ2dlcmVkIHRocm91Z2ggdGhpcyB1c2VyLXNwYWNlIGludGVyZmFjZS4gVGhpcyB0eXBlIG9mIHBhdGNoIGlzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGxpa2VseSBnbyB1bm5vdGljZWQgaW4gZGF5LXRvLWRheSB1c2UsIGJ1dCB3aGVuIHB1c2hlZCB0byBpdHMgbGltaXRzIGNvdWxkIGNhdXNlIGFuIGlzc3VlIHRoYXQgY291bGQgYmUgZXhwbG9pdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTE1LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQ0OjA4Ljk2NDg0MzkwNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTkxMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlVETUFCVUZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVcIixcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGNhbGwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgd2hlbiBhIGZvbGlvIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGh1Z2V0bGIpIHRoYXQgYWZmZWN0cyBob3cgcmVzZXJ2YXRpb25zIGFyZSByZXN0b3JlZCB3aGVuIGZvbGlvcyBhcmUgZnJlZWQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBtZW1mZF9waW5fZm9saW9zYCAoZS5nLiwgdXNpbmcgYHVkbWFidWZgIG9yIGBpb21tdWZkYCB3aXRoIGEgaHVnZXRsYmZzIG1lbWZkKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlVETUFCVUZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVcIixcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGNhbGwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgd2hlbiBhIGZvbGlvIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGh1Z2V0bGIpIHRoYXQgYWZmZWN0cyBob3cgcmVzZXJ2YXRpb25zIGFyZSByZXN0b3JlZCB3aGVuIGZvbGlvcyBhcmUgZnJlZWQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBtZW1mZF9waW5fZm9saW9zYCAoZS5nLiwgdXNpbmcgYHVkbWFidWZgIG9yIGBpb21tdWZkYCB3aXRoIGEgaHVnZXRsYmZzIG1lbWZkKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MDkuMDM0MDQxMjA5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwNjMxMzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAyOjQ0OjA5LjAzNDUxODUzOVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjYwNTgzMzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlYmM5NjYzYTllMjc3ZWU3MGJiOTU0OTBjYmQ1NDIxNWM3YmEyODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMjo0MToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZDg4NDkxOTZhZDliMS4uZmFkZmUxZGJjMDQ3YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMjE3OCw4ICsyMTc4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsXG4gXHRcdFx0XHRcdCAgICAgICBubWFzayk7XG4tXHRpZiAoZm9saW8pXG4rXHRpZiAoZm9saW8pIHtcbitcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbiBcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbitcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MDkuMDM0NTE5MjU5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDc0MzExNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgSHVnZXRsYiBGb2xpbyBSZXNlcnZlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQncyBhZGRpbmcgYGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7YCB3aGVuIHRoZSBgZm9saW9gIGlzIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGxvb2sgaW50byB3aGF0IGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGFjdHVhbGx5ICpkb2VzKi4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQncyBwcm9iYWJseSBhIGZsYWcgc2V0dGluZyBvcGVyYXRpb24gb24gdGhlIGZvbGlvIHN0cnVjdHVyZSBpdHNlbGYuXG5cbkhtbSwgdGhpcyBpbml0aWFsbHkgZG9lc24ndCBzY3JlYW0gXCJ1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5XCIgdG8gbWUuIEl0IHNvdW5kcyBsaWtlIGl0J3Mgc3F1YXJlbHkgaW4gdGhlIHJlYWxtIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGh1Z2V0bGIgcmVzZXJ2ZXMgYW5kIGZvbGlvIGZsYWdzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIExldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLlxuXG5Ib2xkIG9uLCBsZXQgbWUgcXVpY2tseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIFRoZSBwYXRjaCAqanVzdCogc2V0cyBhIGZsYWcgb24gYSBgZm9saW9gLiBTaW5jZSBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIHRoaXMgaXMganVzdCBhIGZsYWcgc2V0dGluZy4uLiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzLiBUaGlzIGlzbid0IEtBU0FOIHRlcnJpdG9yeSwgZWl0aGVyOyB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIE9PQiBhY2Nlc3MsIFVzZS1BZnRlci1GcmVlLCBvciBhbnkgb2YgdGhvc2Uga2luZHMgb2YgaXNzdWVzLlxuXG5Gcm9tIHRoaXMgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBidWcgZml4IHJlbGF0ZWQgdG8gaHVnZXRsYiByZXNlcnZlcyDigJMgcG9zc2libHkgYSBsZWFrIG9yIGFjY291bnRpbmcgZXJyb3IuIENydWNpYWxseSwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGdvb2QuIFRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBObyBtb2RpZmljYXRpb25zIG9mIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBlaXRoZXIuXG5cbkkgdGhpbmsgSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmVgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlICpjb21wbGV0ZWx5KiBzdXJlLiBJdCdzIHByb2JhYmx5IGp1c3QgYSBzdHJhaWdodGZvcndhcmQgYml0LXNldCBvcGVyYXRpb24uIEJ1dCBJJ20gZmVlbGluZyBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MTQuNzQxOTUzMzY1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY1MzA3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjE2OD1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMTgxLVxcdGlmIChmb2xpbykge1xcbm1tL2h1Z2V0bGIuYzoyMTgyOlxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTIxODMtXFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9MjU1MD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTkyLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNTkzOlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI1OTQtXFx0XFx0fSBlbHNlIGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjEzLVxcdFxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNjE0OlxcdFxcdFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI2MTUtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODMyPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI4NzQtXFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24pIHtcXG5tbS9odWdldGxiLmM6Mjg3NTpcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yODc2LVxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUyMTA9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzMjgtXFx0XFx0ICAgICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6NTMyOTpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01MzMwLVxcdFxcdFxcdC8qIFJlc2VydmF0aW9uIHRvIGJlIGFkanVzdGVkIGFmdGVyIHRoZSBzcGluIGxvY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MTQuOTU4NDkwOTc5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjgxODQxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZvbGlvIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIGVzc2VudGlhbGx5IGp1c3QgYSBzaW1wbGUgZmxhZyB0aGF0J3MgYmVpbmcgc2V0IG9uIGEgZm9saW8uIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGFsbCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nLiBUaGlzIGZsYWcncyByb2xlIGlzIGNsZWFybHkgZGVmaW5lZDogaXQncyB1c2VkIHRvIHJlc3RvcmUgdGhvc2UgaHVnZXRsYiByZXNlcnZlcyBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igb3IgZHVyaW5nIGFuIHVubWFwIG9wZXJhdGlvbi4gTXkgYW5hbHlzaXMgc3VnZ2VzdHMgdGhlcmUncyBubyByaXNrIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgY3JvcHBpbmcgdXAgaGVyZS4gVGhlcmVmb3JlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTUsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDI6NDQ6MjUuNjQwMzM0NzE3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGZvbGlvIGFsbG9jYXRpb24gbG9naWMgYnkgc2V0dGluZyB0aGUgYGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlYCBmbGFnIG9uIGEgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkIGZvbGlvLiBUaGlzIGlzIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFjY291bnRpbmcgYW5kIGh1Z2V0bGIgcmVzZXJ2ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbWVtb3J5IGxlYWtzLCBpbmNvcnJlY3QgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHNldHRpbmcgdGhlIGBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZWAgZmxhZyBvbiBhIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBmb2xpby4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhY2NvdW50aW5nIGFuZCBodWdldGxiIHJlc2VydmVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIG1lbW9yeSBsZWFrcywgaW5jb3JyZWN0IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[1] Phase: Succeeded StartedAt: 2026-08-25 02:44:37 +0000 UTC FinishedAt: 2026-08-25 02:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 02:44:37 +0000 UTC FinishedAt: 2026-08-25 02:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2] Phase: Succeeded StartedAt: 2026-08-25 02:44:37 +0000 UTC FinishedAt: 2026-08-25 06:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 02:44:37 +0000 UTC FinishedAt: 2026-08-25 06:25:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 02:44:37 +0000 UTC FinishedAt: 2026-08-25 02:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 02:44:37 +0000 UTC FinishedAt: 2026-08-25 02:44:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowqm4vl/series-workflowqm4vl-convert-artifact-2292508315/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 02:44:47 +0000 UTC FinishedAt: 2026-08-25 03:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 02:44:47 +0000 UTC FinishedAt: 2026-08-25 03:00:50 +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:*074985cf-e29c-4c80-bcaa-bc05ae720ae2,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-workflowqm4vl/series-workflowqm4vl-convert-artifact-2292508315/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": "1c501d23-bfd3-421d-beac-2050140d75ed", "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-workflowqm4vl/series-workflowqm4vl-build-action-2581230297/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 02:44:47 +0000 UTC FinishedAt: 2026-08-25 03:00:40 +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:*074985cf-e29c-4c80-bcaa-bc05ae720ae2,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-workflowqm4vl/series-workflowqm4vl-convert-artifact-2292508315/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": "1c501d23-bfd3-421d-beac-2050140d75ed", "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-workflowqm4vl/series-workflowqm4vl-build-action-2581230297/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 03:00:50 +0000 UTC FinishedAt: 2026-08-25 03:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 03:00:50 +0000 UTC FinishedAt: 2026-08-25 03:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 03:00:50 +0000 UTC FinishedAt: 2026-08-25 03:01:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 03:00:50 +0000 UTC FinishedAt: 2026-08-25 03:00:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowqm4vl/series-workflowqm4vl-convert-artifact-628030962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 03:01:00 +0000 UTC FinishedAt: 2026-08-25 03:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 03:01:00 +0000 UTC FinishedAt: 2026-08-25 03:03:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1c501d23-bfd3-421d-beac-2050140d75ed,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-workflowqm4vl/series-workflowqm4vl-build-action-2581230297/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-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 03:03:32 +0000 UTC FinishedAt: 2026-08-25 03:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 03:03:32 +0000 UTC FinishedAt: 2026-08-25 03:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 03:03:32 +0000 UTC FinishedAt: 2026-08-25 03:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 03:03:32 +0000 UTC FinishedAt: 2026-08-25 03:19:38 +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:*074985cf-e29c-4c80-bcaa-bc05ae720ae2,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-workflowqm4vl/series-workflowqm4vl-convert-artifact-628030962/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": "1da9a507-4abc-4922-b30d-ecc36c384c28", "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-workflowqm4vl/series-workflowqm4vl-build-action-1293745542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 03:03:32 +0000 UTC FinishedAt: 2026-08-25 03:19:28 +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:*074985cf-e29c-4c80-bcaa-bc05ae720ae2,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-workflowqm4vl/series-workflowqm4vl-convert-artifact-628030962/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": "1da9a507-4abc-4922-b30d-ecc36c384c28", "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-workflowqm4vl/series-workflowqm4vl-build-action-1293745542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 03:19:38 +0000 UTC FinishedAt: 2026-08-25 03:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 03:19:38 +0000 UTC FinishedAt: 2026-08-25 03:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 03:19:38 +0000 UTC FinishedAt: 2026-08-25 03:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 03:19:38 +0000 UTC FinishedAt: 2026-08-25 03:21:41 +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:*1da9a507-4abc-4922-b30d-ecc36c384c28,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-workflowqm4vl/series-workflowqm4vl-build-action-1293745542/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-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 03:21:51 +0000 UTC FinishedAt: 2026-08-25 06:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 03:21:51 +0000 UTC FinishedAt: 2026-08-25 06:25:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},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:*1c501d23-bfd3-421d-beac-2050140d75ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1da9a507-4abc-4922-b30d-ecc36c384c28,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-workflowqm4vl/series-workflowqm4vl-build-action-2581230297/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-workflowqm4vl/series-workflowqm4vl-build-action-1293745542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 03:21:51 +0000 UTC FinishedAt: 2026-08-25 03:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 03:21:51 +0000 UTC FinishedAt: 2026-08-25 03:21:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},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-workflowqm4vl/series-workflowqm4vl-convert-artifact-209024583/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 03:21:51 +0000 UTC FinishedAt: 2026-08-25 03:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 03:21:51 +0000 UTC FinishedAt: 2026-08-25 03:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 03:21:51 +0000 UTC FinishedAt: 2026-08-25 03:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 03:22:01 +0000 UTC FinishedAt: 2026-08-25 06:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm4vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio_reserve","memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d268963816d3c5ef1ae011821581e4d951c74542","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","UDMABUF"],"series_id":"51b9f2d6-80b7-44fe-a95f-ff4664651256","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 03:22:01 +0000 UTC FinishedAt: 2026-08-25 06:24:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1c501d23-bfd3-421d-beac-2050140d75ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1da9a507-4abc-4922-b30d-ecc36c384c28,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-workflowqm4vl/series-workflowqm4vl-build-action-2581230297/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-workflowqm4vl/series-workflowqm4vl-build-action-1293745542/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-workflowqm4vl/series-workflowqm4vl-convert-artifact-209024583/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,}